
Greetings, It seems that serializing a graph into a file is broken. If I strip down the Kevin bacon example and make it write to an archive rather than read, I get a rather lengthy error message with g++ 3.3, 3.4, 4.0, and 4.1 on Linux. I get a different error if I try to serialize a graph with no edge property. Is that known to be unsupported? I am attaching the sample file and the error from g++ 4.1. This is using the CVS version as of about a week ago. As an aside, adjacency_list does not implement empty(). Shouldn't it? Cheers, Walter Landry wlandry@ucsd.edu #include <boost/config.hpp> #include <iostream> #include <fstream> #include <string> #include <boost/tuple/tuple.hpp> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/visitors.hpp> #include <boost/graph/breadth_first_search.hpp> #include <map> #include <boost/graph/adj_list_serialize.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/archive/text_oarchive.hpp> struct vertex_properties { std::string name; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & name; } }; struct edge_properties { std::string name; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & name; } }; using namespace boost; typedef adjacency_list<vecS, vecS, undirectedS, vertex_properties, edge_properties> Graph; typedef adjacency_list<vecS, vecS, undirectedS, vertex_properties> Graph_no_edge_property; int main() { { std::ifstream ifs("./kevin-bacon2.dat"); archive::text_iarchive ia(ifs); Graph g; ia >> g; // Graph_no_edge_property g_n; // ia >> g_n; } { std::ofstream ofs("./kevin-bacon2.dat"); archive::text_oarchive oa(ofs); Graph g; oa << g; // Graph_no_edge_property g_n; // oa << g_n; } return 0; } ../../../boost/boost/graph/adj_list_serialize.hpp: In function ‘void boost::serialization::save(Archive&, const boost::adjacency_list<OEL, VL, D, VP, EP, GP, EL>&, unsigned int) [with Archive = boost::archive::text_oarchive, OEL = boost::vecS, VL = boost::vecS, D = boost::undirectedS, VP = vertex_properties, EP = edge_properties, GP = boost::no_property, EL = boost::listS]’: ../../../boost/boost/serialization/split_free.hpp:45: instantiated from ‘static void boost::serialization::free_saver<Archive, T>::invoke(Archive&, const T&, unsigned int) [with Archive = boost::archive::text_oarchive, T = boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>]’ ../../../boost/boost/serialization/split_free.hpp:74: instantiated from ‘void boost::serialization::split_free(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive, T = boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>]’ ../../../boost/boost/graph/adj_list_serialize.hpp:97: instantiated from ‘void boost::serialization::serialize(Archive&, boost::adjacency_list<OEL, VL, D, VP, EP, GP, EL>&, unsigned int) [with Archive = boost::archive::text_oarchive, OEL = boost::vecS, VL = boost::vecS, D = boost::undirectedS, VP = vertex_properties, EP = edge_properties, GP = boost::no_property, EL = boost::listS]’ ../../../boost/boost/serialization/serialization.hpp:140: instantiated from ‘void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive, T = boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>]’ ../../../boost/boost/archive/detail/oserializer.hpp:151: instantiated from ‘void boost::archive::detail::oserializer<Archive, T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*) const [with Archive = boost::archive::text_oarchive, T = boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>]’ kevin-bacon2.cpp:61: instantiated from here ../../../boost/boost/graph/adj_list_serialize.hpp:45: error: no match for ‘operator<<’ in ‘ar << boost::get(Property, const boost::adj_list_helper<Config, Base>&, const Key&) [with Config = boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config, Base = boost::undirected_graph_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config>, Property = boost::vertex_all_t, Key = unsigned int](((const boost::adj_list_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config, boost::undirected_graph_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config> >&)((const boost::adj_list_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config, boost::undirected_graph_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config> >*)(+ graph))), ((const unsigned int&)(+((boost::iterator_facade<boost::counting_iterator<unsigned int, boost::use_default, boost::use_default>, unsigned int, boost::random_access_traversal_tag, const unsigned int&, long long int>*)(& vi))->boost::iterator_facade<I, V, TC, R, D>::operator* [with Derived = boost::counting_iterator<unsigned int, boost::use_default, boost::use_default>, Value = unsigned int, CategoryOrTraversal = boost::random_access_traversal_tag, Reference = const unsigned int&, Difference = long long int]())))’ ../../../boost/boost/archive/detail/interface_oarchive.hpp:78: note: candidates are: Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(T&) [with T = boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, Archive = boost::archive::text_oarchive] ../../../boost/boost/serialization/split_free.hpp:45: instantiated from ‘static void boost::serialization::free_saver<Archive, T>::invoke(Archive&, const T&, unsigned int) [with Archive = boost::archive::text_oarchive, T = boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>]’ ../../../boost/boost/serialization/split_free.hpp:74: instantiated from ‘void boost::serialization::split_free(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive, T = boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>]’ ../../../boost/boost/graph/adj_list_serialize.hpp:97: instantiated from ‘void boost::serialization::serialize(Archive&, boost::adjacency_list<OEL, VL, D, VP, EP, GP, EL>&, unsigned int) [with Archive = boost::archive::text_oarchive, OEL = boost::vecS, VL = boost::vecS, D = boost::undirectedS, VP = vertex_properties, EP = edge_properties, GP = boost::no_property, EL = boost::listS]’ ../../../boost/boost/serialization/serialization.hpp:140: instantiated from ‘void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive, T = boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>]’ ../../../boost/boost/archive/detail/oserializer.hpp:151: instantiated from ‘void boost::archive::detail::oserializer<Archive, T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*) const [with Archive = boost::archive::text_oarchive, T = boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>]’ kevin-bacon2.cpp:61: instantiated from here ../../../boost/boost/graph/adj_list_serialize.hpp:53: error: no match for ‘operator<<’ in ‘ar << boost::get(Property, const boost::adj_list_helper<Config, Base>&, const Key&) [with Config = boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config, Base = boost::undirected_graph_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config>, Property = boost::edge_all_t, Key = boost::detail::edge_desc_impl<boost::undirected_tag, unsigned int>](((const boost::adj_list_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config, boost::undirected_graph_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config> >&)((const boost::adj_list_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config, boost::undirected_graph_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex_properties, edge_properties, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, vertex_properties, boost::no_property>, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, boost::no_property, boost::listS>::config> >*)(+ graph))), ((const boost::detail::edge_desc_impl<boost::undirected_tag, unsigned int>&)((const boost::detail::edge_desc_impl<boost::undirected_tag, unsigned int>*)(&((boost::iterator_facade<boost::detail::undirected_edge_iter<std::_List_iterator<boost::list_edge<unsigned int, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property> > >, boost::detail::edge_desc_impl<boost::undirected_tag, unsigned int>, int>, boost::detail::edge_desc_impl<boost::undirected_tag, unsigned int>, boost::bidirectional_traversal_tag, boost::detail::edge_desc_impl<boost::undirected_tag, unsigned int>, int>*)(& ei))->boost::iterator_facade<I, V, TC, R, D>::operator* [with Derived = boost::detail::undirected_edge_iter<std::_List_iterator<boost::list_edge<unsigned int, boost::property<boost::edge_bundle_t, edge_properties, boost::no_property> > >, boost::detail::edge_desc_impl<boost::undirected_tag, unsigned int>, int>, Value = boost::detail::edge_desc_impl<boost::undirected_tag, unsigned int>, CategoryOrTraversal = boost::bidirectional_traversal_tag, Reference = boost::detail::edge_desc_impl<boost::undirected_tag, unsigned int>, Difference = int]()))))’ ../../../boost/boost/archive/detail/interface_oarchive.hpp:78: note: candidates are: Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(T&) [with T = boost::property<boost::edge_bundle_t, edge_properties, boost::no_property>, Archive = boost::archive::text_oarchive]

