// (C) Copyright Francois Faure, iMAGIS-GRAVIR / UJF, 2001. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Revision History: // 03 May 2001 Jeremy Siek // Moved property iterator code to headers. // 02 May 2001 Francois Faure // Initial version. #include #include #include #include using namespace boost; //======== vertex properties struct toto_t { enum { num = 23063}; typedef vertex_property_tag kind; }; typedef property< toto_t, double > Toto; struct radius_t { enum { num = 23062}; typedef vertex_property_tag kind; }; typedef property< radius_t, double, Toto > Radius; struct mass_t { enum { num = 23061}; typedef vertex_property_tag kind; }; typedef property< mass_t, int, Radius > Mass; //====== edge properties struct stiff_t { enum { num = 23064}; typedef edge_property_tag kind; }; typedef property Stiff; //===== graph type typedef Mass VertexProperty; typedef Stiff EdgeProperty; typedef adjacency_list Graph; //===== utilities struct Print { template Print& operator() (const T& t) { std::cout << t << " "; return (*this); } }; template struct Set { T value; Set( const T& t ):value(t){} Set& operator() (T& t) { t=value; return (*this); } }; //===== program int main(int argc, char* argv[]) { if (argc < 2) { std::cerr<<"args: file"<> read( graph ); std::cout << write( graph ); std::cout << "radii:" << std::endl; graph_property_iter_range::type seqRadius = get_property_iter_range(graph,radius_t()); std::for_each( seqRadius.first, seqRadius.second, Print() ); std::cout << std::endl; std::cout << "stiff:" << std::endl; graph_property_iter_range::type seqStiff = get_property_iter_range(graph, stiff_t()); std::for_each( seqStiff.first, seqStiff.second, Print() ); std::cout << std::endl; seqStiff = get_property_iter_range(graph, stiff_t()); std::for_each( seqStiff.first, seqStiff.second, Set(2.4) ); std::cout << "new stiff:" << std::endl; seqStiff = get_property_iter_range(graph,stiff_t()); std::for_each( seqStiff.first, seqStiff.second, Print() ); std::cout << std::endl; return 0; }