annotate DEPENDENCIES/generic/include/boost/graph/adj_list_serialize.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 //=======================================================================
Chris@16 2 // Copyright 2005 Jeremy G. Siek
Chris@16 3 // Authors: Jeremy G. Siek
Chris@16 4 //
Chris@16 5 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 6 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 7 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8 //=======================================================================
Chris@16 9 #ifndef ADJ_LIST_SERIALIZE_HPP
Chris@16 10 #define ADJ_LIST_SERIALIZE_HPP
Chris@16 11
Chris@16 12 #include <boost/graph/adjacency_list.hpp>
Chris@16 13 #include <boost/graph/iteration_macros.hpp>
Chris@16 14 #include <boost/pending/property_serialize.hpp>
Chris@16 15 #include <boost/config.hpp>
Chris@16 16 #include <boost/detail/workaround.hpp>
Chris@16 17
Chris@16 18 #include <boost/serialization/collections_save_imp.hpp>
Chris@16 19 #include <boost/serialization/collections_load_imp.hpp>
Chris@16 20 #include <boost/serialization/split_free.hpp>
Chris@16 21
Chris@16 22 namespace boost {
Chris@16 23
Chris@16 24 namespace serialization {
Chris@16 25
Chris@16 26 // Turn off tracking for adjacency_list. It's not polymorphic, and we
Chris@16 27 // need to do this to enable saving of non-const adjacency lists.
Chris@16 28 template<class OEL, class VL, class D, class VP, class EP, class GP, class EL>
Chris@16 29 struct tracking_level<boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> > {
Chris@16 30 typedef mpl::integral_c_tag tag;
Chris@16 31 typedef mpl::int_<track_never> type;
Chris@16 32 BOOST_STATIC_CONSTANT(int, value = tracking_level::type::value);
Chris@16 33 };
Chris@16 34
Chris@16 35 template<class Archive, class OEL, class VL, class D,
Chris@16 36 class VP, class EP, class GP, class EL>
Chris@16 37 inline void save(
Chris@16 38 Archive & ar,
Chris@16 39 const boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> &graph,
Chris@16 40 const unsigned int /* file_version */
Chris@16 41 ){
Chris@16 42 typedef adjacency_list<OEL,VL,D,VP,EP,GP,EL> Graph;
Chris@16 43 typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
Chris@16 44
Chris@16 45 int V = num_vertices(graph);
Chris@16 46 int E = num_edges(graph);
Chris@16 47 ar << BOOST_SERIALIZATION_NVP(V);
Chris@16 48 ar << BOOST_SERIALIZATION_NVP(E);
Chris@16 49
Chris@16 50 // assign indices to vertices
Chris@16 51 std::map<Vertex,int> indices;
Chris@16 52 int num = 0;
Chris@16 53 BGL_FORALL_VERTICES_T(v, graph, Graph) {
Chris@16 54 indices[v] = num++;
Chris@16 55 ar << serialization::make_nvp("vertex_property", get(vertex_all_t(), graph, v) );
Chris@16 56 }
Chris@16 57
Chris@16 58 // write edges
Chris@16 59 BGL_FORALL_EDGES_T(e, graph, Graph) {
Chris@16 60 ar << serialization::make_nvp("u" , indices[source(e,graph)]);
Chris@16 61 ar << serialization::make_nvp("v" , indices[target(e,graph)]);
Chris@16 62 ar << serialization::make_nvp("edge_property", get(edge_all_t(), graph, e) );
Chris@16 63 }
Chris@16 64
Chris@16 65 ar << serialization::make_nvp("graph_property", get_property(graph, graph_all_t()) );
Chris@16 66 }
Chris@16 67
Chris@16 68
Chris@16 69 template<class Archive, class OEL, class VL, class D,
Chris@16 70 class VP, class EP, class GP, class EL>
Chris@16 71 inline void load(
Chris@16 72 Archive & ar,
Chris@16 73 boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> &graph,
Chris@16 74 const unsigned int /* file_version */
Chris@16 75 ){
Chris@16 76 typedef adjacency_list<OEL,VL,D,VP,EP,GP,EL> Graph;
Chris@16 77 typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
Chris@16 78 typedef typename graph_traits<Graph>::edge_descriptor Edge;
Chris@16 79
Chris@16 80 unsigned int V;
Chris@16 81 ar >> BOOST_SERIALIZATION_NVP(V);
Chris@16 82 unsigned int E;
Chris@16 83 ar >> BOOST_SERIALIZATION_NVP(E);
Chris@16 84
Chris@16 85 std::vector<Vertex> verts(V);
Chris@16 86 int i = 0;
Chris@16 87 while(V-- > 0){
Chris@16 88 Vertex v = add_vertex(graph);
Chris@16 89 verts[i++] = v;
Chris@16 90 ar >> serialization::make_nvp("vertex_property", get(vertex_all_t(), graph, v) );
Chris@16 91 }
Chris@16 92 while(E-- > 0){
Chris@16 93 int u; int v;
Chris@16 94 ar >> BOOST_SERIALIZATION_NVP(u);
Chris@16 95 ar >> BOOST_SERIALIZATION_NVP(v);
Chris@16 96 Edge e; bool inserted;
Chris@16 97 boost::tie(e,inserted) = add_edge(verts[u], verts[v], graph);
Chris@16 98 ar >> serialization::make_nvp("edge_property", get(edge_all_t(), graph, e) );
Chris@16 99 }
Chris@16 100 ar >> serialization::make_nvp("graph_property", get_property(graph, graph_all_t()) );
Chris@16 101 }
Chris@16 102
Chris@16 103 template<class Archive, class OEL, class VL, class D, class VP, class EP, class GP, class EL>
Chris@16 104 inline void serialize(
Chris@16 105 Archive & ar,
Chris@16 106 boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> &graph,
Chris@16 107 const unsigned int file_version
Chris@16 108 ){
Chris@16 109 boost::serialization::split_free(ar, graph, file_version);
Chris@16 110 }
Chris@16 111
Chris@16 112 }//serialization
Chris@16 113 }//boost
Chris@16 114
Chris@16 115
Chris@16 116 #endif // ADJ_LIST_SERIALIZE_HPP