12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // (C) Copyright Francois Faure 2001
- // 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)
- #include <boost/config.hpp>
- #if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
- #error adjacency_list_io.hpp has not been ported to work with VC++
- #endif
- #include <boost/graph/adjacency_list_io.hpp>
- #include <fstream>
- using namespace boost;
- //======== my data structure
- struct MyStruct { double value; };
- std::ostream& operator << ( std::ostream& out, const MyStruct& s )
- {
- out << s.value << " ";
- return out;
- }
- std::istream& operator >> ( std::istream& in, MyStruct& s )
- {
- in >> s.value;
- return in;
- }
- //======== vertex properties
- struct n1_t { enum { num = 23063}; typedef vertex_property_tag kind; };
- struct n2_t { enum { num = 23062}; typedef vertex_property_tag kind; };
- struct n3_t { enum { num = 23061}; typedef vertex_property_tag kind; };
- typedef property< n1_t, int,
- property< n2_t, double,
- property< n3_t, MyStruct > > > VertexProperty;
- //====== edge properties
- struct e1_t { enum { num = 23064}; typedef edge_property_tag kind; };
- typedef property<e1_t, double> EdgeProperty;
- //===== graph types
- typedef
- adjacency_list<vecS, listS, directedS, no_property, no_property>
- Graph1;
- typedef
- adjacency_list<setS, setS, bidirectionalS, VertexProperty, EdgeProperty>
- Graph2;
- int
- main()
- {
- // read Graph1
- Graph1 g1;
- std::ifstream readFile1("data1.txt");
- readFile1 >> read( g1 );
- std::cout << "graph g1 from file data1.txt:\n"
- << write( g1 )
- << std::endl;
- // read Graph2 and all internal properties
- Graph2 g2;
- std::ifstream readFile2("data2.txt");
- readFile2 >> read( g2 );
- std::cout << "graph g2 from file data2.txt:\n"
- << write( g2 )
- << std::endl;
-
- // read Graph2, no property given. Write no property.
- Graph2 g21;
- std::ifstream readFile21("data1.txt");
- readFile21 >> read( g21, no_property(), no_property() );
- std::cout << "graph g21 from file data1.txt:\n"
- << write(g21, no_property(), no_property())
- << std::endl;
-
- // read Graph2, incomplete data in a different order. Write it diffently.
- Graph2 g31;
- std::ifstream readFile31("data3.txt");
- typedef property< n3_t, MyStruct, property< n1_t, int > > readNodeProp;
- readFile31 >> read( g31, readNodeProp() , EdgeProperty() );
- std::cout << "graph g31 from file data3.txt:\n"
- << write( g31, property<n3_t, MyStruct>(), EdgeProperty() )
- << std::endl;
-
- return 0;
- }
|