Walter Landry <wlandry@ucsd.edu> wrote:
Greetings,
It seems that serializing a graph into a file is broken. If I strip down the Kevin bacon example and make it write to an archive rather than read, I get a rather lengthy error message with g++ 3.3, 3.4, 4.0, and 4.1 on Linux. I get a different error if I try to serialize a graph with no edge property. Is that known to be unsupported? I am attaching the sample file and the error from g++ 4.1. This is using the CVS version as of about a week ago.
As an aside, adjacency_list does not implement empty(). Shouldn't it?
Hello? Anyone there? Cheers, Walter Landry wlandry@ucsd.edu

On Sep 20, 2006, at 12:50 PM, Walter Landry wrote:
Walter Landry <wlandry@ucsd.edu> wrote:
Greetings,
It seems that serializing a graph into a file is broken. If I strip down the Kevin bacon example and make it write to an archive rather than read, I get a rather lengthy error message with g++ 3.3, 3.4, 4.0, and 4.1 on Linux. I get a different error if I try to serialize a graph with no edge property. Is that known to be unsupported? I am attaching the sample file and the error from g++ 4.1. This is using the CVS version as of about a week ago.
As an aside, adjacency_list does not implement empty(). Shouldn't it?
Hello? Anyone there?
Thanks for reporting this, and sorry about the delay. I've fixed the serialization code in the BGL in Boost CVS (both for 1.34.0 and on the trunk). Doug
participants (2)
-
Doug Gregor
-
Walter Landry