]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/graph/example/accum-compile-times.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / graph / example / accum-compile-times.cpp
1 //=======================================================================
2 // Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee,
3 //
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>
9 #include <fstream>
10 #include <iostream>
11 #include <numeric>
12 #include <iterator>
13 #include <string>
14 #include <boost/graph/adjacency_list.hpp>
15 #include <boost/graph/property_iter_range.hpp>
16
17 namespace std
18 {
19 template < typename T >
20 std::istream& operator >> (std::istream& in, std::pair < T, T > &p)
21 {
22 in >> p.first >> p.second;
23 return in;
24 }
25 }
26
27 namespace boost
28 {
29 enum vertex_compile_cost_t { vertex_compile_cost };
30 BOOST_INSTALL_PROPERTY(vertex, compile_cost);
31 }
32
33 using namespace boost;
34
35 typedef adjacency_list< listS, // Store out-edges of each vertex in a std::list
36 listS, // Store vertex set in a std::list
37 directedS, // The file dependency graph is directed
38 // vertex properties
39 property < vertex_name_t, std::string,
40 property < vertex_compile_cost_t, float,
41 property < vertex_distance_t, float,
42 property < vertex_color_t, default_color_type > > > >,
43 // an edge property
44 property < edge_weight_t, float > >
45 file_dep_graph2;
46
47 typedef graph_traits<file_dep_graph2>::vertex_descriptor vertex_t;
48 typedef graph_traits<file_dep_graph2>::edge_descriptor edge_t;
49
50 int
51 main()
52 {
53 std::ifstream file_in("makefile-dependencies.dat");
54 typedef graph_traits<file_dep_graph2>::vertices_size_type size_type;
55 size_type n_vertices;
56 file_in >> n_vertices; // read in number of vertices
57 #if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
58 // std::istream_iterator causes trouble with VC++
59 std::vector<vertex_t> id2vertex;
60 file_dep_graph2 g;
61 for (std::size_t i = 0; i < n_vertices; ++i)
62 id2vertex.push_back(add_vertex(g));
63 std::pair<size_type, size_type> p;
64 while (file_in >> p)
65 add_edge(id2vertex[p.first], id2vertex[p.second], g);
66 #else
67 std::istream_iterator<std::pair<size_type, size_type> >
68 input_begin(file_in), input_end;
69 file_dep_graph2 g(input_begin, input_end, n_vertices);
70 #endif
71
72 typedef property_map < file_dep_graph2, vertex_name_t >::type name_map_t;
73 typedef property_map < file_dep_graph2, vertex_compile_cost_t >::type
74 compile_cost_map_t;
75
76 name_map_t name_map = get(vertex_name, g);
77 compile_cost_map_t compile_cost_map = get(vertex_compile_cost, g);
78
79 std::ifstream name_in("makefile-target-names.dat");
80 std::ifstream compile_cost_in("target-compile-costs.dat");
81 graph_traits < file_dep_graph2 >::vertex_iterator vi, vi_end;
82 for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
83 name_in >> name_map[*vi];
84 compile_cost_in >> compile_cost_map[*vi];
85 }
86
87 graph_property_iter_range < file_dep_graph2,
88 vertex_compile_cost_t >::iterator ci, ci_end;
89 boost::tie(ci, ci_end) = get_property_iter_range(g, vertex_compile_cost);
90 std::cout << "total (sequential) compile time: "
91 << std::accumulate(ci, ci_end, 0.0) << std::endl;
92
93 return 0;
94 }
95