]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/graph/example/property_iterator.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / graph / example / property_iterator.cpp
CommitLineData
7c673cae
FG
1
2// (C) Copyright Francois Faure, iMAGIS-GRAVIR / UJF, 2001.
3
4// Distributed under the Boost Software License, Version 1.0.
5// (See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7
8// Revision History:
9// 03 May 2001 Jeremy Siek
10// Moved property iterator code to headers.
11// 02 May 2001 Francois Faure
12// Initial version.
13
14#include <boost/graph/adjacency_list_io.hpp>
15#include <boost/graph/property_iter_range.hpp>
16#include <fstream>
17#include <algorithm>
18
19
20using namespace boost;
21
22//======== vertex properties
23struct toto_t {
24 enum { num = 23063};
25 typedef vertex_property_tag kind;
26};
27typedef property< toto_t, double > Toto;
28
29struct radius_t {
30 enum { num = 23062};
31 typedef vertex_property_tag kind;
32};
33typedef property< radius_t, double, Toto > Radius;
34
35struct mass_t {
36 enum { num = 23061};
37 typedef vertex_property_tag kind;
38};
39typedef property< mass_t, int, Radius > Mass;
40
41
42//====== edge properties
43struct stiff_t {
44 enum { num = 23064};
45 typedef edge_property_tag kind;
46};
47typedef property<stiff_t, double> Stiff;
48
49
50
51//===== graph type
52typedef Mass VertexProperty;
53typedef Stiff EdgeProperty;
54typedef adjacency_list<vecS, setS, bidirectionalS,
55 VertexProperty, EdgeProperty> Graph;
56
57
58//===== utilities
59struct Print
60{
61 template<class T>
62 Print& operator() (const T& t) {
63 std::cout << t << " ";
64 return (*this);
65 }
66};
67
68template<class T>
69struct Set
70{
71 T value;
72
73 Set( const T& t ):value(t){}
74
75 Set& operator() (T& t) {
76 t=value;
77 return (*this);
78 }
79};
80
81
82//===== program
83int main(int argc, char* argv[])
84{
85 if (argc < 2) {
86 std::cerr<<"args: file"<<std::endl;
87 return EXIT_FAILURE;
88 }
89
90 std::ifstream readFile(argv[1]);
91
92 Graph graph;
93 readFile >> read( graph );
94 std::cout << write( graph );
95
96 std::cout << "radii:" << std::endl;
97 graph_property_iter_range<Graph,radius_t>::type
98 seqRadius = get_property_iter_range(graph,radius_t());
99 std::for_each( seqRadius.first, seqRadius.second, Print() );
100 std::cout << std::endl;
101
102 std::cout << "stiff:" << std::endl;
103 graph_property_iter_range<Graph,stiff_t>::type
104 seqStiff = get_property_iter_range(graph, stiff_t());
105 std::for_each( seqStiff.first, seqStiff.second, Print() );
106 std::cout << std::endl;
107
108 seqStiff = get_property_iter_range(graph, stiff_t());
109 std::for_each( seqStiff.first, seqStiff.second, Set<double>(2.4) );
110
111 std::cout << "new stiff:" << std::endl;
112 seqStiff = get_property_iter_range(graph,stiff_t());
113 std::for_each( seqStiff.first, seqStiff.second, Print() );
114 std::cout << std::endl;
115
116 return 0;
117}