Added boost header
This commit is contained in:
113
test/external/boost/graph/adj_list_serialize.hpp
vendored
Normal file
113
test/external/boost/graph/adj_list_serialize.hpp
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
//=======================================================================
|
||||
// Copyright 2005 Jeremy G. Siek
|
||||
// Authors: Jeremy G. Siek
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See
|
||||
// accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//=======================================================================
|
||||
#ifndef ADJ_LIST_SERIALIZE_HPP
|
||||
#define ADJ_LIST_SERIALIZE_HPP
|
||||
|
||||
#include <boost/graph/adjacency_list.hpp>
|
||||
#include <boost/graph/iteration_macros.hpp>
|
||||
#include <boost/pending/property_serialize.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
|
||||
#include <boost/serialization/collections_save_imp.hpp>
|
||||
#include <boost/serialization/collections_load_imp.hpp>
|
||||
#include <boost/serialization/split_free.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
namespace serialization {
|
||||
|
||||
// Turn off tracking for adjacency_list. It's not polymorphic, and we
|
||||
// need to do this to enable saving of non-const adjacency lists.
|
||||
template<class OEL, class VL, class D, class VP, class EP, class GP, class EL>
|
||||
struct tracking_level<boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> > {
|
||||
typedef mpl::integral_c_tag tag;
|
||||
typedef mpl::int_<track_never> type;
|
||||
BOOST_STATIC_CONSTANT(int, value = tracking_level::type::value);
|
||||
};
|
||||
|
||||
template<class Archive, class OEL, class VL, class D,
|
||||
class VP, class EP, class GP, class EL>
|
||||
inline void save(
|
||||
Archive & ar,
|
||||
const boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> &graph,
|
||||
const unsigned int /* file_version */
|
||||
){
|
||||
typedef adjacency_list<OEL,VL,D,VP,EP,GP,EL> Graph;
|
||||
typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
|
||||
|
||||
int V = num_vertices(graph);
|
||||
int E = num_edges(graph);
|
||||
ar << BOOST_SERIALIZATION_NVP(V);
|
||||
ar << BOOST_SERIALIZATION_NVP(E);
|
||||
|
||||
// assign indices to vertices
|
||||
std::map<Vertex,int> indices;
|
||||
int num = 0;
|
||||
BGL_FORALL_VERTICES_T(v, graph, Graph) {
|
||||
indices[v] = num++;
|
||||
ar << serialization::make_nvp("vertex_property", get(vertex_all_t(), graph, v) );
|
||||
}
|
||||
|
||||
// write edges
|
||||
BGL_FORALL_EDGES_T(e, graph, Graph) {
|
||||
ar << serialization::make_nvp("u" , indices[source(e,graph)]);
|
||||
ar << serialization::make_nvp("v" , indices[target(e,graph)]);
|
||||
ar << serialization::make_nvp("edge_property", get(edge_all_t(), graph, e) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Archive, class OEL, class VL, class D,
|
||||
class VP, class EP, class GP, class EL>
|
||||
inline void load(
|
||||
Archive & ar,
|
||||
boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> &graph,
|
||||
const unsigned int /* file_version */
|
||||
){
|
||||
typedef adjacency_list<OEL,VL,D,VP,EP,GP,EL> Graph;
|
||||
typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
|
||||
typedef typename graph_traits<Graph>::edge_descriptor Edge;
|
||||
|
||||
unsigned int V;
|
||||
ar >> BOOST_SERIALIZATION_NVP(V);
|
||||
unsigned int E;
|
||||
ar >> BOOST_SERIALIZATION_NVP(E);
|
||||
|
||||
std::vector<Vertex> verts(V);
|
||||
int i = 0;
|
||||
while(V-- > 0){
|
||||
Vertex v = add_vertex(graph);
|
||||
verts[i++] = v;
|
||||
ar >> serialization::make_nvp("vertex_property", get(vertex_all_t(), graph, v) );
|
||||
}
|
||||
while(E-- > 0){
|
||||
int u; int v;
|
||||
ar >> BOOST_SERIALIZATION_NVP(u);
|
||||
ar >> BOOST_SERIALIZATION_NVP(v);
|
||||
Edge e; bool inserted;
|
||||
boost::tie(e,inserted) = add_edge(verts[u], verts[v], graph);
|
||||
ar >> serialization::make_nvp("edge_property", get(edge_all_t(), graph, e) );
|
||||
}
|
||||
}
|
||||
|
||||
template<class Archive, class OEL, class VL, class D, class VP, class EP, class GP, class EL>
|
||||
inline void serialize(
|
||||
Archive & ar,
|
||||
boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> &graph,
|
||||
const unsigned int file_version
|
||||
){
|
||||
boost::serialization::split_free(ar, graph, file_version);
|
||||
}
|
||||
|
||||
}//serialization
|
||||
}//boost
|
||||
|
||||
|
||||
#endif // ADJ_LIST_SERIALIZE_HPP
|
||||
Reference in New Issue
Block a user