1 //=======================================================================
2 // Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee,
4 // Distributed under the Boost Software License, Version 1.0. (See
5 // accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7 //=======================================================================
8 #include <boost/config.hpp>
12 #include <boost/graph/adjacency_list.hpp>
14 using namespace boost
;
16 template < typename Graph
, typename VertexNamePropertyMap
> void
17 read_graph_file(std::istream
& graph_in
, std::istream
& name_in
,
18 Graph
& g
, VertexNamePropertyMap name_map
)
20 typedef typename graph_traits
< Graph
>::vertices_size_type size_type
;
22 typename graph_traits
< Graph
>::vertex_descriptor u
;
23 typename property_traits
< VertexNamePropertyMap
>::value_type name
;
25 graph_in
>> n_vertices
; // read in number of vertices
26 for (size_type i
= 0; i
< n_vertices
; ++i
) { // Add n vertices to the graph
29 put(name_map
, u
, name
); // ** Attach name property to vertex u **
32 while (graph_in
>> src
) // Read in edges
34 add_edge(src
, targ
, g
); // add an edge to the graph
39 template < typename Graph
, typename VertexNameMap
> void
40 print_dependencies(std::ostream
& out
, const Graph
& g
,
41 VertexNameMap name_map
)
43 typename graph_traits
< Graph
>::edge_iterator ei
, ei_end
;
44 for (boost::tie(ei
, ei_end
) = edges(g
); ei
!= ei_end
; ++ei
)
45 out
<< get(name_map
, source(*ei
, g
)) << " -$>$ "
46 << get(name_map
, target(*ei
, g
)) << std::endl
;
53 typedef adjacency_list
< listS
, // Store out-edges of each vertex in a std::list
54 vecS
, // Store vertex set in a std::vector
55 directedS
, // The graph is directed
56 property
< vertex_name_t
, std::string
> // Add a vertex property
59 graph_type g
; // use default constructor to create empty graph
60 const char* dep_file_name
= "makefile-dependencies.dat";
61 const char* target_file_name
= "makefile-target-names.dat";
62 std::ifstream
file_in(dep_file_name
), name_in(target_file_name
);
64 std::cerr
<< "** Error: could not open file " << dep_file_name
69 std::cerr
<< "** Error: could not open file " << target_file_name
74 // Obtain internal property map from the graph
75 property_map
< graph_type
, vertex_name_t
>::type name_map
=
77 read_graph_file(file_in
, name_in
, g
, name_map
);
79 print_dependencies(std::cout
, g
, get(vertex_name
, g
));
81 assert(num_vertices(g
) == 15);
82 assert(num_edges(g
) == 19);