1 // Copyright (C) 2006 Trustees of Indiana University
2 //
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 
7 #include <boost/config.hpp>
8 #include <iostream>
9 #include <fstream>
10 #include <string>
11 #include <boost/tuple/tuple.hpp>
12 #include <boost/graph/adjacency_list.hpp>
13 #include <boost/graph/visitors.hpp>
14 #include <boost/graph/breadth_first_search.hpp>
15 #include <map>
16 #include <boost/graph/adj_list_serialize.hpp>
17 #include <boost/archive/xml_iarchive.hpp>
18 #include <boost/archive/xml_oarchive.hpp>
19 
20 struct vertex_properties
21 {
22     std::string name;
23 
24     template < class Archive >
serializevertex_properties25     void serialize(Archive& ar, const unsigned int /*version*/)
26     {
27         ar& BOOST_SERIALIZATION_NVP(name);
28     }
29 };
30 
31 struct edge_properties
32 {
33     std::string name;
34 
35     template < class Archive >
serializeedge_properties36     void serialize(Archive& ar, const unsigned int /*version*/)
37     {
38         ar& BOOST_SERIALIZATION_NVP(name);
39     }
40 };
41 
42 using namespace boost;
43 
44 typedef adjacency_list< vecS, vecS, undirectedS, vertex_properties,
45     edge_properties >
46     Graph;
47 
48 typedef graph_traits< Graph >::vertex_descriptor vd_type;
49 
50 typedef adjacency_list< vecS, vecS, undirectedS, vertex_properties >
51     Graph_no_edge_property;
52 
main()53 int main()
54 {
55     {
56         std::ofstream ofs("./kevin-bacon2.dat");
57         archive::xml_oarchive oa(ofs);
58         Graph g;
59         vertex_properties vp;
60         vp.name = "A";
61         vd_type A = add_vertex(vp, g);
62         vp.name = "B";
63         vd_type B = add_vertex(vp, g);
64 
65         edge_properties ep;
66         ep.name = "a";
67         add_edge(A, B, ep, g);
68 
69         oa << BOOST_SERIALIZATION_NVP(g);
70 
71         Graph_no_edge_property g_n;
72         oa << BOOST_SERIALIZATION_NVP(g_n);
73     }
74 
75     {
76         std::ifstream ifs("./kevin-bacon2.dat");
77         archive::xml_iarchive ia(ifs);
78         Graph g;
79         ia >> BOOST_SERIALIZATION_NVP(g);
80 
81         if (!(g[*(vertices(g).first)].name == "A"))
82             return -1;
83 
84         Graph_no_edge_property g_n;
85         ia >> BOOST_SERIALIZATION_NVP(g_n);
86     }
87     return 0;
88 }
89