Source of quick_tour1.cpp


  1: /** @file quick_tour1.cpp */

  3: //=======================================================================
  4: // Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee, 
  5: //
  6: // Distributed under the Boost Software License, Version 1.0. (See
  7: // accompanying file LICENSE_1_0.txt or copy at
  8: // http://www.boost.org/LICENSE_1_0.txt)
  9: //=======================================================================


 12: #include <boost/config.hpp>
 13: #include <iostream>
 14: #include <boost/graph/adjacency_list.hpp>
 15: using namespace boost;



 19: template <typename VertexDescriptor, typename VertexNameMap>
 20: void print_vertex_name
 21: (
 22:     VertexDescriptor v,
 23:     VertexNameMap name_map
 24: )
 25: {
 26:     std::cout << get(name_map, v);
 27: }



 31: template <typename Graph, typename TransDelayMap, typename VertexNameMap>
 32: void print_trans_delay
 33: (
 34:     typename graph_traits <Graph>::edge_descriptor e,
 35:     const Graph& g,
 36:     TransDelayMap delay_map,
 37:     VertexNameMap name_map
 38: )
 39: {
 40:     std::cout << "trans-delay(" << get(name_map, source(e, g)) << ","
 41:         << get(name_map, target(e, g)) << ") = " << get(delay_map, e);
 42: }



 46: template < typename Graph, typename VertexNameMap >
 47: void print_vertex_names
 48: (
 49:     const Graph& g,
 50:     VertexNameMap name_map
 51: )
 52: {
 53:     std::cout << "vertices(g) = { ";
 54:     typedef typename graph_traits < Graph >::vertex_iterator iter_t;
 55:     for (std::pair < iter_t, iter_t > p = vertices(g);
 56:          p.first != p.second;
 57:          ++p.first)
 58:     {
 59:         print_vertex_name(*p.first, name_map);
 60:         std::cout << ' ';
 61:     }
 62:     std::cout << "}" << std::endl;
 63: }



 67: template <typename Graph, typename TransDelayMap, typename VertexNameMap>
 68: void print_trans_delays
 69: (
 70:     const Graph& g,
 71:     TransDelayMap trans_delay_map,
 72:     VertexNameMap name_map
 73: )
 74: {
 75:     typename graph_traits < Graph >::edge_iterator first, last;
 76:     for (tie(first, last) = edges(g); first != last; ++first)
 77:     {
 78:         print_trans_delay(*first, g, trans_delay_map, name_map);
 79:         std::cout << std::endl;
 80:     }
 81: }



 85: template < typename Graph, typename VertexNameMap, typename TransDelayMap >
 86: void build_router_network
 87: (
 88:     Graph& g,
 89:     VertexNameMap name_map,
 90:     TransDelayMap delay_map
 91: )
 92: {
 93:     typename graph_traits <Graph>::vertex_descriptor a, b, c, d, e;
 94:     a = add_vertex(g);
 95:     name_map[a] = 'a';
 96:     b = add_vertex(g);
 97:     name_map[b] = 'b';
 98:     c = add_vertex(g);
 99:     name_map[c] = 'c';
100:     d = add_vertex(g);
101:     name_map[d] = 'd';
102:     e = add_vertex(g);
103:     name_map[e] = 'e';

105:     typename graph_traits <Graph>::edge_descriptor ed;
106:     bool inserted;

108:     tie(ed, inserted) = add_edge(a, b, g);
109:     delay_map[ed] = 1.2;
110:     tie(ed, inserted) = add_edge(a, d, g);
111:     delay_map[ed] = 4.5;
112:     tie(ed, inserted) = add_edge(b, d, g);
113:     delay_map[ed] = 1.8;
114:     tie(ed, inserted) = add_edge(c, a, g);
115:     delay_map[ed] = 2.6;
116:     tie(ed, inserted) = add_edge(c, e, g);
117:     delay_map[ed] = 5.2;
118:     tie(ed, inserted) = add_edge(d, c, g);
119:     delay_map[ed] = 0.4;
120:     tie(ed, inserted) = add_edge(d, e, g);
121:     delay_map[ed] = 3.3;

123: }









133: int main()
134: {
135:     typedef adjacency_list <listS, listS, directedS,
136:         property <vertex_name_t, char>,
137:         property <edge_weight_t, double>> graph_t;
138:     graph_t g;

140:     property_map <graph_t, vertex_name_t>::type name_map =
141:         get(vertex_name, g);
142:     property_map <graph_t, edge_weight_t>::type delay_map =
143:         get(edge_weight, g);

145:     build_router_network(g, name_map, delay_map);
146:     print_vertex_names(g, name_map);
147:     print_trans_delays(g, delay_map, name_map);
148: }