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: }