|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r53753 - in branches/release: boost boost/graph boost/graph/detail boost/graph/distributed boost/graph/parallel boost/graph/planar_detail boost/graph/property_maps boost/pending boost/property_map libs/graph libs/graph/build libs/graph/doc libs/graph/example libs/graph/src libs/graph/test libs/graph_parallel libs/property_map libs/property_map/doc libs/property_map/example libs/property_map/test
From: jewillco_at_[hidden]
Date: 2009-06-08 11:46:19
Author: jewillco
Date: 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
New Revision: 53753
URL: http://svn.boost.org/trac/boost/changeset/53753
Log:
Merged over Parallel BGL from trunk, merged over many BGL and property map changes from trunk
Added:
branches/release/boost/graph/accounting.hpp
- copied unchanged from r53746, /trunk/boost/graph/accounting.hpp
branches/release/boost/graph/bron_kerbosch_all_cliques.hpp
- copied unchanged from r53746, /trunk/boost/graph/bron_kerbosch_all_cliques.hpp
branches/release/boost/graph/closeness_centrality.hpp
- copied unchanged from r53746, /trunk/boost/graph/closeness_centrality.hpp
branches/release/boost/graph/clustering_coefficient.hpp
- copied unchanged from r53746, /trunk/boost/graph/clustering_coefficient.hpp
branches/release/boost/graph/core_numbers.hpp
- copied unchanged from r53746, /trunk/boost/graph/core_numbers.hpp
branches/release/boost/graph/degree_centrality.hpp
- copied unchanged from r53746, /trunk/boost/graph/degree_centrality.hpp
branches/release/boost/graph/detail/d_ary_heap.hpp
- copied unchanged from r53746, /trunk/boost/graph/detail/d_ary_heap.hpp
branches/release/boost/graph/detail/geodesic.hpp
- copied unchanged from r53746, /trunk/boost/graph/detail/geodesic.hpp
branches/release/boost/graph/detail/index.hpp
- copied unchanged from r53746, /trunk/boost/graph/detail/index.hpp
branches/release/boost/graph/detail/labeled_graph_traits.hpp
- copied unchanged from r53746, /trunk/boost/graph/detail/labeled_graph_traits.hpp
branches/release/boost/graph/detail/read_graphviz_new.hpp
- copied unchanged from r53746, /trunk/boost/graph/detail/read_graphviz_new.hpp
branches/release/boost/graph/dijkstra_shortest_paths_no_color_map.hpp
- copied unchanged from r53746, /trunk/boost/graph/dijkstra_shortest_paths_no_color_map.hpp
branches/release/boost/graph/dimacs.hpp
- copied unchanged from r53746, /trunk/boost/graph/dimacs.hpp
branches/release/boost/graph/directed_graph.hpp
- copied unchanged from r53746, /trunk/boost/graph/directed_graph.hpp
branches/release/boost/graph/distributed/
- copied from r53746, /trunk/boost/graph/distributed/
branches/release/boost/graph/eccentricity.hpp
- copied unchanged from r53746, /trunk/boost/graph/eccentricity.hpp
branches/release/boost/graph/exterior_property.hpp
- copied unchanged from r53746, /trunk/boost/graph/exterior_property.hpp
branches/release/boost/graph/geodesic_distance.hpp
- copied unchanged from r53746, /trunk/boost/graph/geodesic_distance.hpp
branches/release/boost/graph/graph_mutability_traits.hpp
- copied unchanged from r53746, /trunk/boost/graph/graph_mutability_traits.hpp
branches/release/boost/graph/graph_stats.hpp
- copied unchanged from r53746, /trunk/boost/graph/graph_stats.hpp
branches/release/boost/graph/labeled_graph.hpp
- copied unchanged from r53746, /trunk/boost/graph/labeled_graph.hpp
branches/release/boost/graph/mesh_graph_generator.hpp
- copied unchanged from r53746, /trunk/boost/graph/mesh_graph_generator.hpp
branches/release/boost/graph/metis.hpp
- copied unchanged from r53746, /trunk/boost/graph/metis.hpp
branches/release/boost/graph/numeric_values.hpp
- copied unchanged from r53746, /trunk/boost/graph/numeric_values.hpp
branches/release/boost/graph/overloading.hpp
- copied unchanged from r53746, /trunk/boost/graph/overloading.hpp
branches/release/boost/graph/parallel/
- copied from r53746, /trunk/boost/graph/parallel/
branches/release/boost/graph/point_traits.hpp
- copied unchanged from r53746, /trunk/boost/graph/point_traits.hpp
branches/release/boost/graph/property_maps/
- copied from r53746, /trunk/boost/graph/property_maps/
branches/release/boost/graph/rmat_graph_generator.hpp
- copied unchanged from r53746, /trunk/boost/graph/rmat_graph_generator.hpp
branches/release/boost/graph/ssca_graph_generator.hpp
- copied unchanged from r53746, /trunk/boost/graph/ssca_graph_generator.hpp
branches/release/boost/graph/st_connected.hpp
- copied unchanged from r53746, /trunk/boost/graph/st_connected.hpp
branches/release/boost/graph/tiernan_all_cycles.hpp
- copied unchanged from r53746, /trunk/boost/graph/tiernan_all_cycles.hpp
branches/release/boost/graph/topology.hpp
- copied unchanged from r53746, /trunk/boost/graph/topology.hpp
branches/release/boost/graph/transitive_reduction.hpp
- copied unchanged from r53746, /trunk/boost/graph/transitive_reduction.hpp
branches/release/boost/graph/undirected_graph.hpp
- copied unchanged from r53746, /trunk/boost/graph/undirected_graph.hpp
branches/release/boost/graph/use_mpi.hpp
- copied unchanged from r53746, /trunk/boost/graph/use_mpi.hpp
branches/release/boost/graph/vertex_and_edge_range.hpp
- copied unchanged from r53746, /trunk/boost/graph/vertex_and_edge_range.hpp
branches/release/boost/property_map/
- copied from r53746, /trunk/boost/property_map/
branches/release/libs/graph/doc/dijkstra_shortest_paths_no_color_map.html
- copied, changed from r53746, /trunk/libs/graph/doc/dijkstra_shortest_paths_no_color_map.html
branches/release/libs/graph/example/Jamfile.v2
- copied unchanged from r53746, /trunk/libs/graph/example/Jamfile.v2
branches/release/libs/graph/example/bron_kerbosch_clique_number.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/bron_kerbosch_clique_number.cpp
branches/release/libs/graph/example/bron_kerbosch_print_cliques.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/bron_kerbosch_print_cliques.cpp
branches/release/libs/graph/example/closeness_centrality.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/closeness_centrality.cpp
branches/release/libs/graph/example/clustering_coefficient.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/clustering_coefficient.cpp
branches/release/libs/graph/example/comm_network.graph
- copied unchanged from r53746, /trunk/libs/graph/example/comm_network.graph
branches/release/libs/graph/example/degree_centrality.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/degree_centrality.cpp
branches/release/libs/graph/example/dijkstra-no-color-map-example.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/dijkstra-no-color-map-example.cpp
branches/release/libs/graph/example/eccentricity.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/eccentricity.cpp
branches/release/libs/graph/example/helper.hpp
- copied unchanged from r53746, /trunk/libs/graph/example/helper.hpp
branches/release/libs/graph/example/inclusive_mean_geodesic.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/inclusive_mean_geodesic.cpp
branches/release/libs/graph/example/influence_prestige.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/influence_prestige.cpp
branches/release/libs/graph/example/info_network.graph
- copied unchanged from r53746, /trunk/libs/graph/example/info_network.graph
branches/release/libs/graph/example/labeled_graph.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/labeled_graph.cpp
branches/release/libs/graph/example/mean_geodesic.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/mean_geodesic.cpp
branches/release/libs/graph/example/prism_3_2.graph
- copied unchanged from r53746, /trunk/libs/graph/example/prism_3_2.graph
branches/release/libs/graph/example/prob_network.graph
- copied unchanged from r53746, /trunk/libs/graph/example/prob_network.graph
branches/release/libs/graph/example/scaled_closeness_centrality.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/scaled_closeness_centrality.cpp
branches/release/libs/graph/example/social_network.graph
- copied unchanged from r53746, /trunk/libs/graph/example/social_network.graph
branches/release/libs/graph/example/tiernan_girth_circumference.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/tiernan_girth_circumference.cpp
branches/release/libs/graph/example/tiernan_print_cycles.cpp
- copied unchanged from r53746, /trunk/libs/graph/example/tiernan_print_cycles.cpp
branches/release/libs/graph/src/read_graphviz_new.cpp
- copied unchanged from r53746, /trunk/libs/graph/src/read_graphviz_new.cpp
branches/release/libs/graph/test/bron_kerbosch_all_cliques.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/bron_kerbosch_all_cliques.cpp
branches/release/libs/graph/test/closeness_centrality.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/closeness_centrality.cpp
branches/release/libs/graph/test/clustering_coefficient.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/clustering_coefficient.cpp
branches/release/libs/graph/test/core_numbers_test.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/core_numbers_test.cpp
branches/release/libs/graph/test/degree_centrality.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/degree_centrality.cpp
branches/release/libs/graph/test/dijkstra_no_color_map_compare.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/dijkstra_no_color_map_compare.cpp
branches/release/libs/graph/test/eccentricity.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/eccentricity.cpp
branches/release/libs/graph/test/generator_test.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/generator_test.cpp
branches/release/libs/graph/test/index_graph.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/index_graph.cpp
branches/release/libs/graph/test/labeled_graph.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/labeled_graph.cpp
branches/release/libs/graph/test/mean_geodesic.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/mean_geodesic.cpp
branches/release/libs/graph/test/metis_test.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/metis_test.cpp
branches/release/libs/graph/test/metric_tsp_approx.graph
- copied unchanged from r53746, /trunk/libs/graph/test/metric_tsp_approx.graph
branches/release/libs/graph/test/read_propmap.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/read_propmap.cpp
branches/release/libs/graph/test/subgraph_bundled.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/subgraph_bundled.cpp
branches/release/libs/graph/test/subgraph_props.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/subgraph_props.cpp
branches/release/libs/graph/test/test_construction.hpp
- copied unchanged from r53746, /trunk/libs/graph/test/test_construction.hpp
branches/release/libs/graph/test/test_destruction.hpp
- copied unchanged from r53746, /trunk/libs/graph/test/test_destruction.hpp
branches/release/libs/graph/test/test_direction.hpp
- copied unchanged from r53746, /trunk/libs/graph/test/test_direction.hpp
branches/release/libs/graph/test/test_graph.hpp
- copied unchanged from r53746, /trunk/libs/graph/test/test_graph.hpp
branches/release/libs/graph/test/test_graphs.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/test_graphs.cpp
branches/release/libs/graph/test/test_iteration.hpp
- copied unchanged from r53746, /trunk/libs/graph/test/test_iteration.hpp
branches/release/libs/graph/test/test_properties.hpp
- copied unchanged from r53746, /trunk/libs/graph/test/test_properties.hpp
branches/release/libs/graph/test/tiernan_all_cycles.cpp
- copied unchanged from r53746, /trunk/libs/graph/test/tiernan_all_cycles.cpp
branches/release/libs/graph/test/typestr.hpp
- copied unchanged from r53746, /trunk/libs/graph/test/typestr.hpp
branches/release/libs/graph/test/weighted_graph.gr
- copied unchanged from r53746, /trunk/libs/graph/test/weighted_graph.gr
branches/release/libs/graph_parallel/
- copied from r53746, /trunk/libs/graph_parallel/
branches/release/libs/property_map/doc/LvaluePropertyMap.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/LvaluePropertyMap.html
branches/release/libs/property_map/doc/ReadWritePropertyMap.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/ReadWritePropertyMap.html
branches/release/libs/property_map/doc/ReadablePropertyMap.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/ReadablePropertyMap.html
branches/release/libs/property_map/doc/WritablePropertyMap.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/WritablePropertyMap.html
branches/release/libs/property_map/doc/associative_property_map.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/associative_property_map.html
branches/release/libs/property_map/doc/const_assoc_property_map.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/const_assoc_property_map.html
branches/release/libs/property_map/doc/identity_property_map.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/identity_property_map.html
branches/release/libs/property_map/doc/iterator_property_map.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/iterator_property_map.html
branches/release/libs/property_map/doc/property_map.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/property_map.html
branches/release/libs/property_map/doc/ref_property_map.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/ref_property_map.html
branches/release/libs/property_map/doc/shared_array_property_map.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/shared_array_property_map.html
branches/release/libs/property_map/doc/vector_property_map.html
- copied unchanged from r53746, /trunk/libs/property_map/doc/vector_property_map.html
branches/release/libs/property_map/example/
- copied from r53746, /trunk/libs/property_map/example/
Removed:
branches/release/libs/graph/test/metric_tsp_approx.txt
branches/release/libs/property_map/LvaluePropertyMap.html
branches/release/libs/property_map/ReadWritePropertyMap.html
branches/release/libs/property_map/ReadablePropertyMap.html
branches/release/libs/property_map/WritablePropertyMap.html
branches/release/libs/property_map/associative_property_map.html
branches/release/libs/property_map/const_assoc_property_map.html
branches/release/libs/property_map/example1.cpp
branches/release/libs/property_map/example2.cpp
branches/release/libs/property_map/example3.cpp
branches/release/libs/property_map/identity_property_map.html
branches/release/libs/property_map/iterator_property_map.html
branches/release/libs/property_map/property_map.html
branches/release/libs/property_map/ref_property_map.html
branches/release/libs/property_map/vector_property_map.html
Text files modified:
branches/release/boost/dynamic_property_map.hpp | 381 ----------
branches/release/boost/graph/adjacency_list.hpp | 127 ++-
branches/release/boost/graph/adjacency_list_io.hpp | 2
branches/release/boost/graph/adjacency_matrix.hpp | 88 ++
branches/release/boost/graph/astar_search.hpp | 131 +-
branches/release/boost/graph/bc_clustering.hpp | 2
branches/release/boost/graph/betweenness_centrality.hpp | 42
branches/release/boost/graph/biconnected_components.hpp | 2
branches/release/boost/graph/breadth_first_search.hpp | 97 ++
branches/release/boost/graph/chrobak_payne_drawing.hpp | 2
branches/release/boost/graph/circle_layout.hpp | 19
branches/release/boost/graph/compressed_sparse_row_graph.hpp | 479 ++++++++++++
branches/release/boost/graph/connected_components.hpp | 13
branches/release/boost/graph/copy.hpp | 2
branches/release/boost/graph/create_condensation_graph.hpp | 2
branches/release/boost/graph/depth_first_search.hpp | 63 -
branches/release/boost/graph/detail/adjacency_list.hpp | 10
branches/release/boost/graph/detail/indexed_properties.hpp | 12
branches/release/boost/graph/detail/is_same.hpp | 8
branches/release/boost/graph/detail/read_graphviz_spirit.hpp | 2
branches/release/boost/graph/detail/self_avoiding_walk.hpp | 2
branches/release/boost/graph/detail/sparse_ordering.hpp | 2
branches/release/boost/graph/dijkstra_shortest_paths.hpp | 228 +++++-
branches/release/boost/graph/edmonds_karp_max_flow.hpp | 2
branches/release/boost/graph/erdos_renyi_generator.hpp | 46
branches/release/boost/graph/floyd_warshall_shortest.hpp | 2
branches/release/boost/graph/fruchterman_reingold.hpp | 304 ++++---
branches/release/boost/graph/graph_archetypes.hpp | 2
branches/release/boost/graph/graph_as_tree.hpp | 2
branches/release/boost/graph/graph_concepts.hpp | 1044 +++++++++++++++------------
branches/release/boost/graph/graph_traits.hpp | 379 +++++++---
branches/release/boost/graph/graph_utility.hpp | 27
branches/release/boost/graph/graphml.hpp | 66 +
branches/release/boost/graph/graphviz.hpp | 90 +
branches/release/boost/graph/gursoy_atun_layout.hpp | 276 -------
branches/release/boost/graph/howard_cycle_ratio.hpp | 1
branches/release/boost/graph/is_kuratowski_subgraph.hpp | 2
branches/release/boost/graph/is_straight_line_drawing.hpp | 2
branches/release/boost/graph/johnson_all_pairs_shortest.hpp | 13
branches/release/boost/graph/kamada_kawai_spring_layout.hpp | 191 +++-
branches/release/boost/graph/kolmogorov_max_flow.hpp | 2
branches/release/boost/graph/kruskal_min_spanning_tree.hpp | 2
branches/release/boost/graph/make_biconnected_planar.hpp | 2
branches/release/boost/graph/make_connected.hpp | 2
branches/release/boost/graph/make_maximal_planar.hpp | 2
branches/release/boost/graph/max_cardinality_matching.hpp | 2
branches/release/boost/graph/minimum_degree_ordering.hpp | 2
branches/release/boost/graph/named_function_params.hpp | 891 ++++++++----------------
branches/release/boost/graph/named_graph.hpp | 82 +-
branches/release/boost/graph/neighbor_bfs.hpp | 7
branches/release/boost/graph/page_rank.hpp | 14
branches/release/boost/graph/planar_canonical_ordering.hpp | 2
branches/release/boost/graph/planar_detail/add_edge_visitors.hpp | 2
branches/release/boost/graph/planar_detail/boyer_myrvold_impl.hpp | 2
branches/release/boost/graph/planar_detail/bucket_sort.hpp | 2
branches/release/boost/graph/plod_generator.hpp | 180 +++-
branches/release/boost/graph/properties.hpp | 116 ++
branches/release/boost/graph/property_iter_range.hpp | 6
branches/release/boost/graph/random.hpp | 7
branches/release/boost/graph/random_layout.hpp | 29
branches/release/boost/graph/read_dimacs.hpp | 20
branches/release/boost/graph/relax.hpp | 2
branches/release/boost/graph/sequential_vertex_coloring.hpp | 2
branches/release/boost/graph/sloan_ordering.hpp | 2
branches/release/boost/graph/stanford_graph.hpp | 2
branches/release/boost/graph/strong_components.hpp | 11
branches/release/boost/graph/subgraph.hpp | 1451 ++++++++++++++++++++++++---------------
branches/release/boost/graph/topological_sort.hpp | 2
branches/release/boost/graph/transitive_closure.hpp | 14
branches/release/boost/graph/two_bit_color_map.hpp | 13
branches/release/boost/graph/vector_as_graph.hpp | 2
branches/release/boost/graph/visitors.hpp | 25
branches/release/boost/pending/fibonacci_heap.hpp | 2
branches/release/boost/pending/indirect_cmp.hpp | 2
branches/release/boost/pending/mutable_queue.hpp | 2
branches/release/boost/pending/property.hpp | 107 +
branches/release/boost/pending/property_serialize.hpp | 42 +
branches/release/boost/pending/relaxed_heap.hpp | 2
branches/release/boost/property_map.hpp | 579 ---------------
branches/release/boost/property_map_iterator.hpp | 128 ---
branches/release/boost/vector_property_map.hpp | 105 --
branches/release/libs/graph/CMakeLists.txt | 14
branches/release/libs/graph/build/Jamfile.v2 | 7
branches/release/libs/graph/doc/AStarHeuristic.html | 12
branches/release/libs/graph/doc/AStarVisitor.html | 14
branches/release/libs/graph/doc/AddEdgeVisitor.html | 14
branches/release/libs/graph/doc/AdjacencyGraph.html | 12
branches/release/libs/graph/doc/AdjacencyMatrix.html | 12
branches/release/libs/graph/doc/BFSVisitor.html | 12
branches/release/libs/graph/doc/BasicMatrix.html | 12
branches/release/libs/graph/doc/BellmanFordVisitor.html | 12
branches/release/libs/graph/doc/BidirectionalGraph.html | 12
branches/release/libs/graph/doc/Buffer.html | 12
branches/release/libs/graph/doc/ColorValue.html | 12
branches/release/libs/graph/doc/DFSVisitor.html | 12
branches/release/libs/graph/doc/DijkstraVisitor.html | 16
branches/release/libs/graph/doc/EdgeListGraph.html | 12
branches/release/libs/graph/doc/EdgeMutableGraph.html | 12
branches/release/libs/graph/doc/EventVisitor.html | 12
branches/release/libs/graph/doc/EventVisitorList.html | 12
branches/release/libs/graph/doc/Graph.html | 12
branches/release/libs/graph/doc/IncidenceGraph.html | 12
branches/release/libs/graph/doc/IteratorConstructibleGraph.html | 12
branches/release/libs/graph/doc/Monoid.html | 12
branches/release/libs/graph/doc/MutableGraph.html | 12
branches/release/libs/graph/doc/MutablePropertyGraph.html | 12
branches/release/libs/graph/doc/PlanarEmbedding.html | 16
branches/release/libs/graph/doc/PlanarFaceVisitor.html | 12
branches/release/libs/graph/doc/PropertyGraph.html | 16
branches/release/libs/graph/doc/PropertyTag.html | 14
branches/release/libs/graph/doc/TSPTourVisitor.html | 2
branches/release/libs/graph/doc/VertexAndEdgeListGraph.html | 12
branches/release/libs/graph/doc/VertexListGraph.html | 12
branches/release/libs/graph/doc/VertexMutableGraph.html | 12
branches/release/libs/graph/doc/acknowledgements.html | 12
branches/release/libs/graph/doc/adjacency_iterator.html | 10
branches/release/libs/graph/doc/adjacency_list.html | 20
branches/release/libs/graph/doc/adjacency_list_traits.html | 12
branches/release/libs/graph/doc/adjacency_matrix.html | 12
branches/release/libs/graph/doc/astar_heuristic.html | 12
branches/release/libs/graph/doc/astar_search.html | 48
branches/release/libs/graph/doc/astar_visitor.html | 12
branches/release/libs/graph/doc/bandwidth.html | 12
branches/release/libs/graph/doc/bc_clustering.html | 14
branches/release/libs/graph/doc/bellman_ford_shortest.html | 16
branches/release/libs/graph/doc/bellman_visitor.html | 12
branches/release/libs/graph/doc/betweenness_centrality.html | 36
branches/release/libs/graph/doc/bfs_visitor.html | 12
branches/release/libs/graph/doc/bgl_named_params.html | 12
branches/release/libs/graph/doc/bibliography.html | 12
branches/release/libs/graph/doc/biconnected_components.html | 36
branches/release/libs/graph/doc/biconnected_components.w | 2
branches/release/libs/graph/doc/boyer_myrvold.html | 16
branches/release/libs/graph/doc/breadth_first_search.html | 18
branches/release/libs/graph/doc/breadth_first_visit.html | 14
branches/release/libs/graph/doc/bundles.html | 12
branches/release/libs/graph/doc/challenge.html | 12
branches/release/libs/graph/doc/circle_layout.html | 14
branches/release/libs/graph/doc/compressed_sparse_row.html | 221 +++++
branches/release/libs/graph/doc/connected_components.html | 20
branches/release/libs/graph/doc/constructing_algorithms.html | 16
branches/release/libs/graph/doc/copy_graph.html | 16
branches/release/libs/graph/doc/cuthill_mckee_ordering.html | 11
branches/release/libs/graph/doc/dag_shortest_paths.html | 26
branches/release/libs/graph/doc/depth_first_search.html | 18
branches/release/libs/graph/doc/depth_first_visit.html | 14
branches/release/libs/graph/doc/dfs_visitor.html | 12
branches/release/libs/graph/doc/dijkstra_shortest_paths.html | 53
branches/release/libs/graph/doc/dijkstra_shortest_paths_no_color_map.html | 2
branches/release/libs/graph/doc/dijkstra_visitor.html | 12
branches/release/libs/graph/doc/distance_recorder.html | 14
branches/release/libs/graph/doc/edge_list.html | 12
branches/release/libs/graph/doc/edmonds_karp_max_flow.html | 18
branches/release/libs/graph/doc/eg1-iso.cpp | 2
branches/release/libs/graph/doc/erdos_renyi_generator.html | 20
branches/release/libs/graph/doc/exception.html | 10
branches/release/libs/graph/doc/faq.html | 10
branches/release/libs/graph/doc/file_dependency_example.html | 12
branches/release/libs/graph/doc/filtered_graph.html | 12
branches/release/libs/graph/doc/floyd_warshall_shortest.html | 4
branches/release/libs/graph/doc/fruchterman_reingold.html | 16
branches/release/libs/graph/doc/graph_coloring.html | 12
branches/release/libs/graph/doc/graph_concepts.html | 12
branches/release/libs/graph/doc/graph_theory_review.html | 12
branches/release/libs/graph/doc/graph_traits.html | 12
branches/release/libs/graph/doc/gursoy_atun_layout.html | 16
branches/release/libs/graph/doc/history.html | 18
branches/release/libs/graph/doc/howard_cycle_ratio.html | 16
branches/release/libs/graph/doc/incident.html | 12
branches/release/libs/graph/doc/incremental_components.html | 12
branches/release/libs/graph/doc/index.html | 16
branches/release/libs/graph/doc/inv_adjacency_iterator.html | 10
branches/release/libs/graph/doc/is_kuratowski_subgraph.html | 14
branches/release/libs/graph/doc/is_straight_line_drawing.html | 16
branches/release/libs/graph/doc/isomorphism-impl.w | 2
branches/release/libs/graph/doc/isomorphism.html | 20
branches/release/libs/graph/doc/johnson_all_pairs_shortest.html | 20
branches/release/libs/graph/doc/kamada_kawai_spring_layout.html | 16
branches/release/libs/graph/doc/kevin_bacon.html | 12
branches/release/libs/graph/doc/king_ordering.html | 6
branches/release/libs/graph/doc/known_problems.html | 12
branches/release/libs/graph/doc/kolmogorov_max_flow.html | 84 +-
branches/release/libs/graph/doc/kruskal_min_spanning_tree.html | 24
branches/release/libs/graph/doc/layout_tolerance.html | 10
branches/release/libs/graph/doc/leda_conversion.html | 12
branches/release/libs/graph/doc/lengauer_tarjan_dominator.htm | 20
branches/release/libs/graph/doc/make_biconnected_planar.html | 14
branches/release/libs/graph/doc/make_connected.html | 14
branches/release/libs/graph/doc/make_maximal_planar.html | 18
branches/release/libs/graph/doc/maximum_matching.html | 20
branches/release/libs/graph/doc/metric_tsp_approx.html | 18
branches/release/libs/graph/doc/minimum_degree_ordering.html | 22
branches/release/libs/graph/doc/null_visitor.html | 12
branches/release/libs/graph/doc/opposite.html | 12
branches/release/libs/graph/doc/planar_canonical_ordering.html | 14
branches/release/libs/graph/doc/planar_face_traversal.html | 14
branches/release/libs/graph/doc/planar_graphs.html | 14
branches/release/libs/graph/doc/plod_generator.html | 18
branches/release/libs/graph/doc/predecessor_recorder.html | 14
branches/release/libs/graph/doc/prim_minimum_spanning_tree.html | 26
branches/release/libs/graph/doc/property.html | 10
branches/release/libs/graph/doc/property_map.html | 18
branches/release/libs/graph/doc/property_writer.html | 14
branches/release/libs/graph/doc/publications.html | 12
branches/release/libs/graph/doc/push_relabel_max_flow.html | 20
branches/release/libs/graph/doc/python.html | 10
branches/release/libs/graph/doc/quick_tour.html | 12
branches/release/libs/graph/doc/r_c_shortest_paths.html | 20
branches/release/libs/graph/doc/random.html | 10
branches/release/libs/graph/doc/random_layout.html | 12
branches/release/libs/graph/doc/read_dimacs.html | 4
branches/release/libs/graph/doc/read_graphml.html | 127 +-
branches/release/libs/graph/doc/read_graphml.rst | 57
branches/release/libs/graph/doc/read_graphviz.html | 159 ++--
branches/release/libs/graph/doc/read_graphviz.rst | 99 +-
branches/release/libs/graph/doc/reverse_graph.html | 12
branches/release/libs/graph/doc/sequential_vertex_coloring.html | 14
branches/release/libs/graph/doc/small_world_generator.html | 18
branches/release/libs/graph/doc/sorted_erdos_renyi_gen.html | 20
branches/release/libs/graph/doc/sparse_matrix_ordering.html | 12
branches/release/libs/graph/doc/stanford_graph.html | 16
branches/release/libs/graph/doc/straight_line_drawing.html | 18
branches/release/libs/graph/doc/strong_components.html | 28
branches/release/libs/graph/doc/subgraph.html | 32
branches/release/libs/graph/doc/table_of_contents.html | 5
branches/release/libs/graph/doc/time_stamper.html | 14
branches/release/libs/graph/doc/topological_sort.html | 18
branches/release/libs/graph/doc/transitive_closure.html | 14
branches/release/libs/graph/doc/transpose_graph.html | 16
branches/release/libs/graph/doc/trouble_shooting.html | 15
branches/release/libs/graph/doc/tsp_tour_len_visitor.html | 4
branches/release/libs/graph/doc/tsp_tour_visitor.html | 2
branches/release/libs/graph/doc/undirected_dfs.html | 20
branches/release/libs/graph/doc/users.html | 10
branches/release/libs/graph/doc/using_adjacency_list.html | 35
branches/release/libs/graph/doc/using_property_maps.html | 16
branches/release/libs/graph/doc/visitor_concepts.html | 12
branches/release/libs/graph/doc/write-graphviz.html | 14
branches/release/libs/graph/doc/write_dimacs.html | 4
branches/release/libs/graph/doc/write_graphml.html | 91 +-
branches/release/libs/graph/doc/write_graphml.rst | 27
branches/release/libs/graph/example/adjacency_list.cpp | 2
branches/release/libs/graph/example/adjacency_list_io.cpp | 2
branches/release/libs/graph/example/bfs.cpp | 2
branches/release/libs/graph/example/bfs_neighbor.cpp | 2
branches/release/libs/graph/example/canonical_ordering.cpp | 2
branches/release/libs/graph/example/city_visitor.cpp | 2
branches/release/libs/graph/example/edge_property.cpp | 2
branches/release/libs/graph/example/exterior_properties.cpp | 2
branches/release/libs/graph/example/exterior_property_map.cpp | 2
branches/release/libs/graph/example/interior_pmap_bundled.cpp | 2
branches/release/libs/graph/example/interior_property_map.cpp | 2
branches/release/libs/graph/example/iterator-property-map-eg.cpp | 2
branches/release/libs/graph/example/johnson-eg.cpp | 19
branches/release/libs/graph/example/knights-tour.cpp | 2
branches/release/libs/graph/example/kuratowski_subgraph.cpp | 2
branches/release/libs/graph/example/make_biconnected_planar.cpp | 2
branches/release/libs/graph/example/make_connected.cpp | 2
branches/release/libs/graph/example/make_maximal_planar.cpp | 2
branches/release/libs/graph/example/neighbor_bfs.cpp | 2
branches/release/libs/graph/example/planar_face_traversal.cpp | 2
branches/release/libs/graph/example/property_iterator.cpp | 4
branches/release/libs/graph/example/put-get-helper-eg.cpp | 2
branches/release/libs/graph/example/quick-tour.cpp | 4
branches/release/libs/graph/example/quick_tour.cpp | 33
branches/release/libs/graph/example/straight_line_drawing.cpp | 2
branches/release/libs/graph/module.cmake | 3
branches/release/libs/graph/src/CMakeLists.txt | 7
branches/release/libs/graph/src/graphml.cpp | 158 ++-
branches/release/libs/graph/src/read_graphviz_spirit.cpp | 26
branches/release/libs/graph/test/CMakeLists.txt | 7
branches/release/libs/graph/test/Jamfile.v2 | 58
branches/release/libs/graph/test/adj_list_invalidation.cpp | 5
branches/release/libs/graph/test/adj_list_loops.cpp | 5
branches/release/libs/graph/test/adjacency_matrix_test.cpp | 43 +
branches/release/libs/graph/test/all_planar_input_files_test.cpp | 2
branches/release/libs/graph/test/basic_planarity_test.cpp | 4
branches/release/libs/graph/test/betweenness_centrality_test.cpp | 2
branches/release/libs/graph/test/csr_graph_test.cpp | 173 +++-
branches/release/libs/graph/test/dag_longest_paths.cpp | 2
branches/release/libs/graph/test/dijkstra_cc.cpp | 22
branches/release/libs/graph/test/dijkstra_heap_performance.cpp | 42 +
branches/release/libs/graph/test/dimacs.cpp | 5
branches/release/libs/graph/test/graphml_test.cpp | 6
branches/release/libs/graph/test/graphml_test.xml | 16
branches/release/libs/graph/test/graphviz_test.cpp | 70 +
branches/release/libs/graph/test/is_straight_line_draw_test.cpp | 2
branches/release/libs/graph/test/isomorphism.cpp | 2
branches/release/libs/graph/test/johnson-test.cpp | 2
branches/release/libs/graph/test/kolmogorov_max_flow_test.cpp | 4
branches/release/libs/graph/test/layout_test.cpp | 106 +-
branches/release/libs/graph/test/make_bicon_planar_test.cpp | 4
branches/release/libs/graph/test/make_connected_test.cpp | 4
branches/release/libs/graph/test/make_maximal_planar_test.cpp | 4
branches/release/libs/graph/test/matching_test.cpp | 12
branches/release/libs/graph/test/max_flow_test.cpp | 2
branches/release/libs/graph/test/parallel_edges_loops_test.cpp | 2
branches/release/libs/graph/test/property_iter.cpp | 2
branches/release/libs/graph/test/random_matching_test.cpp | 2
branches/release/libs/graph/test/subgraph.cpp | 24
branches/release/libs/property_map/CMakeLists.txt | 6
branches/release/libs/property_map/doc/dynamic_property_map.html | 7
branches/release/libs/property_map/doc/dynamic_property_map.rst | 6
branches/release/libs/property_map/index.html | 8
branches/release/libs/property_map/test/CMakeLists.txt | 6
branches/release/libs/property_map/test/dynamic_properties_test.cpp | 4
branches/release/libs/property_map/test/property_map_cc.cpp | 11
307 files changed, 6454 insertions(+), 5615 deletions(-)
Modified: branches/release/boost/dynamic_property_map.hpp
==============================================================================
--- branches/release/boost/dynamic_property_map.hpp (original)
+++ branches/release/boost/dynamic_property_map.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,370 +1,17 @@
-#ifndef DYNAMIC_PROPERTY_MAP_RG09302004_HPP
-#define DYNAMIC_PROPERTY_MAP_RG09302004_HPP
+/*=============================================================================
+Copyright (c) 2009 Trustees of Indiana University
-// Copyright 2004-5 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// dynamic_property_map.hpp -
-// Support for runtime-polymorphic property maps. This header is factored
-// out of Doug Gregor's routines for reading GraphML files for use in reading
-// GraphViz graph files.
-
-// Authors: Doug Gregor
-// Ronald Garcia
-//
-
-
-#include <boost/config.hpp>
-#include <boost/property_map.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/any.hpp>
-#include <boost/function/function3.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <typeinfo>
-#include <boost/mpl/bool.hpp>
-#include <stdexcept>
-#include <sstream>
-#include <map>
-#include <boost/type.hpp>
-
-namespace boost {
-
-namespace detail {
-
- // read_value -
- // A wrapper around lexical_cast, which does not behave as
- // desired for std::string types.
- template<typename Value>
- inline Value read_value(const std::string& value)
- { return boost::lexical_cast<Value>(value); }
-
- template<>
- inline std::string read_value<std::string>(const std::string& value)
- { return value; }
-
-}
-
-
-// dynamic_property_map -
-// This interface supports polymorphic manipulation of property maps.
-class dynamic_property_map
-{
-public:
- virtual ~dynamic_property_map() { }
-
- virtual boost::any get(const any& key) = 0;
- virtual std::string get_string(const any& key) = 0;
- virtual void put(const any& key, const any& value) = 0;
- virtual const std::type_info& key() const = 0;
- virtual const std::type_info& value() const = 0;
-};
-
-
-//////////////////////////////////////////////////////////////////////
-// Property map exceptions
-//////////////////////////////////////////////////////////////////////
-
-struct dynamic_property_exception : public std::exception {
- virtual ~dynamic_property_exception() throw() {}
- virtual const char* what() const throw() = 0;
-};
-
-struct property_not_found : public dynamic_property_exception {
- std::string property;
- mutable std::string statement;
- property_not_found(const std::string& property) : property(property) {}
- virtual ~property_not_found() throw() {}
-
- const char* what() const throw() {
- if(statement.empty())
- statement =
- std::string("Property not found: ") + property + ".";
-
- return statement.c_str();
- }
-};
-
-struct dynamic_get_failure : public dynamic_property_exception {
- std::string property;
- mutable std::string statement;
- dynamic_get_failure(const std::string& property) : property(property) {}
- virtual ~dynamic_get_failure() throw() {}
-
- const char* what() const throw() {
- if(statement.empty())
- statement =
- std::string(
- "dynamic property get cannot retrieve value for property: ")
- + property + ".";
-
- return statement.c_str();
- }
-};
-
-struct dynamic_const_put_error : public dynamic_property_exception {
- virtual ~dynamic_const_put_error() throw() {}
-
- const char* what() const throw() {
- return "Attempt to put a value into a const property map: ";
- }
-};
-
-
-namespace detail {
-
-//
-// dynamic_property_map_adaptor -
-// property-map adaptor to support runtime polymorphism.
-template<typename PropertyMap>
-class dynamic_property_map_adaptor : public dynamic_property_map
-{
- typedef typename property_traits<PropertyMap>::key_type key_type;
- typedef typename property_traits<PropertyMap>::value_type value_type;
- typedef typename property_traits<PropertyMap>::category category;
-
- // do_put - overloaded dispatches from the put() member function.
- // Attempts to "put" to a property map that does not model
- // WritablePropertyMap result in a runtime exception.
-
- // in_value must either hold an object of value_type or a string that
- // can be converted to value_type via iostreams.
- void do_put(const any& in_key, const any& in_value, mpl::bool_<true>)
- {
-#if !(defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95))
- using boost::put;
-#endif
-
- key_type key = any_cast<key_type>(in_key);
- if (in_value.type() == typeid(value_type)) {
-#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
- boost::put(property_map, key, any_cast<value_type>(in_value));
-#else
- put(property_map, key, any_cast<value_type>(in_value));
+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)
+=============================================================================*/
+// Redirect/warning header, adapted from the version in Spirit
+
+#include <boost/version.hpp>
+
+#if BOOST_VERSION >= 103800
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/property_map/dynamic_property_map.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/property_map/dynamic_property_map.hpp"
#endif
- } else {
- // if in_value is an empty string, put a default constructed value_type.
- std::string v = any_cast<std::string>(in_value);
- if (v.empty()) {
-#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
- boost::put(property_map, key, value_type());
-#else
- put(property_map, key, value_type());
#endif
- } else {
-#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
- boost::put(property_map, key, detail::read_value<value_type>(v));
-#else
- put(property_map, key, detail::read_value<value_type>(v));
-#endif
- }
- }
- }
-
- void do_put(const any&, const any&, mpl::bool_<false>)
- {
- throw dynamic_const_put_error();
- }
-
-public:
- explicit dynamic_property_map_adaptor(const PropertyMap& property_map)
- : property_map(property_map) { }
-
- virtual boost::any get(const any& key)
- {
-#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
- return boost::get(property_map, any_cast<key_type>(key));
-#else
- using boost::get;
-
- return get(property_map, any_cast<key_type>(key));
-#endif
- }
-
- virtual std::string get_string(const any& key)
- {
-#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
- std::ostringstream out;
- out << boost::get(property_map, any_cast<key_type>(key));
- return out.str();
-#else
- using boost::get;
-
- std::ostringstream out;
- out << get(property_map, any_cast<key_type>(key));
- return out.str();
-#endif
- }
-
- virtual void put(const any& in_key, const any& in_value)
- {
- do_put(in_key, in_value,
- mpl::bool_<(is_convertible<category*,
- writable_property_map_tag*>::value)>());
- }
-
- virtual const std::type_info& key() const { return typeid(key_type); }
- virtual const std::type_info& value() const { return typeid(value_type); }
-
- PropertyMap& base() { return property_map; }
- const PropertyMap& base() const { return property_map; }
-
-private:
- PropertyMap property_map;
-};
-
-} // namespace detail
-
-//
-// dynamic_properties -
-// container for dynamic property maps
-//
-struct dynamic_properties
-{
- typedef std::multimap<std::string, dynamic_property_map*>
- property_maps_type;
- typedef boost::function3<std::auto_ptr<dynamic_property_map>,
- const std::string&,
- const boost::any&,
- const boost::any&> generate_fn_type;
-public:
-
- typedef property_maps_type::iterator iterator;
- typedef property_maps_type::const_iterator const_iterator;
-
- dynamic_properties() : generate_fn() { }
- dynamic_properties(const generate_fn_type& g) : generate_fn(g) {}
-
- ~dynamic_properties()
- {
- for (property_maps_type::iterator i = property_maps.begin();
- i != property_maps.end(); ++i) {
- delete i->second;
- }
- }
-
- template<typename PropertyMap>
- dynamic_properties&
- property(const std::string& name, PropertyMap property_map)
- {
- // Tbd: exception safety
- std::auto_ptr<dynamic_property_map> pm(
- new detail::dynamic_property_map_adaptor<PropertyMap>(property_map));
- property_maps_type::iterator i =
- property_maps.insert(property_maps_type::value_type(name, 0));
- i->second = pm.release();
-
- return *this;
- }
-
- iterator begin() { return property_maps.begin(); }
- const_iterator begin() const { return property_maps.begin(); }
- iterator end() { return property_maps.end(); }
- const_iterator end() const { return property_maps.end(); }
-
- iterator lower_bound(const std::string& name)
- { return property_maps.lower_bound(name); }
-
- const_iterator lower_bound(const std::string& name) const
- { return property_maps.lower_bound(name); }
-
- void
- insert(const std::string& name, std::auto_ptr<dynamic_property_map> pm)
- {
- property_maps.insert(property_maps_type::value_type(name, pm.release()));
- }
-
- template<typename Key, typename Value>
- std::auto_ptr<dynamic_property_map>
- generate(const std::string& name, const Key& key, const Value& value)
- {
- if(!generate_fn) {
- throw property_not_found(name);
- } else {
- return generate_fn(name,key,value);
- }
- }
-
-private:
- property_maps_type property_maps;
- generate_fn_type generate_fn;
-};
-
-template<typename Key, typename Value>
-bool
-put(const std::string& name, dynamic_properties& dp, const Key& key,
- const Value& value)
-{
- for (dynamic_properties::iterator i = dp.lower_bound(name);
- i != dp.end() && i->first == name; ++i) {
- if (i->second->key() == typeid(key)) {
- i->second->put(key, value);
- return true;
- }
- }
-
- std::auto_ptr<dynamic_property_map> new_map = dp.generate(name, key, value);
- if (new_map.get()) {
- new_map->put(key, value);
- dp.insert(name, new_map);
- return true;
- } else {
- return false;
- }
-}
-
-#ifndef BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
-template<typename Value, typename Key>
-Value
-get(const std::string& name, const dynamic_properties& dp, const Key& key)
-{
- for (dynamic_properties::const_iterator i = dp.lower_bound(name);
- i != dp.end() && i->first == name; ++i) {
- if (i->second->key() == typeid(key))
- return any_cast<Value>(i->second->get(key));
- }
-
- throw dynamic_get_failure(name);
-}
-#endif
-
-template<typename Value, typename Key>
-Value
-get(const std::string& name, const dynamic_properties& dp, const Key& key, type<Value>)
-{
- for (dynamic_properties::const_iterator i = dp.lower_bound(name);
- i != dp.end() && i->first == name; ++i) {
- if (i->second->key() == typeid(key))
- return any_cast<Value>(i->second->get(key));
- }
-
- throw dynamic_get_failure(name);
-}
-
-template<typename Key>
-std::string
-get(const std::string& name, const dynamic_properties& dp, const Key& key)
-{
- for (dynamic_properties::const_iterator i = dp.lower_bound(name);
- i != dp.end() && i->first == name; ++i) {
- if (i->second->key() == typeid(key))
- return i->second->get_string(key);
- }
-
- throw dynamic_get_failure(name);
-}
-
-// The easy way to ignore properties.
-inline
-std::auto_ptr<boost::dynamic_property_map>
-ignore_other_properties(const std::string&,
- const boost::any&,
- const boost::any&) {
- return std::auto_ptr<boost::dynamic_property_map>(0);
-}
-
-} // namespace boost
-
-#endif // DYNAMIC_PROPERTY_MAP_RG09302004_HPP
Modified: branches/release/boost/graph/adjacency_list.hpp
==============================================================================
--- branches/release/boost/graph/adjacency_list.hpp (original)
+++ branches/release/boost/graph/adjacency_list.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -37,8 +37,9 @@
#endif
#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_mutability_traits.hpp>
#include <boost/graph/graph_selectors.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/not.hpp>
@@ -63,17 +64,20 @@
#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#if !defined BOOST_NO_SLIST
- struct slistS {};
+ struct slistS {};
#endif
struct vecS { };
struct listS { };
struct setS { };
- struct multisetS { };
struct mapS { };
+ struct multisetS { };
+ struct multimapS { };
#if !defined BOOST_NO_HASH
- struct hash_mapS { };
struct hash_setS { };
+ struct hash_mapS { };
+ struct hash_multisetS { };
+ struct hash_multimapS { };
#endif
template <class Selector, class ValueType>
@@ -109,16 +113,31 @@
typedef std::multiset<ValueType> type;
};
+ template <class ValueType>
+ struct container_gen<multimapS, ValueType> {
+ typedef std::multiset<ValueType> type;
+ };
+
#if !defined BOOST_NO_HASH
template <class ValueType>
- struct container_gen<hash_mapS, ValueType> {
+ struct container_gen<hash_setS, ValueType> {
typedef BOOST_STD_EXTENSION_NAMESPACE::hash_set<ValueType> type;
};
template <class ValueType>
- struct container_gen<hash_setS, ValueType> {
+ struct container_gen<hash_mapS, ValueType> {
typedef BOOST_STD_EXTENSION_NAMESPACE::hash_set<ValueType> type;
};
+
+ template <class ValueType>
+ struct container_gen<hash_multisetS, ValueType> {
+ typedef BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<ValueType> type;
+ };
+
+ template <class ValueType>
+ struct container_gen<hash_multimapS, ValueType> {
+ typedef BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<ValueType> type;
+ };
#endif
#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
@@ -135,37 +154,51 @@
struct bind_ { typedef std::vector<T> type; };
};
- struct listS {
+ struct listS {
template <class T>
struct bind_ { typedef std::list<T> type; };
};
- struct setS {
+ struct setS {
+ template <class T>
+ struct bind_ { typedef std::set<T, std::less<T> > type; };
+ };
+
+
+ struct mapS {
template <class T>
struct bind_ { typedef std::set<T, std::less<T> > type; };
};
- struct multisetS {
+ struct multisetS {
+ template <class T>
+ struct bind_ { typedef std::multiset<T, std::less<T> > type; };
+ };
+
+ struct multimapS {
template <class T>
struct bind_ { typedef std::multiset<T, std::less<T> > type; };
};
#if !defined BOOST_NO_HASH
- struct hash_setS {
+ struct hash_setS {
template <class T>
struct bind_ { typedef BOOST_STD_EXTENSION_NAMESPACE::hash_set<T, std::less<T> > type; };
};
-#endif
- struct mapS {
+ struct hash_mapS {
template <class T>
- struct bind_ { typedef std::set<T, std::less<T> > type; };
+ struct bind_ { typedef BOOST_STD_EXTENSION_NAMESPACE::hash_set<T, std::less<T> > type; };
};
-#if !defined BOOST_NO_HASH
- struct hash_mapS {
+ struct hash_multisetS {
template <class T>
- struct bind_ { typedef BOOST_STD_EXTENSION_NAMESPACE::hash_set<T, std::less<T> > type; };
+ struct bind_ { typedef BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<T, std::less<T> > type; };
+ };
+
+ struct hash_multimapS {
+ template <class T>
+ struct bind_ { typedef BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<T, std::less<T> > type; };
};
#endif
@@ -202,54 +235,54 @@
struct parallel_edge_traits { };
template <>
- struct parallel_edge_traits<vecS> {
+ struct parallel_edge_traits<vecS> {
typedef allow_parallel_edge_tag type; };
template <>
- struct parallel_edge_traits<listS> {
+ struct parallel_edge_traits<listS> {
typedef allow_parallel_edge_tag type; };
#if !defined BOOST_NO_SLIST
template <>
- struct parallel_edge_traits<slistS> {
+ struct parallel_edge_traits<slistS> {
typedef allow_parallel_edge_tag type; };
#endif
template <>
- struct parallel_edge_traits<setS> {
+ struct parallel_edge_traits<setS> {
typedef disallow_parallel_edge_tag type; };
template <>
- struct parallel_edge_traits<multisetS> {
+ struct parallel_edge_traits<multisetS> {
typedef allow_parallel_edge_tag type; };
#if !defined BOOST_NO_HASH
template <>
struct parallel_edge_traits<hash_setS> {
- typedef disallow_parallel_edge_tag type;
+ typedef disallow_parallel_edge_tag type;
};
#endif
// mapS is obsolete, replaced with setS
template <>
- struct parallel_edge_traits<mapS> {
+ struct parallel_edge_traits<mapS> {
typedef disallow_parallel_edge_tag type; };
#if !defined BOOST_NO_HASH
template <>
struct parallel_edge_traits<hash_mapS> {
- typedef disallow_parallel_edge_tag type;
+ typedef disallow_parallel_edge_tag type;
};
#endif
namespace detail {
- template <class Directed> struct is_random_access {
+ template <class Directed> struct is_random_access {
enum { value = false};
typedef mpl::false_ type;
};
template <>
- struct is_random_access<vecS> {
- enum { value = true };
+ struct is_random_access<vecS> {
+ enum { value = true };
typedef mpl::true_ type;
};
@@ -285,21 +318,20 @@
typedef typename parallel_edge_traits<OutEdgeListS>::type
edge_parallel_category;
+ typedef std::size_t vertices_size_type;
typedef void* vertex_ptr;
typedef typename mpl::if_<is_rand_access,
- std::size_t, vertex_ptr>::type vertex_descriptor;
+ vertices_size_type, vertex_ptr>::type vertex_descriptor;
typedef detail::edge_desc_impl<directed_category, vertex_descriptor>
edge_descriptor;
- typedef std::size_t vertices_size_type;
-
private:
// Logic to figure out the edges_size_type
struct dummy {};
typedef typename container_gen<EdgeListS, dummy>::type EdgeContainer;
typedef typename DirectedS::is_bidir_t BidirectionalT;
typedef typename DirectedS::is_directed_t DirectedT;
- typedef typename mpl::and_<DirectedT,
+ typedef typename mpl::and_<DirectedT,
typename mpl::not_<BidirectionalT>::type >::type on_edge_storage;
public:
typedef typename mpl::if_<on_edge_storage,
@@ -329,7 +361,7 @@
: public detail::adj_list_gen<
adjacency_list<OutEdgeListS,VertexListS,DirectedS,
VertexProperty,EdgeProperty,GraphProperty,EdgeListS>,
- VertexListS, OutEdgeListS, DirectedS,
+ VertexListS, OutEdgeListS, DirectedS,
#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
typename detail::retag_property_list<vertex_bundle_t,
VertexProperty>::type,
@@ -346,6 +378,7 @@
EdgeListS>::vertex_descriptor,
VertexProperty>
{
+ public: // TODO Remove me
#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
typedef typename detail::retag_property_list<vertex_bundle_t,
VertexProperty>::retagged
@@ -382,7 +415,7 @@
private:
typedef adjacency_list self;
typedef typename detail::adj_list_gen<
- self, VertexListS, OutEdgeListS, DirectedS,
+ self, VertexListS, OutEdgeListS, DirectedS,
vertex_property_type, edge_property_type, GraphProperty, EdgeListS
>::type Base;
@@ -400,7 +433,7 @@
typedef GraphProperty graph_property_type;
- inline adjacency_list(const GraphProperty& p = GraphProperty())
+ inline adjacency_list(const GraphProperty& p = GraphProperty())
: m_property(p) { }
inline adjacency_list(const adjacency_list& x)
@@ -416,7 +449,7 @@
}
// Required by Mutable Graph
- inline adjacency_list(vertices_size_type num_vertices,
+ inline adjacency_list(vertices_size_type num_vertices,
const GraphProperty& p = GraphProperty())
: Base(num_vertices), m_property(p) { }
@@ -532,12 +565,12 @@
get(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
GraphProperty, EdgeListS>& g)
{
- typedef typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty,
+ typedef typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty,
EdgeProperty, GraphProperty, EdgeListS>, T Bundle::*>::type
result_type;
return result_type(&g, p);
}
-
+
template<typename OutEdgeListS, typename VertexListS, typename DirectedS, typename VertexProperty,
typename EdgeProperty, typename GraphProperty, typename EdgeListS, typename T, typename Bundle>
inline
@@ -546,7 +579,7 @@
get(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
GraphProperty, EdgeListS> const & g)
{
- typedef typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty,
+ typedef typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty,
EdgeProperty, GraphProperty, EdgeListS>, T Bundle::*>::const_type
result_type;
return result_type(&g, p);
@@ -574,6 +607,24 @@
#endif
+// Mutability Traits
+#define ADJLIST_PARAMS \
+ typename OEL, typename VL, typename D, typename VP, typename EP, \
+ typename GP, typename EL
+#define ADJLIST adjacency_list<OEL,VL,D,VP,EP,GP,EL>
+template <ADJLIST_PARAMS>
+struct graph_mutability_traits<ADJLIST> {
+ typedef mutable_property_graph_tag category;
+};
+
+// Can't remove vertices from adjacency lists with VL==vecS
+template <typename OEL, typename D, typename VP, typename EP, typename GP, typename EL>
+struct graph_mutability_traits< adjacency_list<OEL,vecS,D,VP,EP,GP,EL> > {
+ typedef add_only_property_graph_tag category;
+};
+#undef ADJLIST_PARAMS
+#undef ADJLIST
+
} // namespace boost
Modified: branches/release/boost/graph/adjacency_list_io.hpp
==============================================================================
--- branches/release/boost/graph/adjacency_list_io.hpp (original)
+++ branches/release/boost/graph/adjacency_list_io.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,6 +1,6 @@
//=======================================================================
// Copyright 2001 Universite Joseph Fourier, Grenoble.
-// Author: François Faure
+// Author: Francois Faure
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/boost/graph/adjacency_matrix.hpp
==============================================================================
--- branches/release/boost/graph/adjacency_matrix.hpp (original)
+++ branches/release/boost/graph/adjacency_matrix.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -18,6 +18,7 @@
#include <boost/limits.hpp>
#include <boost/iterator.hpp>
#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_mutability_traits.hpp>
#include <boost/graph/graph_selectors.hpp>
#include <boost/mpl/if.hpp>
#include <boost/graph/adjacency_iterator.hpp>
@@ -511,6 +512,7 @@
typedef no_vertex_bundle vertex_bundled;
typedef no_edge_bundle edge_bundled;
#endif
+ typedef GraphProperty graph_property_type;
public: // should be private
typedef typename mpl::if_<typename has_property<edge_property_type>::type,
@@ -598,13 +600,52 @@
typedef adjacency_matrix_class_tag graph_tag;
// Constructor required by MutableGraph
- adjacency_matrix(vertices_size_type n_vertices)
+ adjacency_matrix(vertices_size_type n_vertices,
+ const GraphProperty& p = GraphProperty())
: m_matrix(Directed::is_directed ?
(n_vertices * n_vertices)
: (n_vertices * (n_vertices + 1) / 2)),
m_vertex_set(0, n_vertices),
m_vertex_properties(n_vertices),
- m_num_edges(0) { }
+ m_num_edges(0),
+ m_property(p) { }
+
+ template <typename EdgeIterator>
+ adjacency_matrix(EdgeIterator first,
+ EdgeIterator last,
+ vertices_size_type n_vertices,
+ const GraphProperty& p = GraphProperty())
+ : m_matrix(Directed::is_directed ?
+ (n_vertices * n_vertices)
+ : (n_vertices * (n_vertices + 1) / 2)),
+ m_vertex_set(0, n_vertices),
+ m_vertex_properties(n_vertices),
+ m_num_edges(0),
+ m_property(p)
+ {
+ for (; first != last; ++first) {
+ add_edge(first->first, first->second, *this);
+ }
+ }
+
+ template <typename EdgeIterator, typename EdgePropertyIterator>
+ adjacency_matrix(EdgeIterator first,
+ EdgeIterator last,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type n_vertices,
+ const GraphProperty& p = GraphProperty())
+ : m_matrix(Directed::is_directed ?
+ (n_vertices * n_vertices)
+ : (n_vertices * (n_vertices + 1) / 2)),
+ m_vertex_set(0, n_vertices),
+ m_vertex_properties(n_vertices),
+ m_num_edges(0),
+ m_property(p)
+ {
+ for (; first != last; ++first, ++ep_iter) {
+ add_edge(first->first, first->second, *ep_iter, *this);
+ }
+ }
#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
// Directly access a vertex or edge bundle
@@ -648,6 +689,7 @@
VertexList m_vertex_set;
std::vector<vertex_property_type> m_vertex_properties;
size_type m_num_edges;
+ GraphProperty m_property;
};
//=========================================================================
@@ -993,6 +1035,37 @@
}
//=========================================================================
+ // Functions required by the PropertyGraph concept
+
+ // O(1)
+ template <typename D, typename VP, typename EP, typename GP, typename A,
+ typename Tag, typename Value>
+ inline void
+ set_property(adjacency_matrix<D,VP,EP,GP,A>& g, Tag, const Value& value)
+ {
+ get_property_value(g.m_property, Tag()) = value;
+ }
+
+ template <typename D, typename VP, typename EP, typename GP, typename A,
+ typename Tag>
+ inline
+ typename graph_property<adjacency_matrix<D,VP,EP,GP,A>, Tag>::type&
+ get_property(adjacency_matrix<D,VP,EP,GP,A>& g, Tag)
+ {
+ return get_property_value(g.m_property, Tag());
+ }
+
+ template <typename D, typename VP, typename EP, typename GP, typename A,
+ typename Tag>
+ inline
+ const
+ typename graph_property<adjacency_matrix<D,VP,EP,GP,A>, Tag>::type&
+ get_property(const adjacency_matrix<D,VP,EP,GP,A>& g, Tag)
+ {
+ return get_property_value(g.m_property, Tag());
+ }
+
+ //=========================================================================
// Vertex Property Map
template <typename GraphPtr, typename Vertex, typename T, typename R,
@@ -1278,6 +1351,17 @@
#endif
+#define ADJMAT_PARAMS \
+ typename D, typename VP, typename EP, typename GP, typename A
+#define ADJMAT adjacency_matrix<D,VP,EP,GP,A>
+template <ADJMAT_PARAMS>
+struct graph_mutability_traits<ADJMAT> {
+ typedef mutable_edge_property_graph_tag category;
+};
+#undef ADJMAT_PARAMS
+#undef ADJMAT
+
+
} // namespace boost
#endif // BOOST_ADJACENCY_MATRIX_HPP
Modified: branches/release/boost/graph/astar_search.hpp
==============================================================================
--- branches/release/boost/graph/astar_search.hpp (original)
+++ branches/release/boost/graph/astar_search.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -15,18 +15,20 @@
#include <functional>
+#include <vector>
#include <boost/limits.hpp>
#include <boost/graph/named_function_params.hpp>
-#include <boost/pending/mutable_queue.hpp>
#include <boost/graph/relax.hpp>
-#include <boost/pending/indirect_cmp.hpp>
#include <boost/graph/exception.hpp>
#include <boost/graph/breadth_first_search.hpp>
+#include <boost/graph/detail/d_ary_heap.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/property_map/vector_property_map.hpp>
namespace boost {
-
+
template <class Heuristic, class Graph>
struct AStarHeuristicConcept {
void constraints()
@@ -37,8 +39,8 @@
Heuristic h;
typename graph_traits<Graph>::vertex_descriptor u;
};
-
-
+
+
template <class Graph, class CostType>
class astar_heuristic : public std::unary_function<
typename graph_traits<Graph>::vertex_descriptor, CostType>
@@ -48,9 +50,9 @@
astar_heuristic() {}
CostType operator()(Vertex u) { return static_cast<CostType>(0); }
};
-
-
+
+
template <class Visitor, class Graph>
struct AStarVisitorConcept {
void constraints()
@@ -70,22 +72,22 @@
typename graph_traits<Graph>::vertex_descriptor u;
typename graph_traits<Graph>::edge_descriptor e;
};
-
-
+
+
template <class Visitors = null_visitor>
class astar_visitor : public bfs_visitor<Visitors> {
public:
astar_visitor() {}
astar_visitor(Visitors vis)
: bfs_visitor<Visitors>(vis) {}
-
+
template <class Edge, class Graph>
void edge_relaxed(Edge e, Graph& g) {
invoke_visitors(this->m_vis, e, g, on_edge_relaxed());
}
template <class Edge, class Graph>
void edge_not_relaxed(Edge e, Graph& g) {
- invoke_visitors(this->m_vis, e, g, on_edge_not_relaxed());
+ invoke_visitors(this->m_vis, e, g, on_edge_not_relaxed());
}
private:
template <class Edge, class Graph>
@@ -99,10 +101,10 @@
return astar_visitor<Visitors>(vis);
}
typedef astar_visitor<> default_astar_visitor;
-
+
namespace detail {
-
+
template <class AStarHeuristic, class UniformCostVisitor,
class UpdatableQueue, class PredecessorMap,
class CostMap, class DistanceMap, class WeightMap,
@@ -110,12 +112,12 @@
class BinaryPredicate>
struct astar_bfs_visitor
{
-
+
typedef typename property_traits<CostMap>::value_type C;
typedef typename property_traits<ColorMap>::value_type ColorValue;
typedef color_traits<ColorValue> Color;
typedef typename property_traits<DistanceMap>::value_type distance_type;
-
+
astar_bfs_visitor(AStarHeuristic h, UniformCostVisitor vis,
UpdatableQueue& Q, PredecessorMap p,
CostMap c, DistanceMap d, WeightMap w,
@@ -124,8 +126,8 @@
: m_h(h), m_vis(vis), m_Q(Q), m_predecessor(p), m_cost(c),
m_distance(d), m_weight(w), m_color(col),
m_combine(combine), m_compare(compare), m_zero(zero) {}
-
-
+
+
template <class Vertex, class Graph>
void initialize_vertex(Vertex u, Graph& g) {
m_vis.initialize_vertex(u, g);
@@ -143,16 +145,16 @@
m_vis.finish_vertex(u, g);
}
template <class Edge, class Graph>
- void examine_edge(Edge e, Graph& g) {
+ void examine_edge(Edge e, Graph& g) {
if (m_compare(get(m_weight, e), m_zero))
throw negative_edge();
m_vis.examine_edge(e, g);
}
template <class Edge, class Graph>
void non_tree_edge(Edge, Graph&) {}
-
-
-
+
+
+
template <class Edge, class Graph>
void tree_edge(Edge e, Graph& g) {
m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
@@ -166,8 +168,8 @@
} else
m_vis.edge_not_relaxed(e, g);
}
-
-
+
+
template <class Edge, class Graph>
void gray_target(Edge e, Graph& g) {
distance_type old_distance = get(m_distance, target(e, g));
@@ -192,8 +194,8 @@
} else
m_vis.edge_not_relaxed(e, g);
}
-
-
+
+
template <class Edge, class Graph>
void black_target(Edge e, Graph& g) {
distance_type old_distance = get(m_distance, target(e, g));
@@ -213,9 +215,9 @@
} else
m_vis.edge_not_relaxed(e, g);
}
-
-
-
+
+
+
AStarHeuristic m_h;
UniformCostVisitor m_vis;
UpdatableQueue& m_Q;
@@ -228,13 +230,13 @@
BinaryPredicate m_compare;
bool m_decreased;
C m_zero;
-
+
};
-
+
} // namespace detail
-
-
+
+
template <typename VertexListGraph, typename AStarHeuristic,
typename AStarVisitor, typename PredecessorMap,
typename CostMap, typename DistanceMap,
@@ -253,26 +255,24 @@
CompareFunction compare, CombineFunction combine,
CostInf inf, CostZero zero)
{
- typedef indirect_cmp<CostMap, CompareFunction> IndirectCmp;
- IndirectCmp icmp(cost, compare);
-
typedef typename graph_traits<VertexListGraph>::vertex_descriptor
Vertex;
- typedef mutable_queue<Vertex, std::vector<Vertex>,
- IndirectCmp, VertexIndexMap>
+ typedef boost::vector_property_map<std::size_t> IndexInHeapMap;
+ IndexInHeapMap index_in_heap;
+ typedef d_ary_heap_indirect<Vertex, 4, IndexInHeapMap, CostMap, CompareFunction>
MutableQueue;
- MutableQueue Q(num_vertices(g), icmp, index_map);
-
+ MutableQueue Q(cost, index_in_heap, compare);
+
detail::astar_bfs_visitor<AStarHeuristic, AStarVisitor,
MutableQueue, PredecessorMap, CostMap, DistanceMap,
WeightMap, ColorMap, CombineFunction, CompareFunction>
bfs_vis(h, vis, Q, predecessor, cost, distance, weight,
color, combine, compare, zero);
-
+
breadth_first_visit(g, s, Q, bfs_vis, color);
}
-
-
+
+
// Non-named parameter interface
template <typename VertexListGraph, typename AStarHeuristic,
typename AStarVisitor, typename PredecessorMap,
@@ -292,7 +292,7 @@
CompareFunction compare, CombineFunction combine,
CostInf inf, CostZero zero)
{
-
+
typedef typename property_traits<ColorMap>::value_type ColorValue;
typedef color_traits<ColorValue> Color;
typename graph_traits<VertexListGraph>::vertex_iterator ui, ui_end;
@@ -305,15 +305,15 @@
}
put(distance, s, zero);
put(cost, s, h(s));
-
+
astar_search_no_init
(g, s, h, vis, predecessor, cost, distance, weight,
color, index_map, compare, combine, inf, zero);
-
+
}
-
-
-
+
+
+
namespace detail {
template <class VertexListGraph, class AStarHeuristic,
class CostMap, class DistanceMap, class WeightMap,
@@ -343,7 +343,7 @@
choose_param(get_param(params, distance_zero_t()),
C()));
}
-
+
template <class VertexListGraph, class AStarHeuristic,
class CostMap, class DistanceMap, class WeightMap,
class IndexMap, class ColorMap, class Params>
@@ -356,30 +356,21 @@
const Params& params)
{
typedef typename property_traits<WeightMap>::value_type D;
- typename std::vector<D>::size_type
- n = is_default_param(distance) ? num_vertices(g) : 1;
- std::vector<D> distance_map(n);
- n = is_default_param(cost) ? num_vertices(g) : 1;
- std::vector<D> cost_map(n);
- std::vector<default_color_type> color_map(num_vertices(g));
- default_color_type c = white_color;
-
+ std::vector<D> distance_map;
+ std::vector<D> cost_map;
+ std::vector<default_color_type> color_map;
+
detail::astar_dispatch2
(g, s, h,
- choose_param(cost, make_iterator_property_map
- (cost_map.begin(), index_map,
- cost_map[0])),
- choose_param(distance, make_iterator_property_map
- (distance_map.begin(), index_map,
- distance_map[0])),
+ choose_param(cost, vector_property_map<D, IndexMap>(index_map)),
+ choose_param(distance, vector_property_map<D, IndexMap>(index_map)),
weight, index_map,
- choose_param(color, make_iterator_property_map
- (color_map.begin(), index_map, c)),
+ choose_param(color, vector_property_map<default_color_type, IndexMap>(index_map)),
params);
}
} // namespace detail
-
-
+
+
// Named parameter interface
template <typename VertexListGraph,
typename AStarHeuristic,
@@ -390,7 +381,7 @@
typename graph_traits<VertexListGraph>::vertex_descriptor s,
AStarHeuristic h, const bgl_named_params<P, T, R>& params)
{
-
+
detail::astar_dispatch1
(g, s, h,
get_param(params, vertex_rank),
@@ -399,9 +390,9 @@
choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
get_param(params, vertex_color),
params);
-
+
}
-
+
} // namespace boost
#endif // BOOST_GRAPH_ASTAR_SEARCH_HPP
Modified: branches/release/boost/graph/bc_clustering.hpp
==============================================================================
--- branches/release/boost/graph/bc_clustering.hpp (original)
+++ branches/release/boost/graph/bc_clustering.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -14,7 +14,7 @@
#include <boost/pending/indirect_cmp.hpp>
#include <algorithm>
#include <vector>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost {
Modified: branches/release/boost/graph/betweenness_centrality.hpp
==============================================================================
--- branches/release/boost/graph/betweenness_centrality.hpp (original)
+++ branches/release/boost/graph/betweenness_centrality.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,6 +11,7 @@
#include <stack>
#include <vector>
+#include <boost/graph/overloading.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <boost/graph/breadth_first_search.hpp>
#include <boost/graph/relax.hpp>
@@ -19,7 +20,7 @@
#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/mpl/if.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/named_function_params.hpp>
#include <algorithm>
@@ -369,7 +370,8 @@
DistanceMap distance, // d
DependencyMap dependency, // delta
PathCountMap path_count, // sigma
- VertexIndexMap vertex_index)
+ VertexIndexMap vertex_index
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{
detail::graph::brandes_unweighted_shortest_paths shortest_paths;
@@ -394,7 +396,8 @@
DependencyMap dependency, // delta
PathCountMap path_count, // sigma
VertexIndexMap vertex_index,
- WeightMap weight_map)
+ WeightMap weight_map
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{
detail::graph::brandes_dijkstra_shortest_paths<WeightMap>
shortest_paths(weight_map);
@@ -417,6 +420,7 @@
WeightMap weight_map,
VertexIndexMap vertex_index)
{
+ typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename mpl::if_c<(is_same<CentralityMap,
@@ -431,7 +435,7 @@
std::vector<std::vector<edge_descriptor> > incoming(V);
std::vector<centrality_type> distance(V);
std::vector<centrality_type> dependency(V);
- std::vector<unsigned long long> path_count(V);
+ std::vector<degree_size_type> path_count(V);
brandes_betweenness_centrality(
g, centrality, edge_centrality_map,
@@ -452,6 +456,7 @@
EdgeCentralityMap edge_centrality_map,
VertexIndexMap vertex_index)
{
+ typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename mpl::if_c<(is_same<CentralityMap,
@@ -466,7 +471,7 @@
std::vector<std::vector<edge_descriptor> > incoming(V);
std::vector<centrality_type> distance(V);
std::vector<centrality_type> dependency(V);
- std::vector<unsigned long long> path_count(V);
+ std::vector<degree_size_type> path_count(V);
brandes_betweenness_centrality(
g, centrality, edge_centrality_map,
@@ -507,12 +512,23 @@
}
};
+ template <typename T>
+ struct is_bgl_named_params {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+
+ template <typename Param, typename Tag, typename Rest>
+ struct is_bgl_named_params<bgl_named_params<Param, Tag, Rest> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+ };
+
} } // end namespace detail::graph
template<typename Graph, typename Param, typename Tag, typename Rest>
void
brandes_betweenness_centrality(const Graph& g,
- const bgl_named_params<Param,Tag,Rest>& params)
+ const bgl_named_params<Param,Tag,Rest>& params
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{
typedef bgl_named_params<Param,Tag,Rest> named_params;
@@ -527,9 +543,13 @@
get_param(params, edge_weight));
}
+// disable_if is required to work around problem with MSVC 7.1 (it seems to not
+// get partial ordering getween this overload and the previous one correct)
template<typename Graph, typename CentralityMap>
-void
-brandes_betweenness_centrality(const Graph& g, CentralityMap centrality)
+typename disable_if<detail::graph::is_bgl_named_params<CentralityMap>,
+ void>::type
+brandes_betweenness_centrality(const Graph& g, CentralityMap centrality
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{
detail::graph::brandes_betweenness_centrality_dispatch2(
g, centrality, dummy_property_map(), get(vertex_index, g));
@@ -538,7 +558,8 @@
template<typename Graph, typename CentralityMap, typename EdgeCentralityMap>
void
brandes_betweenness_centrality(const Graph& g, CentralityMap centrality,
- EdgeCentralityMap edge_centrality_map)
+ EdgeCentralityMap edge_centrality_map
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{
detail::graph::brandes_betweenness_centrality_dispatch2(
g, centrality, edge_centrality_map, get(vertex_index, g));
@@ -568,7 +589,8 @@
// Compute the central point dominance of a graph.
template<typename Graph, typename CentralityMap>
typename property_traits<CentralityMap>::value_type
-central_point_dominance(const Graph& g, CentralityMap centrality)
+central_point_dominance(const Graph& g, CentralityMap centrality
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{
using std::max;
Modified: branches/release/boost/graph/biconnected_components.hpp
==============================================================================
--- branches/release/boost/graph/biconnected_components.hpp (original)
+++ branches/release/boost/graph/biconnected_components.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -17,7 +17,7 @@
#include <boost/limits.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/graph_concepts.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/depth_first_search.hpp>
#include <boost/graph/graph_utility.hpp>
Modified: branches/release/boost/graph/breadth_first_search.hpp
==============================================================================
--- branches/release/boost/graph/breadth_first_search.hpp (original)
+++ branches/release/boost/graph/breadth_first_search.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -21,6 +21,13 @@
#include <boost/graph/graph_concepts.hpp>
#include <boost/graph/visitors.hpp>
#include <boost/graph/named_function_params.hpp>
+#include <boost/graph/overloading.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/graph/two_bit_color_map.hpp>
+
+#ifdef BOOST_GRAPH_USE_MPI
+#include <boost/graph/distributed/concepts.hpp>
+#endif // BOOST_GRAPH_USE_MPI
namespace boost {
@@ -100,6 +107,8 @@
breadth_first_visit(g, s, Q, vis, color);
}
+ namespace graph { struct bfs_visitor_event_not_overridden {}; }
+
template <class Visitors = null_visitor>
class bfs_visitor {
@@ -108,40 +117,75 @@
bfs_visitor(Visitors vis) : m_vis(vis) { }
template <class Vertex, class Graph>
- void initialize_vertex(Vertex u, Graph& g) {
+ graph::bfs_visitor_event_not_overridden
+ initialize_vertex(Vertex u, Graph& g)
+ {
invoke_visitors(m_vis, u, g, ::boost::on_initialize_vertex());
+ return graph::bfs_visitor_event_not_overridden();
}
+
template <class Vertex, class Graph>
- void discover_vertex(Vertex u, Graph& g) {
+ graph::bfs_visitor_event_not_overridden
+ discover_vertex(Vertex u, Graph& g)
+ {
invoke_visitors(m_vis, u, g, ::boost::on_discover_vertex());
+ return graph::bfs_visitor_event_not_overridden();
}
+
template <class Vertex, class Graph>
- void examine_vertex(Vertex u, Graph& g) {
+ graph::bfs_visitor_event_not_overridden
+ examine_vertex(Vertex u, Graph& g)
+ {
invoke_visitors(m_vis, u, g, ::boost::on_examine_vertex());
+ return graph::bfs_visitor_event_not_overridden();
}
+
template <class Edge, class Graph>
- void examine_edge(Edge e, Graph& g) {
+ graph::bfs_visitor_event_not_overridden
+ examine_edge(Edge e, Graph& g)
+ {
invoke_visitors(m_vis, e, g, ::boost::on_examine_edge());
+ return graph::bfs_visitor_event_not_overridden();
}
+
template <class Edge, class Graph>
- void tree_edge(Edge e, Graph& g) {
+ graph::bfs_visitor_event_not_overridden
+ tree_edge(Edge e, Graph& g)
+ {
invoke_visitors(m_vis, e, g, ::boost::on_tree_edge());
+ return graph::bfs_visitor_event_not_overridden();
}
+
template <class Edge, class Graph>
- void non_tree_edge(Edge e, Graph& g) {
+ graph::bfs_visitor_event_not_overridden
+ non_tree_edge(Edge e, Graph& g)
+ {
invoke_visitors(m_vis, e, g, ::boost::on_non_tree_edge());
+ return graph::bfs_visitor_event_not_overridden();
}
+
template <class Edge, class Graph>
- void gray_target(Edge e, Graph& g) {
+ graph::bfs_visitor_event_not_overridden
+ gray_target(Edge e, Graph& g)
+ {
invoke_visitors(m_vis, e, g, ::boost::on_gray_target());
+ return graph::bfs_visitor_event_not_overridden();
}
+
template <class Edge, class Graph>
- void black_target(Edge e, Graph& g) {
+ graph::bfs_visitor_event_not_overridden
+ black_target(Edge e, Graph& g)
+ {
invoke_visitors(m_vis, e, g, ::boost::on_black_target());
+ return graph::bfs_visitor_event_not_overridden();
}
+
template <class Vertex, class Graph>
- void finish_vertex(Vertex u, Graph& g) {
+ graph::bfs_visitor_event_not_overridden
+ finish_vertex(Vertex u, Graph& g)
+ {
invoke_visitors(m_vis, u, g, ::boost::on_finish_vertex());
+ return graph::bfs_visitor_event_not_overridden();
}
BOOST_GRAPH_EVENT_STUB(on_initialize_vertex,bfs)
@@ -174,20 +218,34 @@
typename graph_traits<VertexListGraph>::vertex_descriptor s,
ColorMap color,
BFSVisitor vis,
- const bgl_named_params<P, T, R>& params)
+ const bgl_named_params<P, T, R>& params,
+ BOOST_GRAPH_ENABLE_IF_MODELS(VertexListGraph, vertex_list_graph_tag,
+ void)* = 0)
{
typedef graph_traits<VertexListGraph> Traits;
// Buffer default
typedef typename Traits::vertex_descriptor Vertex;
typedef boost::queue<Vertex> queue_t;
queue_t Q;
- detail::wrap_ref<queue_t> Qref(Q);
breadth_first_search
(g, s,
- choose_param(get_param(params, buffer_param_t()), Qref).ref,
+ choose_param(get_param(params, buffer_param_t()), boost::ref(Q)).get(),
vis, color);
}
+#ifdef BOOST_GRAPH_USE_MPI
+ template <class DistributedGraph, class ColorMap, class BFSVisitor,
+ class P, class T, class R>
+ void bfs_helper
+ (DistributedGraph& g,
+ typename graph_traits<DistributedGraph>::vertex_descriptor s,
+ ColorMap color,
+ BFSVisitor vis,
+ const bgl_named_params<P, T, R>& params,
+ BOOST_GRAPH_ENABLE_IF_MODELS(DistributedGraph, distributed_graph_tag,
+ void)* = 0);
+#endif // BOOST_GRAPH_USE_MPI
+
//-------------------------------------------------------------------------
// Choose between default color and color parameters. Using
// function dispatching so that we don't require vertex index if
@@ -219,16 +277,14 @@
const bgl_named_params<P, T, R>& params,
detail::error_property_not_found)
{
- std::vector<default_color_type> color_vec(num_vertices(g));
- default_color_type c = white_color;
null_visitor null_vis;
bfs_helper
(g, s,
- make_iterator_property_map
- (color_vec.begin(),
+ make_two_bit_color_map
+ (num_vertices(g),
choose_const_pmap(get_param(params, vertex_index),
- g, vertex_index), c),
+ g, vertex_index)),
choose_param(get_param(params, graph_visitor),
make_bfs_visitor(null_vis)),
params);
@@ -276,11 +332,10 @@
typedef typename Traits::vertex_descriptor vertex_descriptor;
typedef boost::queue<vertex_descriptor> queue_t;
queue_t Q;
- detail::wrap_ref<queue_t> Qref(Q);
breadth_first_visit
(ng, s,
- choose_param(get_param(params, buffer_param_t()), Qref).ref,
+ choose_param(get_param(params, buffer_param_t()), boost::ref(Q)).get(),
choose_param(get_param(params, graph_visitor),
make_bfs_visitor(null_visitor())),
choose_pmap(get_param(params, vertex_color), ng, vertex_color)
@@ -289,5 +344,9 @@
} // namespace boost
+#ifdef BOOST_GRAPH_USE_MPI
+# include <boost/graph/distributed/breadth_first_search.hpp>
+#endif
+
#endif // BOOST_GRAPH_BREADTH_FIRST_SEARCH_HPP
Modified: branches/release/boost/graph/chrobak_payne_drawing.hpp
==============================================================================
--- branches/release/boost/graph/chrobak_payne_drawing.hpp (original)
+++ branches/release/boost/graph/chrobak_payne_drawing.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -14,7 +14,7 @@
#include <boost/config.hpp>
#include <boost/utility.hpp> //for next and prior
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost
Modified: branches/release/boost/graph/circle_layout.hpp
==============================================================================
--- branches/release/boost/graph/circle_layout.hpp (original)
+++ branches/release/boost/graph/circle_layout.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,8 +9,12 @@
#ifndef BOOST_GRAPH_CIRCLE_LAYOUT_HPP
#define BOOST_GRAPH_CIRCLE_LAYOUT_HPP
#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/math/constants/constants.hpp>
#include <utility>
#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/iteration_macros.hpp>
+#include <boost/graph/topology.hpp>
+#include <boost/static_assert.hpp>
namespace boost {
/**
@@ -28,7 +32,8 @@
circle_graph_layout(const VertexListGraph& g, PositionMap position,
Radius radius)
{
- const double pi = 3.14159;
+ BOOST_STATIC_ASSERT (property_traits<PositionMap>::value_type::dimensions >= 2);
+ const double pi = boost::math::constants::pi<double>();
#ifndef BOOST_NO_STDC_NAMESPACE
using std::sin;
@@ -40,14 +45,12 @@
vertices_size_type n = num_vertices(g);
- typedef typename graph_traits<VertexListGraph>::vertex_iterator
- vertex_iterator;
-
vertices_size_type i = 0;
- for(std::pair<vertex_iterator, vertex_iterator> v = vertices(g);
- v.first != v.second; ++v.first, ++i) {
- position[*v.first].x = radius * cos(i * 2 * pi / n);
- position[*v.first].y = radius * sin(i * 2 * pi / n);
+ double two_pi_over_n = 2. * pi / n;
+ BGL_FORALL_VERTICES_T(v, g, VertexListGraph) {
+ position[v][0] = radius * cos(i * two_pi_over_n);
+ position[v][1] = radius * sin(i * two_pi_over_n);
+ ++i;
}
}
} // end namespace boost
Modified: branches/release/boost/graph/compressed_sparse_row_graph.hpp
==============================================================================
--- branches/release/boost/graph/compressed_sparse_row_graph.hpp (original)
+++ branches/release/boost/graph/compressed_sparse_row_graph.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,4 +1,4 @@
-// Copyright 2005-2006 The Trustees of Indiana University.
+// Copyright 2005-2009 The Trustees of Indiana University.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -17,28 +17,83 @@
#include <utility>
#include <algorithm>
#include <climits>
+#include <cassert>
#include <iterator>
+#include <iostream> // FIXME
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/detail/indexed_properties.hpp>
#include <boost/iterator/counting_iterator.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/integer.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/mpl/if.hpp>
#include <boost/graph/graph_selectors.hpp>
#include <boost/static_assert.hpp>
+#include <boost/functional/hash.hpp>
+#include <boost/utility.hpp>
#ifdef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
# error The Compressed Sparse Row graph only supports bundled properties.
# error You will need a compiler that conforms better to the C++ standard.
#endif
+#ifndef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+#warning "Using deprecated BGL compressed sparse row graph interface --"
+#warning "please see the documentation for the new interface and then"
+#warning "#define BOOST_GRAPH_USE_NEW_CSR_INTERFACE before including"
+#warning "<boost/graph/compressed_sparse_row_graph.hpp>"
+#endif // BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+
+#ifndef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+#define BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+#endif
+
namespace boost {
// A tag type indicating that the graph in question is a compressed
// sparse row graph. This is an internal detail of the BGL.
struct csr_graph_tag;
+// A type (edges_are_sorted_t) and a value (edges_are_sorted) used to indicate
+// that the edge list passed into the CSR graph is already sorted by source
+// vertex.
+struct edges_are_sorted_internal {};
+inline void edges_are_sorted(edges_are_sorted_internal) {}
+typedef void (*edges_are_sorted_t)(edges_are_sorted_internal);
+
+#ifdef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+// A type (edges_are_unsorted_t) and a value (edges_are_unsorted) used to
+// indicate that the edge list passed into the CSR graph is not sorted by
+// source vertex.
+struct edges_are_unsorted_internal {};
+inline void edges_are_unsorted(edges_are_unsorted_internal) {}
+typedef void (*edges_are_unsorted_t)(edges_are_unsorted_internal);
+
+// A type (construct_inplace_from_sources_and_targets_t) and a value
+// (construct_inplace_from_sources_and_targets) used to indicate that mutable
+// vectors of sources and targets (and possibly edge properties) are being used
+// to construct the CSR graph. These vectors are sorted in-place and then the
+// targets and properties are swapped into the graph data structure.
+struct construct_inplace_from_sources_and_targets_internal {};
+inline void construct_inplace_from_sources_and_targets(construct_inplace_from_sources_and_targets_internal) {}
+typedef void (*construct_inplace_from_sources_and_targets_t)(construct_inplace_from_sources_and_targets_internal);
+
+// A type (construct_inplace_from_sources_and_targets_global_t) and a value
+// (construct_inplace_from_sources_and_targets_global) used to indicate that
+// mutable vectors of sources and targets (and possibly edge properties) are
+// being used to construct the CSR graph. These vectors are sorted in-place
+// and then the targets and properties are swapped into the graph data
+// structure. It is assumed that global indices (for distributed CSR) are
+// used, and a map is required to convert those to local indices. This
+// constructor is intended for internal use by the various CSR graphs
+// (sequential and distributed).
+struct construct_inplace_from_sources_and_targets_global_internal {};
+inline void construct_inplace_from_sources_and_targets_global(construct_inplace_from_sources_and_targets_global_internal) {}
+typedef void (*construct_inplace_from_sources_and_targets_global_t)(construct_inplace_from_sources_and_targets_global_internal);
+
+#endif // BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+
/****************************************************************************
* Local helper macros to reduce typing and clutter later on. *
****************************************************************************/
@@ -54,6 +109,19 @@
template<typename Vertex, typename EdgeIndex>
class csr_edge_descriptor;
+#ifdef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+namespace detail {
+ // Less-than operator for comparing only the first elements of two arbitrary
+ // Boost tuples
+ struct compare_first_elements_in_tuples {
+ template <typename Tuple>
+ bool operator()(const Tuple& a, const Tuple& b) const {
+ return (a.template get<0>()) < (b.template get<0>());
+ }
+ };
+}
+#endif // BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+
/** Compressed sparse row graph.
*
* Vertex and EdgeIndex should be unsigned integral types and should
@@ -154,10 +222,106 @@
// Default constructor: an empty graph.
compressed_sparse_row_graph()
- : m_rowstart(1, EdgeIndex(0)), m_column(0), m_property(),
- m_last_source(0) {}
+ : m_rowstart(1, EdgeIndex(0)), m_column(0), m_property()
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ , m_last_source(0)
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ {}
+
+ // With numverts vertices
+ compressed_sparse_row_graph(vertices_size_type numverts)
+ : inherited_vertex_properties(numverts), m_rowstart(numverts + 1),
+ m_column(0)
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ , m_last_source(numverts)
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ {
+ for (Vertex v = 0; v < numverts + 1; ++v)
+ m_rowstart[v] = 0;
+ }
+
+#ifdef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+ // From number of vertices and unsorted list of edges
+ template <typename MultiPassInputIterator>
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin,
+ MultiPassInputIterator edge_end,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numverts), m_rowstart(numverts + 1),
+ m_column(0), m_property(prop)
+ {
+ // Put the degree of each vertex v into m_rowstart[v + 1]
+ for (MultiPassInputIterator i = edge_begin; i != edge_end; ++i)
+ ++m_rowstart[i->first + 1];
+
+ // Compute the partial sum of the degrees to get the actual values of
+ // m_rowstart
+ EdgeIndex start_of_this_row = 0;
+ m_rowstart[0] = start_of_this_row;
+ for (vertices_size_type i = 1; i <= numverts; ++i) {
+ start_of_this_row += m_rowstart[i];
+ m_rowstart[i] = start_of_this_row;
+ }
+ m_column.resize(m_rowstart.back());
- // From number of vertices and sorted list of edges
+ // Histogram sort the edges by their source vertices, putting the targets
+ // into m_column. The index current_insert_positions[v] contains the next
+ // location to insert out edges for vertex v.
+ std::vector<EdgeIndex>
+ current_insert_positions(m_rowstart.begin(), m_rowstart.begin() + numverts);
+ for (; edge_begin != edge_end; ++edge_begin)
+ m_column[current_insert_positions[edge_begin->first]++] = edge_begin->second;
+
+ // Default-construct properties for edges
+ inherited_edge_properties::resize(m_column.size());
+ }
+
+ // From number of vertices and unsorted list of edges, plus edge properties
+ template <typename MultiPassInputIterator, typename EdgePropertyIterator>
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin,
+ MultiPassInputIterator edge_end,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numverts), m_rowstart(numverts + 1),
+ m_column(0), m_property(prop)
+ {
+ // Put the degree of each vertex v into m_rowstart[v + 1]
+ for (MultiPassInputIterator i = edge_begin; i != edge_end; ++i)
+ ++m_rowstart[i->first + 1];
+
+ // Compute the partial sum of the degrees to get the actual values of
+ // m_rowstart
+ EdgeIndex start_of_this_row = 0;
+ m_rowstart[0] = start_of_this_row;
+ for (vertices_size_type i = 1; i <= numverts; ++i) {
+ start_of_this_row += m_rowstart[i];
+ m_rowstart[i] = start_of_this_row;
+ }
+ m_column.resize(m_rowstart.back());
+ inherited_edge_properties::resize(m_rowstart.back());
+
+ // Histogram sort the edges by their source vertices, putting the targets
+ // into m_column. The index current_insert_positions[v] contains the next
+ // location to insert out edges for vertex v.
+ std::vector<EdgeIndex>
+ current_insert_positions(m_rowstart.begin(), m_rowstart.begin() + numverts);
+ for (; edge_begin != edge_end; ++edge_begin, ++ep_iter) {
+ vertices_size_type source = edge_begin->first;
+ EdgeIndex insert_pos = current_insert_positions[source];
+ ++current_insert_positions[source];
+ m_column[insert_pos] = edge_begin->second;
+ inherited_edge_properties::write_by_index(insert_pos, *ep_iter);
+ }
+ }
+#endif // BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+
+ // From number of vertices and sorted list of edges (deprecated
+ // interface)
template<typename InputIterator>
compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
vertices_size_type numverts,
@@ -197,7 +361,8 @@
inherited_edge_properties::resize(m_column.size());
}
- // From number of vertices and sorted list of edges
+ // From number of vertices and sorted list of edges (deprecated
+ // interface)
template<typename InputIterator, typename EdgePropertyIterator>
compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
EdgePropertyIterator ep_iter,
@@ -236,12 +401,262 @@
m_rowstart[current_vertex_plus_one] = current_edge;
}
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+
+ // From number of vertices and sorted list of edges (new interface)
+ template<typename InputIterator>
+ compressed_sparse_row_graph(edges_are_sorted_t,
+ InputIterator edge_begin, InputIterator edge_end,
+ vertices_size_type numverts,
+ edges_size_type numedges = 0,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numverts), m_rowstart(numverts + 1),
+ m_column(0), m_property(prop)
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ , m_last_source(numverts)
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ {
+ // Reserving storage in advance can save us lots of time and
+ // memory, but it can only be done if we have forward iterators or
+ // the user has supplied the number of edges.
+ if (numedges == 0) {
+ typedef typename std::iterator_traits<InputIterator>::iterator_category
+ category;
+ maybe_reserve_edge_list_storage(edge_begin, edge_end, category());
+ } else {
+ m_column.reserve(numedges);
+ }
+
+ EdgeIndex current_edge = 0;
+ Vertex current_vertex_plus_one = 1;
+ m_rowstart[0] = 0;
+ for (InputIterator ei = edge_begin; ei != edge_end; ++ei) {
+ Vertex src = ei->first;
+ Vertex tgt = ei->second;
+ for (; current_vertex_plus_one != src + 1; ++current_vertex_plus_one)
+ m_rowstart[current_vertex_plus_one] = current_edge;
+ m_column.push_back(tgt);
+ ++current_edge;
+ }
+
+ // The remaining vertices have no edges
+ for (; current_vertex_plus_one != numverts + 1; ++current_vertex_plus_one)
+ m_rowstart[current_vertex_plus_one] = current_edge;
+
+ // Default-construct properties for edges
+ inherited_edge_properties::resize(m_column.size());
+ }
+
+ // From number of vertices and sorted list of edges (new interface)
+ template<typename InputIterator, typename EdgePropertyIterator>
+ compressed_sparse_row_graph(edges_are_sorted_t,
+ InputIterator edge_begin, InputIterator edge_end,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type numverts,
+ edges_size_type numedges = 0,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numverts), m_rowstart(numverts + 1),
+ m_column(0), m_property(prop)
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ , m_last_source(numverts)
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ {
+ // Reserving storage in advance can save us lots of time and
+ // memory, but it can only be done if we have forward iterators or
+ // the user has supplied the number of edges.
+ if (numedges == 0) {
+ typedef typename std::iterator_traits<InputIterator>::iterator_category
+ category;
+ maybe_reserve_edge_list_storage(edge_begin, edge_end, category());
+ } else {
+ m_column.reserve(numedges);
+ }
+
+ EdgeIndex current_edge = 0;
+ Vertex current_vertex_plus_one = 1;
+ m_rowstart[0] = 0;
+ for (InputIterator ei = edge_begin; ei != edge_end; ++ei, ++ep_iter) {
+ Vertex src = ei->first;
+ Vertex tgt = ei->second;
+ for (; current_vertex_plus_one != src + 1; ++current_vertex_plus_one)
+ m_rowstart[current_vertex_plus_one] = current_edge;
+ m_column.push_back(tgt);
+ inherited_edge_properties::push_back(*ep_iter);
+ ++current_edge;
+ }
+
+ // The remaining vertices have no edges
+ for (; current_vertex_plus_one != numverts + 1; ++current_vertex_plus_one)
+ m_rowstart[current_vertex_plus_one] = current_edge;
+ }
+
+#ifdef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+ // From number of vertices and mutable vectors of sources and targets;
+ // vectors are returned with unspecified contents but are guaranteed not to
+ // share storage with the constructed graph.
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numverts), m_rowstart(),
+ m_column(), m_property(prop)
+ {
+ assign_sources_and_targets_global(sources, targets, numverts, boost::identity_property_map());
+ }
+
+ // From number of vertices and mutable vectors of sources and targets,
+ // expressed with global vertex indices; vectors are returned with
+ // unspecified contents but are guaranteed not to share storage with the
+ // constructed graph. This constructor should only be used by the
+ // distributed CSR graph.
+ template <typename GlobalToLocal>
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_global_t,
+ std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ vertices_size_type numlocalverts,
+ GlobalToLocal global_to_local,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numlocalverts), m_rowstart(),
+ m_column(), m_property(prop)
+ {
+ assign_sources_and_targets_global(sources, targets, numlocalverts, global_to_local);
+ }
+
+ // From number of vertices and mutable vectors of sources, targets, and edge
+ // properties; vectors are returned with unspecified contents but are
+ // guaranteed not to share storage with the constructed graph.
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ std::vector<typename inherited_edge_properties::edge_property_type>& edge_props,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numverts), m_rowstart(),
+ m_column(), m_property(prop)
+ {
+ assign_sources_and_targets_global(sources, targets, edge_props, numverts, boost::identity_property_map());
+ }
+
+ // From number of vertices and mutable vectors of sources and targets and
+ // edge properties, expressed with global vertex indices; vectors are
+ // returned with unspecified contents but are guaranteed not to share
+ // storage with the constructed graph. This constructor should only be used
+ // by the distributed CSR graph.
+ template <typename GlobalToLocal>
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_global_t,
+ std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ std::vector<typename inherited_edge_properties::edge_property_type>& edge_props,
+ vertices_size_type numlocalverts,
+ GlobalToLocal global_to_local,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numlocalverts), m_rowstart(),
+ m_column(), m_property(prop)
+ {
+ assign_sources_and_targets_global(sources, targets, edge_props, numlocalverts, global_to_local);
+ }
+
+ // Replace graph with sources and targets given, sorting them in-place, and
+ // using the given global-to-local property map to get local indices from
+ // global ones in the two arrays.
+ template <typename GlobalToLocal>
+ void assign_sources_and_targets_global(std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ vertices_size_type numverts,
+ GlobalToLocal global_to_local) {
+ assert (sources.size() == targets.size());
+ typedef typename std::vector<vertex_descriptor>::iterator vertex_vec_iter;
+ EdgeIndex numedges = sources.size();
+ // Do an in-place histogram sort (at least that's what I think it is) to
+ // sort sources and targets
+ // 1. Count degrees; degree of vertex v is in m_rowstart[v + 1]
+ m_rowstart.clear();
+ m_rowstart.resize(numverts + 1);
+ for (size_t i = 0; i < numedges; ++i) {
+ ++m_rowstart[get(global_to_local, sources[i]) + 1];
+ }
+ // 2. Do a prefix sum on those to get starting positions of each row
+ for (size_t i = 0; i < numverts; ++i) {
+ m_rowstart[i + 1] += m_rowstart[i];
+ }
+ // 3. Copy m_rowstart (except last element) to get insert positions
+ std::vector<EdgeIndex> insert_positions(m_rowstart.begin(), boost::prior(m_rowstart.end()));
+ // 4. Swap the sources and targets into place
+ for (size_t i = 0; i < numedges; ++i) {
+ // While edge i is not in the right bucket:
+ while (!(i >= m_rowstart[get(global_to_local, sources[i])] && i < insert_positions[get(global_to_local, sources[i])])) {
+ // Add a slot in the right bucket
+ size_t target_pos = insert_positions[get(global_to_local, sources[i])]++;
+ assert (target_pos < m_rowstart[get(global_to_local, sources[i]) + 1]);
+ if (target_pos == i) continue;
+ // Swap this edge into place
+ using std::swap;
+ swap(sources[i], sources[target_pos]);
+ swap(targets[i], targets[target_pos]);
+ }
+ }
+ // Now targets is the correct vector (properly sorted by source) for
+ // m_column
+ m_column.swap(targets);
+ }
+
+ // Replace graph with sources and targets and edge properties given, sorting
+ // them in-place, and using the given global-to-local property map to get
+ // local indices from global ones in the two arrays.
+ template <typename GlobalToLocal>
+ void assign_sources_and_targets_global(std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ std::vector<typename inherited_edge_properties::edge_property_type>& edge_props,
+ vertices_size_type numverts,
+ GlobalToLocal global_to_local) {
+ assert (sources.size() == targets.size());
+ assert (sources.size() == edge_props.size());
+ EdgeIndex numedges = sources.size();
+ // Do an in-place histogram sort (at least that's what I think it is) to
+ // sort sources and targets
+ // 1. Count degrees; degree of vertex v is in m_rowstart[v + 1]
+ m_rowstart.clear();
+ m_rowstart.resize(numverts + 1);
+ for (size_t i = 0; i < numedges; ++i) {
+ ++m_rowstart[get(global_to_local, sources[i]) + 1];
+ }
+ // 2. Do a prefix sum on those to get starting positions of each row
+ for (size_t i = 0; i < numverts; ++i) {
+ m_rowstart[i + 1] += m_rowstart[i];
+ }
+ // 3. Copy m_rowstart (except last element) to get insert positions
+ std::vector<EdgeIndex> insert_positions(m_rowstart.begin(), boost::prior(m_rowstart.end()));
+ // 4. Swap the sources and targets into place
+ for (size_t i = 0; i < numedges; ++i) {
+ // While edge i is not in the right bucket:
+ while (!(i >= m_rowstart[get(global_to_local, sources[i])] && i < insert_positions[get(global_to_local, sources[i])])) {
+ // Add a slot in the right bucket
+ size_t target_pos = insert_positions[get(global_to_local, sources[i])]++;
+ assert (target_pos < m_rowstart[get(global_to_local, sources[i]) + 1]);
+ if (target_pos == i) continue;
+ // Swap this edge into place
+ using std::swap;
+ swap(sources[i], sources[target_pos]);
+ swap(targets[i], targets[target_pos]);
+ swap(edge_props[i], edge_props[target_pos]);
+ }
+ }
+ // Now targets is the correct vector (properly sorted by source) for
+ // m_column, and edge_props for m_edge_properties
+ m_column.swap(targets);
+ this->m_edge_properties.swap(edge_props);
+ }
+
+#endif // BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+
+
// Requires IncidenceGraph, a vertex index map, and a vertex(n, g) function
template<typename Graph, typename VertexIndexMap>
compressed_sparse_row_graph(const Graph& g, const VertexIndexMap& vi,
vertices_size_type numverts,
edges_size_type numedges)
- : m_property(), m_last_source(0)
+ : m_property()
{
assign(g, vi, numverts, numedges);
}
@@ -249,7 +664,7 @@
// Requires VertexListGraph and EdgeListGraph
template<typename Graph, typename VertexIndexMap>
compressed_sparse_row_graph(const Graph& g, const VertexIndexMap& vi)
- : m_property(), m_last_source(0)
+ : m_property()
{
assign(g, vi, num_vertices(g), num_edges(g));
}
@@ -257,7 +672,7 @@
// Requires vertex index map plus requirements of previous constructor
template<typename Graph>
explicit compressed_sparse_row_graph(const Graph& g)
- : m_property(), m_last_source(0)
+ : m_property()
{
assign(g, get(vertex_index, g), num_vertices(g), num_edges(g));
}
@@ -282,16 +697,24 @@
for (Vertex i = 0; i != numverts; ++i) {
m_rowstart[i] = current_edge;
g_vertex v = vertex(i, g);
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ // Out edges in a single vertex are only sorted for the old interface
EdgeIndex num_edges_before_this_vertex = current_edge;
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
g_out_edge_iter ei, ei_end;
for (tie(ei, ei_end) = out_edges(v, g); ei != ei_end; ++ei) {
m_column[current_edge++] = get(vi, target(*ei, g));
}
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ // Out edges in a single vertex are only sorted for the old interface
std::sort(m_column.begin() + num_edges_before_this_vertex,
m_column.begin() + current_edge);
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
}
m_rowstart[numverts] = current_edge;
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
m_last_source = numverts;
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
}
// Requires the above, plus VertexListGraph and EdgeListGraph
@@ -320,7 +743,11 @@
std::vector<EdgeIndex> m_rowstart;
std::vector<Vertex> m_column;
GraphProperty m_property;
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ // This member is only needed to support add_edge(), which is not provided by
+ // the new interface
Vertex m_last_source; // Last source of added edge, plus one
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
};
template<typename Vertex, typename EdgeIndex>
@@ -339,6 +766,23 @@
bool operator>(const csr_edge_descriptor& e) const {return idx > e.idx;}
bool operator<=(const csr_edge_descriptor& e) const {return idx <= e.idx;}
bool operator>=(const csr_edge_descriptor& e) const {return idx >= e.idx;}
+
+ template<typename Archiver>
+ void serialize(Archiver& ar, const unsigned int /*version*/)
+ {
+ ar & src & idx;
+ }
+};
+
+template<typename Vertex, typename EdgeIndex>
+struct hash<csr_edge_descriptor<Vertex, EdgeIndex> >
+{
+ std::size_t operator()(csr_edge_descriptor<Vertex, EdgeIndex> const& x) const
+ {
+ std::size_t hash = hash_value(x.src);
+ hash_combine(hash, x.idx);
+ return hash;
+ }
};
// Construction functions
@@ -360,6 +804,7 @@
return old_num_verts_plus_one - 1;
}
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
// This function requires that (src, tgt) be lexicographically at least as
// large as the largest edge in the graph so far
template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
@@ -377,8 +822,8 @@
return typename BOOST_CSR_GRAPH_TYPE::edge_descriptor(src, num_edges_orig);
}
-// This function requires that (src, tgt) be lexicographically at least as
-// large as the largest edge in the graph so far
+// This function requires that src be at least as large as the largest source
+// in the graph so far
template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
inline typename BOOST_CSR_GRAPH_TYPE::edge_descriptor
add_edge(Vertex src, Vertex tgt,
@@ -394,7 +839,7 @@
g.edge_properties().push_back(p);
return typename BOOST_CSR_GRAPH_TYPE::edge_descriptor(src, num_edges_orig);
}
-
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
// From VertexListGraph
template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
@@ -505,6 +950,10 @@
return i;
}
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+// These require that the out edges from a vertex are sorted, which is only
+// guaranteed by the old interface
+
// Unlike for an adjacency_matrix, edge_range and edge take lg(out_degree(i))
// time
template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
@@ -536,6 +985,7 @@
else
return std::make_pair(*range.first, true);
}
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
// Find an edge given its index in the graph
template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
@@ -546,7 +996,14 @@
assert (idx < num_edges(g));
row_start_iter src_plus_1 =
std::upper_bound(g.m_rowstart.begin(),
+#ifdef BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ // This handles the case where there are some vertices
+ // with rowstart 0 after the last provided vertex; this
+ // case does not happen with the new interface
g.m_rowstart.begin() + g.m_last_source + 1,
+#else // !BOOST_GRAPH_USE_OLD_CSR_INTERFACE
+ g.m_rowstart.end(),
+#endif // BOOST_GRAPH_USE_OLD_CSR_INTERFACE
idx);
// Get last source whose rowstart is at most idx
// upper_bound returns this position plus 1
Modified: branches/release/boost/graph/connected_components.hpp
==============================================================================
--- branches/release/boost/graph/connected_components.hpp (original)
+++ branches/release/boost/graph/connected_components.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -15,7 +15,7 @@
#include <boost/graph/depth_first_search.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/graph_concepts.hpp>
-
+#include <boost/graph/overloading.hpp>
#include <boost/static_assert.hpp>
namespace boost {
@@ -58,7 +58,8 @@
template <class Graph, class ComponentMap, class P, class T, class R>
inline typename property_traits<ComponentMap>::value_type
connected_components(const Graph& g, ComponentMap c,
- const bgl_named_params<P, T, R>& params)
+ const bgl_named_params<P, T, R>& params
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, vertex_list_graph_tag))
{
if (num_vertices(g) == 0) return 0;
@@ -77,14 +78,15 @@
template <class Graph, class ComponentMap>
inline typename property_traits<ComponentMap>::value_type
- connected_components(const Graph& g, ComponentMap c)
+ connected_components(const Graph& g, ComponentMap c
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, vertex_list_graph_tag))
{
if (num_vertices(g) == 0) return 0;
typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
function_requires< WritablePropertyMapConcept<ComponentMap, Vertex> >();
typedef typename boost::graph_traits<Graph>::directed_category directed;
- BOOST_STATIC_ASSERT((boost::is_same<directed, undirected_tag>::value));
+ // BOOST_STATIC_ASSERT((boost::is_same<directed, undirected_tag>::value));
typedef typename property_traits<ComponentMap>::value_type comp_type;
// c_count initialized to "nil" (with nil represented by (max)())
@@ -97,5 +99,8 @@
} // namespace boost
+#ifdef BOOST_GRAPH_USE_MPI
+# include <boost/graph/distributed/connected_components.hpp>
+#endif
#endif // BOOST_GRAPH_CONNECTED_COMPONENTS_HPP
Modified: branches/release/boost/graph/copy.hpp
==============================================================================
--- branches/release/boost/graph/copy.hpp (original)
+++ branches/release/boost/graph/copy.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -44,7 +44,7 @@
#include <boost/config.hpp>
#include <vector>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/named_function_params.hpp>
#include <boost/graph/breadth_first_search.hpp>
#include <boost/type_traits/conversion_traits.hpp>
Modified: branches/release/boost/graph/create_condensation_graph.hpp
==============================================================================
--- branches/release/boost/graph/create_condensation_graph.hpp (original)
+++ branches/release/boost/graph/create_condensation_graph.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,7 +11,7 @@
#define BOOST_CREATE_CONDENSATION_GRAPH_HPP
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost {
Modified: branches/release/boost/graph/depth_first_search.hpp
==============================================================================
--- branches/release/boost/graph/depth_first_search.hpp (original)
+++ branches/release/boost/graph/depth_first_search.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -19,9 +19,9 @@
#include <boost/graph/properties.hpp>
#include <boost/graph/visitors.hpp>
#include <boost/graph/named_function_params.hpp>
-
#include <boost/ref.hpp>
#include <boost/implicit_cast.hpp>
+#include <boost/spirit/home/phoenix.hpp>
#include <vector>
#include <utility>
@@ -220,43 +220,6 @@
depth_first_search(g, vis, color, *vertices(g).first);
}
- namespace detail {
- template <class ColorMap>
- struct dfs_dispatch {
-
- template <class VertexListGraph, class Vertex, class DFSVisitor,
- class P, class T, class R>
- static void
- apply(const VertexListGraph& g, DFSVisitor vis, Vertex start_vertex,
- const bgl_named_params<P, T, R>&,
- ColorMap color)
- {
- depth_first_search(g, vis, color, start_vertex);
- }
- };
-
- template <>
- struct dfs_dispatch<detail::error_property_not_found> {
- template <class VertexListGraph, class Vertex, class DFSVisitor,
- class P, class T, class R>
- static void
- apply(const VertexListGraph& g, DFSVisitor vis, Vertex start_vertex,
- const bgl_named_params<P, T, R>& params,
- detail::error_property_not_found)
- {
- std::vector<default_color_type> color_vec(num_vertices(g));
- default_color_type c = white_color; // avoid warning about un-init
- depth_first_search
- (g, vis, make_iterator_property_map
- (color_vec.begin(),
- choose_const_pmap(get_param(params, vertex_index),
- g, vertex_index), c),
- start_vertex);
- }
- };
- } // namespace detail
-
-
template <class Visitors = null_visitor>
class dfs_visitor {
public:
@@ -315,26 +278,23 @@
}
typedef dfs_visitor<> default_dfs_visitor;
-
// Named Parameter Variant
template <class VertexListGraph, class P, class T, class R>
void
depth_first_search(const VertexListGraph& g,
const bgl_named_params<P, T, R>& params)
{
- typedef typename property_value< bgl_named_params<P, T, R>,
- vertex_color_t>::type C;
if (vertices(g).first == vertices(g).second)
return;
- detail::dfs_dispatch<C>::apply
+ using namespace boost::graph::keywords;
+ typedef bgl_named_params<P, T, R> params_type;
+ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(params_type, params)
+ depth_first_search
(g,
- choose_param(get_param(params, graph_visitor),
- make_dfs_visitor(null_visitor())),
- choose_param(get_param(params, root_vertex_t()),
- *vertices(g).first),
- params,
- get_param(params, vertex_color)
- );
+ arg_pack[_visitor | make_dfs_visitor(null_visitor())],
+ boost::detail::color_map_maker<VertexListGraph, arg_pack_type>::make_map(g, arg_pack),
+ arg_pack[_root_vertex | *vertices(g).first]
+ );
}
template <class IncidenceGraph, class DFSVisitor, class ColorMap>
@@ -357,9 +317,10 @@
vis.start_vertex(u, g);
detail::depth_first_visit_impl(g, u, vis, color, func);
}
-
-
} // namespace boost
+#ifdef BOOST_GRAPH_USE_MPI
+# include <boost/graph/distributed/depth_first_search.hpp>
+#endif
#endif
Modified: branches/release/boost/graph/detail/adjacency_list.hpp
==============================================================================
--- branches/release/boost/graph/detail/adjacency_list.hpp (original)
+++ branches/release/boost/graph/detail/adjacency_list.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -15,7 +15,7 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#include <boost/operators.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/pending/integer_range.hpp>
#include <boost/graph/graph_traits.hpp>
#include <memory>
@@ -387,7 +387,7 @@
++first;
incidence_iterator i = first;
if (first != last)
- for (; i != last; ++i)
+ for (++i; i != last; ++i)
if (!pred(*i)) {
*first.base() = *i.base();
++first;
@@ -786,14 +786,14 @@
typedef typename EdgeList::value_type StoredEdge;
typename EdgeList::iterator i = el.begin(), end = el.end();
for (; i != end; ++i) {
- if((*i).get_target() == v) {
+ if ((*i).get_target() == v) {
// NOTE: Wihtout this skip, this loop will double-delete properties
// of loop edges. This solution is based on the observation that
// the incidence edges of a vertex with a loop are adjacent in the
// out edge list. This *may* actually hold for multisets also.
bool skip = (boost::next(i) != end && i->get_iter() == boost::next(i)->get_iter());
g.m_edges.erase((*i).get_iter());
- if(skip) ++i;
+ if (skip) ++i;
}
}
detail::erase_from_incidence_list(el, v, cat);
@@ -2297,7 +2297,7 @@
// VertexList and vertex_iterator
typedef typename container_gen<VertexListS,
vertex_ptr>::type SeqVertexList;
- typedef boost::integer_range<std::size_t> RandVertexList;
+ typedef boost::integer_range<vertices_size_type> RandVertexList;
typedef typename mpl::if_<is_rand_access,
RandVertexList, SeqVertexList>::type VertexList;
Modified: branches/release/boost/graph/detail/indexed_properties.hpp
==============================================================================
--- branches/release/boost/graph/detail/indexed_properties.hpp (original)
+++ branches/release/boost/graph/detail/indexed_properties.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -68,6 +68,12 @@
m_vertex_properties.push_back(prop);
}
+ // Write an element by raw index
+ void write_by_index(std::size_t idx, const Property& prop)
+ {
+ m_vertex_properties[idx] = prop;
+ }
+
// Access to the derived object
Derived& derived() { return *static_cast<Derived*>(this); }
@@ -133,6 +139,12 @@
m_edge_properties.reserve(n);
}
+ // Write an element by raw index
+ void write_by_index(std::size_t idx, const Property& prop)
+ {
+ m_edge_properties[idx] = prop;
+ }
+
public:
// Add a new property value to the back
void push_back(const Property& prop)
Modified: branches/release/boost/graph/detail/is_same.hpp
==============================================================================
--- branches/release/boost/graph/detail/is_same.hpp (original)
+++ branches/release/boost/graph/detail/is_same.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,6 +9,14 @@
#ifndef BOOST_GRAPH_DETAIL_IS_SAME_HPP
#define BOOST_GRAPH_DETAIL_IS_SAME_HPP
+// Deprecate the use of this header.
+// TODO: Remove this file from trunk/release in 1.41/1.42.
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/type_traits/is_same.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/type_traits/is_same.hpp"
+#endif
+
#include <boost/mpl/if.hpp>
namespace boost {
Modified: branches/release/boost/graph/detail/read_graphviz_spirit.hpp
==============================================================================
--- branches/release/boost/graph/detail/read_graphviz_spirit.hpp (original)
+++ branches/release/boost/graph/detail/read_graphviz_spirit.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -43,7 +43,7 @@
#include <boost/ref.hpp>
#include <boost/function/function2.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/dynamic_property_map.hpp>
+#include <boost/property_map/dynamic_property_map.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/detail/workaround.hpp>
#include <algorithm>
Modified: branches/release/boost/graph/detail/self_avoiding_walk.hpp
==============================================================================
--- branches/release/boost/graph/detail/self_avoiding_walk.hpp (original)
+++ branches/release/boost/graph/detail/self_avoiding_walk.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -29,7 +29,7 @@
#include <utility>
#include <boost/config.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#define SAW_SENTINAL -1
Modified: branches/release/boost/graph/detail/sparse_ordering.hpp
==============================================================================
--- branches/release/boost/graph/detail/sparse_ordering.hpp (original)
+++ branches/release/boost/graph/detail/sparse_ordering.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -20,7 +20,7 @@
#include <boost/graph/breadth_first_search.hpp>
#include <boost/graph/properties.hpp>
#include <boost/pending/indirect_cmp.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/bind.hpp>
#include <boost/graph/iteration_macros.hpp>
#include <boost/graph/depth_first_search.hpp>
Modified: branches/release/boost/graph/dijkstra_shortest_paths.hpp
==============================================================================
--- branches/release/boost/graph/dijkstra_shortest_paths.hpp (original)
+++ branches/release/boost/graph/dijkstra_shortest_paths.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -6,6 +6,12 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//=======================================================================
+//
+//
+// Revision History:
+// 04 April 2001: Added named parameter variant. (Jeremy Siek)
+// 01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)
+//
#ifndef BOOST_GRAPH_DIJKSTRA_HPP
#define BOOST_GRAPH_DIJKSTRA_HPP
@@ -17,6 +23,13 @@
#include <boost/pending/indirect_cmp.hpp>
#include <boost/graph/exception.hpp>
#include <boost/pending/relaxed_heap.hpp>
+#include <boost/graph/overloading.hpp>
+#include <boost/smart_ptr.hpp>
+#include <boost/graph/detail/d_ary_heap.hpp>
+#include <boost/graph/two_bit_color_map.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/property_map/vector_property_map.hpp>
+#include <boost/type_traits.hpp>
#ifdef BOOST_GRAPH_DIJKSTRA_TESTING
# include <boost/pending/mutable_queue.hpp>
@@ -24,7 +37,31 @@
namespace boost {
+ /**
+ * @brief Updates a particular value in a queue used by Dijkstra's
+ * algorithm.
+ *
+ * This routine is called by Dijkstra's algorithm after it has
+ * decreased the distance from the source vertex to the given @p
+ * vertex. By default, this routine will just call @c
+ * Q.update(vertex). However, other queues may provide more
+ * specialized versions of this routine.
+ *
+ * @param Q the queue that will be updated.
+ * @param vertex the vertex whose distance has been updated
+ * @param old_distance the previous distance to @p vertex
+ */
+ template<typename Buffer, typename Vertex, typename DistanceType>
+ inline void
+ dijkstra_queue_update(Buffer& Q, Vertex vertex, DistanceType old_distance)
+ {
+ (void)old_distance;
+ Q.update(vertex);
+ }
+
#ifdef BOOST_GRAPH_DIJKSTRA_TESTING
+ // This is a misnomer now: it now just refers to the "default heap", which is
+ // currently d-ary (d=4) but can be changed by a #define.
static bool dijkstra_relaxed_heap = true;
#endif
@@ -90,26 +127,29 @@
template <class Edge, class Graph>
void tree_edge(Edge e, Graph& g) {
- m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
- m_combine, m_compare);
- if (m_decreased)
+ bool decreased = relax(e, g, m_weight, m_predecessor, m_distance,
+ m_combine, m_compare);
+ if (decreased)
m_vis.edge_relaxed(e, g);
else
m_vis.edge_not_relaxed(e, g);
}
template <class Edge, class Graph>
void gray_target(Edge e, Graph& g) {
- m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
- m_combine, m_compare);
- if (m_decreased) {
- m_Q.update(target(e, g));
+ D old_distance = get(m_distance, target(e, g));
+
+ bool decreased = relax(e, g, m_weight, m_predecessor, m_distance,
+ m_combine, m_compare);
+ if (decreased) {
+ dijkstra_queue_update(m_Q, target(e, g), old_distance);
m_vis.edge_relaxed(e, g);
} else
m_vis.edge_not_relaxed(e, g);
}
template <class Vertex, class Graph>
- void initialize_vertex(Vertex /*u*/, Graph& /*g*/) { }
+ void initialize_vertex(Vertex u, Graph& g)
+ { m_vis.initialize_vertex(u, g); }
template <class Edge, class Graph>
void non_tree_edge(Edge, Graph&) { }
template <class Vertex, class Graph>
@@ -119,7 +159,7 @@
template <class Edge, class Graph>
void examine_edge(Edge e, Graph& g) {
if (m_compare(get(m_weight, e), m_zero))
- throw negative_edge();
+ boost::throw_exception(negative_edge());
m_vis.examine_edge(e, g);
}
template <class Edge, class Graph>
@@ -134,42 +174,116 @@
DistanceMap m_distance;
BinaryFunction m_combine;
BinaryPredicate m_compare;
- bool m_decreased;
D m_zero;
};
} // namespace detail
+ namespace detail {
+ template <class Graph, class IndexMap, class Value, bool KnownNumVertices>
+ struct vertex_property_map_generator_helper {};
+
+ template <class Graph, class IndexMap, class Value>
+ struct vertex_property_map_generator_helper<Graph, IndexMap, Value, true> {
+ typedef boost::iterator_property_map<Value*, IndexMap> type;
+ static type build(const Graph& g, const IndexMap& index, boost::scoped_array<Value>& array_holder) {
+ array_holder.reset(new Value[num_vertices(g)]);
+ std::fill(array_holder.get(), array_holder.get() + num_vertices(g), Value());
+ return make_iterator_property_map(array_holder.get(), index);
+ }
+ };
+
+ template <class Graph, class IndexMap, class Value>
+ struct vertex_property_map_generator_helper<Graph, IndexMap, Value, false> {
+ typedef boost::vector_property_map<Value, IndexMap> type;
+ static type build(const Graph& g, const IndexMap& index, boost::scoped_array<Value>& array_holder) {
+ return boost::make_vector_property_map<Value>(index);
+ }
+ };
+
+ template <class Graph, class IndexMap, class Value>
+ struct vertex_property_map_generator {
+ typedef boost::is_base_and_derived<
+ boost::vertex_list_graph_tag,
+ typename boost::graph_traits<Graph>::traversal_category>
+ known_num_vertices;
+ typedef vertex_property_map_generator_helper<Graph, IndexMap, Value, known_num_vertices::value> helper;
+ typedef typename helper::type type;
+ static type build(const Graph& g, const IndexMap& index, boost::scoped_array<Value>& array_holder) {
+ return helper::build(g, index, array_holder);
+ }
+ };
+ }
+
+ namespace detail {
+ template <class Graph, class IndexMap, bool KnownNumVertices>
+ struct default_color_map_generator_helper {};
+
+ template <class Graph, class IndexMap>
+ struct default_color_map_generator_helper<Graph, IndexMap, true> {
+ typedef boost::two_bit_color_map<IndexMap> type;
+ static type build(const Graph& g, const IndexMap& index) {
+ size_t nv = num_vertices(g);
+ return boost::two_bit_color_map<IndexMap>(nv, index);
+ }
+ };
+
+ template <class Graph, class IndexMap>
+ struct default_color_map_generator_helper<Graph, IndexMap, false> {
+ typedef boost::vector_property_map<boost::two_bit_color_type, IndexMap> type;
+ static type build(const Graph& g, const IndexMap& index) {
+ return boost::make_vector_property_map<boost::two_bit_color_type>(index);
+ }
+ };
+
+ template <class Graph, class IndexMap>
+ struct default_color_map_generator {
+ typedef boost::is_base_and_derived<
+ boost::vertex_list_graph_tag,
+ typename boost::graph_traits<Graph>::traversal_category>
+ known_num_vertices;
+ typedef default_color_map_generator_helper<Graph, IndexMap, known_num_vertices::value> helper;
+ typedef typename helper::type type;
+ static type build(const Graph& g, const IndexMap& index) {
+ return helper::build(g, index);
+ }
+ };
+ }
+
// Call breadth first search with default color map.
- template <class VertexListGraph, class DijkstraVisitor,
+ template <class Graph, class DijkstraVisitor,
class PredecessorMap, class DistanceMap,
class WeightMap, class IndexMap, class Compare, class Combine,
class DistZero>
inline void
dijkstra_shortest_paths_no_init
- (const VertexListGraph& g,
- typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ (const Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
IndexMap index_map,
Compare compare, Combine combine, DistZero zero,
DijkstraVisitor vis)
{
- std::vector<default_color_type> color(num_vertices(g));
- default_color_type c = white_color;
+ typedef
+ detail::default_color_map_generator<Graph, IndexMap>
+ ColorMapHelper;
+ typedef typename ColorMapHelper::type ColorMap;
+ ColorMap color =
+ ColorMapHelper::build(g, index_map);
dijkstra_shortest_paths_no_init( g, s, predecessor, distance, weight,
index_map, compare, combine, zero, vis,
- make_iterator_property_map(&color[0], index_map, c));
+ color);
}
// Call breadth first search
- template <class VertexListGraph, class DijkstraVisitor,
+ template <class Graph, class DijkstraVisitor,
class PredecessorMap, class DistanceMap,
class WeightMap, class IndexMap, class Compare, class Combine,
class DistZero, class ColorMap>
inline void
dijkstra_shortest_paths_no_init
- (const VertexListGraph& g,
- typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ (const Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
IndexMap index_map,
Compare compare, Combine combine, DistZero zero,
@@ -178,7 +292,7 @@
typedef indirect_cmp<DistanceMap, Compare> IndirectCmp;
IndirectCmp icmp(distance, compare);
- typedef typename graph_traits<VertexListGraph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
#ifdef BOOST_GRAPH_DIJKSTRA_TESTING
if (!dijkstra_relaxed_heap) {
@@ -186,7 +300,6 @@
MutableQueue;
MutableQueue Q(num_vertices(g), icmp, index_map);
-
detail::dijkstra_bfs_visitor<DijkstraVisitor, MutableQueue, WeightMap,
PredecessorMap, DistanceMap, Combine, Compare>
bfs_vis(vis, Q, weight, predecessor, distance, combine, compare, zero);
@@ -196,9 +309,21 @@
}
#endif // BOOST_GRAPH_DIJKSTRA_TESTING
+#ifdef BOOST_GRAPH_DIJKSTRA_USE_RELAXED_HEAP
typedef relaxed_heap<Vertex, IndirectCmp, IndexMap> MutableQueue;
-
MutableQueue Q(num_vertices(g), icmp, index_map);
+#else // Now the default: use a d-ary heap
+ boost::scoped_array<std::size_t> index_in_heap_map_holder;
+ typedef
+ detail::vertex_property_map_generator<Graph, IndexMap, std::size_t>
+ IndexInHeapMapHelper;
+ typedef typename IndexInHeapMapHelper::type IndexInHeapMap;
+ IndexInHeapMap index_in_heap =
+ IndexInHeapMapHelper::build(g, index_map, index_in_heap_map_holder);
+ typedef d_ary_heap_indirect<Vertex, 4, IndexInHeapMap, DistanceMap, Compare>
+ MutableQueue;
+ MutableQueue Q(distance, index_in_heap, compare);
+#endif // Relaxed heap
detail::dijkstra_bfs_visitor<DijkstraVisitor, MutableQueue, WeightMap,
PredecessorMap, DistanceMap, Combine, Compare>
@@ -211,7 +336,8 @@
template <class VertexListGraph, class DijkstraVisitor,
class PredecessorMap, class DistanceMap,
class WeightMap, class IndexMap, class Compare, class Combine,
- class DistInf, class DistZero>
+ class DistInf, class DistZero, typename T, typename Tag,
+ typename Base>
inline void
dijkstra_shortest_paths
(const VertexListGraph& g,
@@ -219,14 +345,14 @@
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
IndexMap index_map,
Compare compare, Combine combine, DistInf inf, DistZero zero,
- DijkstraVisitor vis)
+ DijkstraVisitor vis,
+ const bgl_named_params<T, Tag, Base>&
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(VertexListGraph,vertex_list_graph_tag))
{
- std::vector<default_color_type> color(num_vertices(g));
- default_color_type c = white_color;
+ boost::two_bit_color_map<IndexMap> color(num_vertices(g), index_map);
dijkstra_shortest_paths(g, s, predecessor, distance, weight, index_map,
compare, combine, inf, zero, vis,
- make_iterator_property_map(&color[0], index_map,
- c));
+ color);
}
// Initialize distances and call breadth first search
@@ -258,18 +384,37 @@
index_map, compare, combine, zero, vis, color);
}
+ // Initialize distances and call breadth first search
+ template <class VertexListGraph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistInf, class DistZero>
+ inline void
+ dijkstra_shortest_paths
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistInf inf, DistZero zero,
+ DijkstraVisitor vis)
+ {
+ dijkstra_shortest_paths(g, s, predecessor, distance, weight, index_map,
+ compare, combine, inf, zero, vis,
+ no_named_parameters());
+ }
+
namespace detail {
// Handle defaults for PredecessorMap and
// Distance Compare, Combine, Inf and Zero
template <class VertexListGraph, class DistanceMap, class WeightMap,
- class IndexMap, class Params, class ColorMap>
+ class IndexMap, class Params>
inline void
dijkstra_dispatch2
(const VertexListGraph& g,
typename graph_traits<VertexListGraph>::vertex_descriptor s,
DistanceMap distance, WeightMap weight, IndexMap index_map,
- const Params& params, ColorMap color)
+ const Params& params)
{
// Default for predecessor map
dummy_property_map p_map;
@@ -289,17 +434,17 @@
D()),
choose_param(get_param(params, graph_visitor),
make_dijkstra_visitor(null_visitor())),
- color);
+ params);
}
template <class VertexListGraph, class DistanceMap, class WeightMap,
- class IndexMap, class Params, class ColorMap>
+ class IndexMap, class Params>
inline void
dijkstra_dispatch1
(const VertexListGraph& g,
typename graph_traits<VertexListGraph>::vertex_descriptor s,
DistanceMap distance, WeightMap weight, IndexMap index_map,
- const Params& params, ColorMap color)
+ const Params& params)
{
// Default for distance map
typedef typename property_traits<WeightMap>::value_type D;
@@ -307,19 +452,11 @@
n = is_default_param(distance) ? num_vertices(g) : 1;
std::vector<D> distance_map(n);
- // Default for color map
- typename std::vector<default_color_type>::size_type
- m = is_default_param(color) ? num_vertices(g) : 1;
- std::vector<default_color_type> color_map(m);
-
detail::dijkstra_dispatch2
(g, s, choose_param(distance, make_iterator_property_map
(distance_map.begin(), index_map,
distance_map[0])),
- weight, index_map, params,
- choose_param(color, make_iterator_property_map
- (color_map.begin(), index_map,
- color_map[0])));
+ weight, index_map, params);
}
} // namespace detail
@@ -338,10 +475,13 @@
get_param(params, vertex_distance),
choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
- params,
- get_param(params, vertex_color));
+ params);
}
} // namespace boost
+#ifdef BOOST_GRAPH_USE_MPI
+# include <boost/graph/distributed/dijkstra_shortest_paths.hpp>
+#endif
+
#endif // BOOST_GRAPH_DIJKSTRA_HPP
Modified: branches/release/boost/graph/edmonds_karp_max_flow.hpp
==============================================================================
--- branches/release/boost/graph/edmonds_karp_max_flow.hpp (original)
+++ branches/release/boost/graph/edmonds_karp_max_flow.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -15,7 +15,7 @@
#include <algorithm> // for std::min and std::max
#include <boost/config.hpp>
#include <boost/pending/queue.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/filtered_graph.hpp>
Modified: branches/release/boost/graph/erdos_renyi_generator.hpp
==============================================================================
--- branches/release/boost/graph/erdos_renyi_generator.hpp (original)
+++ branches/release/boost/graph/erdos_renyi_generator.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -123,16 +123,16 @@
sorted_erdos_renyi_iterator()
: gen(), rand_vertex(0.5), n(0), allow_self_loops(false),
- src((std::numeric_limits<vertices_size_type>::max)()), tgt(0), prob(0) {}
+ src((std::numeric_limits<vertices_size_type>::max)()), tgt(0), prob(0) {}
sorted_erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n,
- double prob = 0.0,
+ double prob = 0.0,
bool allow_self_loops = false)
: gen(),
// The "1.0 - prob" in the next line is to work around a Boost.Random
// (and TR1) bug in the specification of geometric_distribution. It
// should be replaced by "prob" when the issue is fixed.
rand_vertex(1.0 - prob),
- n(n), allow_self_loops(allow_self_loops), src(0), tgt(0), prob(prob)
+ n(n), allow_self_loops(allow_self_loops), src(0), tgt(0), prob(prob)
{
this->gen.reset(new uniform_01<RandomGenerator>(gen));
@@ -182,27 +182,27 @@
vertices_size_type increment = rand_vertex(*gen);
tgt += increment;
if (is_undirected) {
- // Update src and tgt based on position of tgt
- // Basically, we want the greatest src_increment such that (in \bbQ):
- // src_increment * (src + allow_self_loops + src_increment - 1/2) <= tgt
- // The result of the LHS of this, evaluated with the computed
- // src_increment, is then subtracted from tgt
- double src_minus_half = (src + allow_self_loops) - 0.5;
- double disc = src_minus_half * src_minus_half + 2 * tgt;
- double src_increment_fp = floor(sqrt(disc) - src_minus_half);
- vertices_size_type src_increment = vertices_size_type(src_increment_fp);
- if (src + src_increment >= n) {
- src = n;
- } else {
- tgt -= (src + allow_self_loops) * src_increment +
- src_increment * (src_increment - 1) / 2;
- src += src_increment;
- }
+ // Update src and tgt based on position of tgt
+ // Basically, we want the greatest src_increment such that (in \bbQ):
+ // src_increment * (src + allow_self_loops + src_increment - 1/2) <= tgt
+ // The result of the LHS of this, evaluated with the computed
+ // src_increment, is then subtracted from tgt
+ double src_minus_half = (src + allow_self_loops) - 0.5;
+ double disc = src_minus_half * src_minus_half + 2 * tgt;
+ double src_increment_fp = floor(sqrt(disc) - src_minus_half);
+ vertices_size_type src_increment = vertices_size_type(src_increment_fp);
+ if (src + src_increment >= n) {
+ src = n;
+ } else {
+ tgt -= (src + allow_self_loops) * src_increment +
+ src_increment * (src_increment - 1) / 2;
+ src += src_increment;
+ }
} else {
- // Number of out edge positions possible from each vertex in this graph
- vertices_size_type possible_out_edges = n - (allow_self_loops ? 0 : 1);
- src += (std::min)(n - src, tgt / possible_out_edges);
- tgt %= possible_out_edges;
+ // Number of out edge positions possible from each vertex in this graph
+ vertices_size_type possible_out_edges = n - (allow_self_loops ? 0 : 1);
+ src += (std::min)(n - src, tgt / possible_out_edges);
+ tgt %= possible_out_edges;
}
// Set end of graph code so (src, tgt) will be the same as for the end
// sorted_erdos_renyi_iterator
Modified: branches/release/boost/graph/floyd_warshall_shortest.hpp
==============================================================================
--- branches/release/boost/graph/floyd_warshall_shortest.hpp (original)
+++ branches/release/boost/graph/floyd_warshall_shortest.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -29,7 +29,7 @@
#ifndef BOOST_GRAPH_FLOYD_WARSHALL_HPP
#define BOOST_GRAPH_FLOYD_WARSHALL_HPP
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/named_function_params.hpp>
#include <boost/graph/graph_concepts.hpp>
Modified: branches/release/boost/graph/fruchterman_reingold.hpp
==============================================================================
--- branches/release/boost/graph/fruchterman_reingold.hpp (original)
+++ branches/release/boost/graph/fruchterman_reingold.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,4 +1,4 @@
-// Copyright 2004 The Trustees of Indiana University.
+// Copyright 2004, 2005 The Trustees of Indiana University.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -12,13 +12,19 @@
#include <boost/config/no_tr1/cmath.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/named_function_params.hpp>
-#include <boost/graph/simple_point.hpp>
+#include <boost/graph/iteration_macros.hpp>
+#include <boost/graph/topology.hpp> // For topology concepts
#include <vector>
#include <list>
#include <algorithm> // for std::min and std::max
+#include <numeric> // for std::accumulate
+#include <cmath> // for std::sqrt and std::fabs
+#include <functional>
namespace boost {
+ bool vertex_migration = false;
+
struct square_distance_attractive_force {
template<typename Graph, typename T>
T
@@ -84,18 +90,21 @@
}
};
-template<typename Dim, typename PositionMap>
+template<typename Topology, typename PositionMap>
struct grid_force_pairs
{
+ typedef typename property_traits<PositionMap>::value_type Point;
+ BOOST_STATIC_ASSERT (Point::dimensions == 2);
+ typedef typename Topology::point_difference_type point_difference_type;
+
template<typename Graph>
explicit
- grid_force_pairs(Dim width, Dim height, PositionMap position, const Graph& g)
- : width(width), height(height), position(position)
+ grid_force_pairs(const Topology& topology,
+ const Point& origin, const point_difference_type& extent,
+ PositionMap position, const Graph& g)
+ : topology(topology), extent(extent), origin(origin), position(position)
{
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif // BOOST_NO_STDC_NAMESPACE
- two_k = Dim(2) * sqrt(width*height / num_vertices(g));
+ two_k = 2. * this->topology.volume(this->extent) / std::sqrt((double)num_vertices(g));
}
template<typename Graph, typename ApplyForce >
@@ -106,13 +115,13 @@
typedef std::list<vertex_descriptor> bucket_t;
typedef std::vector<bucket_t> buckets_t;
- std::size_t columns = std::size_t(width / two_k + Dim(1));
- std::size_t rows = std::size_t(height / two_k + Dim(1));
+ std::size_t columns = std::size_t(extent[0] / two_k + 1.);
+ std::size_t rows = std::size_t(extent[1] / two_k + 1.);
buckets_t buckets(rows * columns);
vertex_iterator v, v_end;
for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
- std::size_t column = std::size_t((position[*v].x + width / 2) / two_k);
- std::size_t row = std::size_t((position[*v].y + height / 2) / two_k);
+ std::size_t column = std::size_t((position[*v][0] + extent[0] / 2) / two_k);
+ std::size_t row = std::size_t((position[*v][1] + extent[1] / 2) / two_k);
if (column >= columns) column = columns - 1;
if (row >= rows) row = rows - 1;
@@ -143,140 +152,162 @@
// Repulse vertices in this bucket
bucket_t& other_bucket
= buckets[other_row * columns + other_column];
- for (v = other_bucket.begin(); v != other_bucket.end(); ++v)
- apply_force(*u, *v);
+ for (v = other_bucket.begin(); v != other_bucket.end(); ++v) {
+ double dist = topology.distance(position[*u], position[*v]);
+ if (dist < two_k) apply_force(*u, *v);
+ }
}
}
}
}
private:
- Dim width;
- Dim height;
+ const Topology& topology;
+ point_difference_type extent;
+ Point origin;
PositionMap position;
- Dim two_k;
+ double two_k;
};
-template<typename Dim, typename PositionMap, typename Graph>
-inline grid_force_pairs<Dim, PositionMap>
-make_grid_force_pairs(Dim width, Dim height, const PositionMap& position,
- const Graph& g)
-{ return grid_force_pairs<Dim, PositionMap>(width, height, position, g); }
+template<typename PositionMap, typename Topology, typename Graph>
+inline grid_force_pairs<Topology, PositionMap>
+make_grid_force_pairs
+ (const Topology& topology,
+ typename Topology::point_type const& origin,
+ typename Topology::point_difference_type const& extent,
+ const PositionMap& position, const Graph& g)
+{ return grid_force_pairs<Topology, PositionMap>(topology, origin, extent, position, g); }
-template<typename Graph, typename PositionMap, typename Dim>
+template<typename Graph, typename PositionMap, typename Topology>
void
-scale_graph(const Graph& g, PositionMap position,
- Dim left, Dim top, Dim right, Dim bottom)
+scale_graph(const Graph& g, PositionMap position, const Topology& topology,
+ typename Topology::point_type upper_left, typename Topology::point_type lower_right)
{
if (num_vertices(g) == 0) return;
- if (bottom > top) {
- using std::swap;
- swap(bottom, top);
- }
-
- typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+ typedef typename Topology::point_type Point;
+ typedef typename Topology::point_difference_type point_difference_type;
// Find min/max ranges
- Dim minX = position[*vertices(g).first].x, maxX = minX;
- Dim minY = position[*vertices(g).first].y, maxY = minY;
- vertex_iterator vi, vi_end;
- for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
- minX = min BOOST_PREVENT_MACRO_SUBSTITUTION (minX, position[*vi].x);
- maxX = max BOOST_PREVENT_MACRO_SUBSTITUTION (maxX, position[*vi].x);
- minY = min BOOST_PREVENT_MACRO_SUBSTITUTION (minY, position[*vi].y);
- maxY = max BOOST_PREVENT_MACRO_SUBSTITUTION (maxY, position[*vi].y);
+ Point min_point = position[*vertices(g).first], max_point = min_point;
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ min_point = topology.pointwise_min(min_point, position[v]);
+ max_point = topology.pointwise_max(max_point, position[v]);
}
+ Point old_origin = topology.move_position_toward(min_point, 0.5, max_point);
+ Point new_origin = topology.move_position_toward(upper_left, 0.5, lower_right);
+ point_difference_type old_size = topology.difference(max_point, min_point);
+ point_difference_type new_size = topology.difference(lower_right, upper_left);
+
// Scale to bounding box provided
- for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
- position[*vi].x = ((position[*vi].x - minX) / (maxX - minX))
- * (right - left) + left;
- position[*vi].y = ((position[*vi].y - minY) / (maxY - minY))
- * (top - bottom) + bottom;
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ point_difference_type relative_loc = topology.difference(position[v], old_origin);
+ relative_loc = (relative_loc / old_size) * new_size;
+ position[v] = topology.adjust(new_origin, relative_loc);
}
}
namespace detail {
- template<typename PositionMap, typename DisplacementMap,
- typename RepulsiveForce, typename Dim, typename Graph>
+ template<typename Topology>
+ void
+ maybe_jitter_point(const Topology& topology,
+ typename Topology::point_type& p1, const typename Topology::point_type& p2,
+ typename Topology::point_type origin, typename Topology::point_difference_type extent)
+ {
+ double too_close = topology.norm(extent) / 10000.;
+ if (topology.distance(p1, p2) < too_close) {
+ p1 = topology.move_position_toward(p1, 1./200, topology.random_point());
+ }
+ }
+
+ template<typename Topology, typename PositionMap, typename DisplacementMap,
+ typename RepulsiveForce, typename Graph>
struct fr_apply_force
{
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+ typedef typename Topology::point_type Point;
+ typedef typename Topology::point_difference_type PointDiff;
- fr_apply_force(const PositionMap& position,
+ fr_apply_force(const Topology& topology,
+ const PositionMap& position,
const DisplacementMap& displacement,
- RepulsiveForce repulsive_force, Dim k, const Graph& g)
- : position(position), displacement(displacement),
- repulsive_force(repulsive_force), k(k), g(g)
+ Point origin, PointDiff extent,
+ RepulsiveForce repulsive_force, double k, const Graph& g)
+ : topology(topology), position(position), displacement(displacement), origin(origin),
+ extent(extent), repulsive_force(repulsive_force), k(k), g(g)
{ }
void operator()(vertex_descriptor u, vertex_descriptor v)
{
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif // BOOST_NO_STDC_NAMESPACE
if (u != v) {
- Dim delta_x = position[v].x - position[u].x;
- Dim delta_y = position[v].y - position[u].y;
- Dim dist = sqrt(delta_x * delta_x + delta_y * delta_y);
- Dim fr = repulsive_force(u, v, k, dist, g);
- displacement[v].x += delta_x / dist * fr;
- displacement[v].y += delta_y / dist * fr;
+ // When the vertices land on top of each other, move the
+ // first vertex away from the boundaries.
+ maybe_jitter_point(topology, position[u], position[v], origin, extent);
+
+ double dist = topology.distance(position[u], position[v]);
+ if (dist == 0.) {
+ for (std::size_t i = 0; i < Point::dimensions; ++i) {
+ displacement[v][i] += 0.01;
+ }
+ } else {
+ double fr = repulsive_force(u, v, k, dist, g);
+ typename Topology::point_difference_type dispv = displacement[v];
+ dispv += (fr / dist) * topology.difference(position[v], position[u]);
+ }
}
}
private:
+ const Topology& topology;
PositionMap position;
DisplacementMap displacement;
+ Point origin;
+ PointDiff extent;
RepulsiveForce repulsive_force;
- Dim k;
+ double k;
const Graph& g;
};
} // end namespace detail
-template<typename Graph, typename PositionMap, typename Dim,
+template<typename Topology, typename Graph, typename PositionMap,
typename AttractiveForce, typename RepulsiveForce,
typename ForcePairs, typename Cooling, typename DisplacementMap>
void
fruchterman_reingold_force_directed_layout
(const Graph& g,
PositionMap position,
- Dim width,
- Dim height,
+ const Topology& topology,
+ typename Topology::point_type const& origin,
+ typename Topology::point_difference_type const& extent,
AttractiveForce attractive_force,
RepulsiveForce repulsive_force,
ForcePairs force_pairs,
Cooling cool,
DisplacementMap displacement)
{
+ typedef typename Topology::point_type Point;
typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename graph_traits<Graph>::edge_iterator edge_iterator;
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif // BOOST_NO_STDC_NAMESPACE
+ double volume = 1.;
+ for (std::size_t i = 0; i < Topology::point_difference_type::dimensions; ++i)
+ volume *= extent[i];
- Dim area = width * height;
// assume positions are initialized randomly
- Dim k = sqrt(area / num_vertices(g));
+ double k = pow(volume / num_vertices(g), 1. / (double)(Topology::point_difference_type::dimensions));
- detail::fr_apply_force<PositionMap, DisplacementMap,
- RepulsiveForce, Dim, Graph>
- apply_force(position, displacement, repulsive_force, k, g);
+ detail::fr_apply_force<Topology, PositionMap, DisplacementMap,
+ RepulsiveForce, Graph>
+ apply_force(topology, position, displacement, origin, extent, repulsive_force, k, g);
- Dim temp = cool();
- if (temp) do {
+ do {
// Calculate repulsive forces
vertex_iterator v, v_end;
- for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
- displacement[*v].x = 0;
- displacement[*v].y = 0;
- }
+ for (tie(v, v_end) = vertices(g); v != v_end; ++v)
+ displacement[*v] = typename Topology::point_difference_type();
force_pairs(g, apply_force);
// Calculate attractive forces
@@ -284,52 +315,56 @@
for (tie(e, e_end) = edges(g); e != e_end; ++e) {
vertex_descriptor v = source(*e, g);
vertex_descriptor u = target(*e, g);
- Dim delta_x = position[v].x - position[u].x;
- Dim delta_y = position[v].y - position[u].y;
- Dim dist = sqrt(delta_x * delta_x + delta_y * delta_y);
- Dim fa = attractive_force(*e, k, dist, g);
-
- displacement[v].x -= delta_x / dist * fa;
- displacement[v].y -= delta_y / dist * fa;
- displacement[u].x += delta_x / dist * fa;
- displacement[u].y += delta_y / dist * fa;
+
+ // When the vertices land on top of each other, move the
+ // first vertex away from the boundaries.
+ ::boost::detail::maybe_jitter_point(topology, position[u], position[v],
+ origin, extent);
+
+ typename Topology::point_difference_type delta = topology.difference(position[v], position[u]);
+ double dist = topology.distance(position[u], position[v]);
+ double fa = attractive_force(*e, k, dist, g);
+
+ displacement[v] -= (fa / dist) * delta;
+ displacement[u] += (fa / dist) * delta;
}
- // Update positions
- for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
- Dim disp_size = sqrt(displacement[*v].x * displacement[*v].x
- + displacement[*v].y * displacement[*v].y);
- position[*v].x += displacement[*v].x / disp_size
- * min BOOST_PREVENT_MACRO_SUBSTITUTION (disp_size, temp);
- position[*v].y += displacement[*v].y / disp_size
- * min BOOST_PREVENT_MACRO_SUBSTITUTION (disp_size, temp);
- position[*v].x = min BOOST_PREVENT_MACRO_SUBSTITUTION
- (width / 2,
- max BOOST_PREVENT_MACRO_SUBSTITUTION(-width / 2,
- position[*v].x));
- position[*v].y = min BOOST_PREVENT_MACRO_SUBSTITUTION
- (height / 2,
- max BOOST_PREVENT_MACRO_SUBSTITUTION(-height / 2,
- position[*v].y));
+ if (double temp = cool()) {
+ // Update positions
+ BGL_FORALL_VERTICES_T (v, g, Graph) {
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ double disp_size = topology.norm(displacement[v]);
+ position[v] = topology.adjust(position[v], displacement[v] * (min BOOST_PREVENT_MACRO_SUBSTITUTION (disp_size, temp) / disp_size));
+ position[v] = topology.bound(position[v]);
+#if 0
+ // CEM HACK: Jitter if we're on the edges
+ if(position[v].x == 1.0f) // origin.x + extent.x)
+ position[v].x -= drand48() * .1 * extent.x;
+ else if(position[v].x == -1.0f) // origin.x)
+ position[v].x += drand48() * .1 * extent.x;
+#endif
+ }
+ } else {
+ break;
}
- } while ((temp = cool()));
+ } while (true);
}
namespace detail {
template<typename DisplacementMap>
struct fr_force_directed_layout
{
- template<typename Graph, typename PositionMap, typename Dim,
+ template<typename Topology, typename Graph, typename PositionMap,
typename AttractiveForce, typename RepulsiveForce,
typename ForcePairs, typename Cooling,
typename Param, typename Tag, typename Rest>
static void
run(const Graph& g,
PositionMap position,
- Dim width,
- Dim height,
+ const Topology& topology,
+ typename Topology::point_type const& origin,
+ typename Topology::point_difference_type const& extent,
AttractiveForce attractive_force,
RepulsiveForce repulsive_force,
ForcePairs force_pairs,
@@ -338,7 +373,7 @@
const bgl_named_params<Param, Tag, Rest>&)
{
fruchterman_reingold_force_directed_layout
- (g, position, width, height, attractive_force, repulsive_force,
+ (g, position, topology, origin, extent, attractive_force, repulsive_force,
force_pairs, cool, displacement);
}
};
@@ -346,15 +381,16 @@
template<>
struct fr_force_directed_layout<error_property_not_found>
{
- template<typename Graph, typename PositionMap, typename Dim,
+ template<typename Topology, typename Graph, typename PositionMap,
typename AttractiveForce, typename RepulsiveForce,
typename ForcePairs, typename Cooling,
typename Param, typename Tag, typename Rest>
static void
run(const Graph& g,
PositionMap position,
- Dim width,
- Dim height,
+ const Topology& topology,
+ typename Topology::point_type const& origin,
+ typename Topology::point_difference_type const& extent,
AttractiveForce attractive_force,
RepulsiveForce repulsive_force,
ForcePairs force_pairs,
@@ -362,59 +398,67 @@
error_property_not_found,
const bgl_named_params<Param, Tag, Rest>& params)
{
- std::vector<simple_point<Dim> > displacements(num_vertices(g));
+ typedef typename Topology::point_difference_type PointDiff;
+ std::vector<PointDiff> displacements(num_vertices(g));
fruchterman_reingold_force_directed_layout
- (g, position, width, height, attractive_force, repulsive_force,
+ (g, position, topology, origin, extent, attractive_force, repulsive_force,
force_pairs, cool,
make_iterator_property_map
(displacements.begin(),
choose_const_pmap(get_param(params, vertex_index), g,
vertex_index),
- simple_point<Dim>()));
+ PointDiff()));
}
};
} // end namespace detail
-template<typename Graph, typename PositionMap, typename Dim, typename Param,
+template<typename Topology, typename Graph, typename PositionMap, typename Param,
typename Tag, typename Rest>
void
fruchterman_reingold_force_directed_layout
(const Graph& g,
PositionMap position,
- Dim width,
- Dim height,
+ const Topology& topology,
+ typename Topology::point_type const& origin,
+ typename Topology::point_difference_type const& extent,
const bgl_named_params<Param, Tag, Rest>& params)
{
typedef typename property_value<bgl_named_params<Param,Tag,Rest>,
vertex_displacement_t>::type D;
detail::fr_force_directed_layout<D>::run
- (g, position, width, height,
+ (g, position, topology, origin, extent,
choose_param(get_param(params, attractive_force_t()),
square_distance_attractive_force()),
choose_param(get_param(params, repulsive_force_t()),
square_distance_repulsive_force()),
choose_param(get_param(params, force_pairs_t()),
- make_grid_force_pairs(width, height, position, g)),
+ make_grid_force_pairs(topology, origin, extent, position, g)),
choose_param(get_param(params, cooling_t()),
- linear_cooling<Dim>(100)),
+ linear_cooling<double>(100)),
get_param(params, vertex_displacement_t()),
params);
}
-template<typename Graph, typename PositionMap, typename Dim>
+template<typename Topology, typename Graph, typename PositionMap>
void
-fruchterman_reingold_force_directed_layout(const Graph& g,
- PositionMap position,
- Dim width,
- Dim height)
+fruchterman_reingold_force_directed_layout
+ (const Graph& g,
+ PositionMap position,
+ const Topology& topology,
+ typename Topology::point_type const& origin,
+ typename Topology::point_difference_type const& extent)
{
fruchterman_reingold_force_directed_layout
- (g, position, width, height,
+ (g, position, topology, origin, extent,
attractive_force(square_distance_attractive_force()));
}
} // end namespace boost
+#ifdef BOOST_GRAPH_USE_MPI
+# include <boost/graph/distributed/fruchterman_reingold.hpp>
+#endif
+
#endif // BOOST_GRAPH_FRUCHTERMAN_REINGOLD_FORCE_DIRECTED_LAYOUT_HPP
Modified: branches/release/boost/graph/graph_archetypes.hpp
==============================================================================
--- branches/release/boost/graph/graph_archetypes.hpp (original)
+++ branches/release/boost/graph/graph_archetypes.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -10,7 +10,7 @@
#ifndef BOOST_GRAPH_ARCHETYPES_HPP
#define BOOST_GRAPH_ARCHETYPES_HPP
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/concept_archetype.hpp>
namespace boost { // should use a different namespace for this
Modified: branches/release/boost/graph/graph_as_tree.hpp
==============================================================================
--- branches/release/boost/graph/graph_as_tree.hpp (original)
+++ branches/release/boost/graph/graph_as_tree.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -13,7 +13,7 @@
#include <vector>
#include <boost/config.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/tree_traits.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/breadth_first_search.hpp>
Modified: branches/release/boost/graph/graph_concepts.hpp
==============================================================================
--- branches/release/boost/graph/graph_concepts.hpp (original)
+++ branches/release/boost/graph/graph_concepts.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -3,6 +3,8 @@
// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
//
+// Copyright 2009, Andrew Sutton
+//
// 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)
@@ -12,14 +14,14 @@
#define BOOST_GRAPH_CONCEPTS_HPP
#include <boost/config.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
#include <boost/graph/properties.hpp>
+#include <boost/graph/numeric_values.hpp>
#include <boost/concept_check.hpp>
#include <boost/detail/workaround.hpp>
#include <boost/concept/detail/concept_def.hpp>
-
namespace boost
{
// dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
@@ -34,477 +36,591 @@
&& !BOOST_WORKAROUND(__GNUC__, <= 2) \
&& !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
# define BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
-#endif
+#endif
#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
template <class T>
typename T::ThereReallyIsNoMemberByThisNameInT vertices(T const&);
-#endif
+#endif
+
+ namespace concepts {
+ BOOST_concept(MultiPassInputIterator,(T)) {
+ BOOST_CONCEPT_USAGE(MultiPassInputIterator) {
+ BOOST_CONCEPT_ASSERT((InputIterator<T>));
+ }
+ };
+
+ BOOST_concept(Graph,(G))
+ {
+ typedef typename graph_traits<G>::vertex_descriptor vertex_descriptor;
+ typedef typename graph_traits<G>::directed_category directed_category;
+ typedef typename graph_traits<G>::edge_parallel_category
+ edge_parallel_category;
+
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+
+ BOOST_CONCEPT_USAGE(Graph)
+ {
+ BOOST_CONCEPT_ASSERT((DefaultConstructible<vertex_descriptor>));
+ BOOST_CONCEPT_ASSERT((EqualityComparable<vertex_descriptor>));
+ BOOST_CONCEPT_ASSERT((Assignable<vertex_descriptor>));
+ }
+ G g;
+ };
+
+ BOOST_concept(IncidenceGraph,(G))
+ : Graph<G>
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ typedef typename graph_traits<G>::out_edge_iterator
+ out_edge_iterator;
+
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+
+ BOOST_CONCEPT_USAGE(IncidenceGraph) {
+ BOOST_CONCEPT_ASSERT((MultiPassInputIterator<out_edge_iterator>));
+ BOOST_CONCEPT_ASSERT((DefaultConstructible<edge_descriptor>));
+ BOOST_CONCEPT_ASSERT((EqualityComparable<edge_descriptor>));
+ BOOST_CONCEPT_ASSERT((Assignable<edge_descriptor>));
+ BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
+ incidence_graph_tag>));
+
+ p = out_edges(u, g);
+ n = out_degree(u, g);
+ e = *p.first;
+ u = source(e, g);
+ v = target(e, g);
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = out_edges(u, cg);
+ n = out_degree(u, cg);
+ e = *p.first;
+ u = source(e, cg);
+ v = target(e, cg);
+ }
+ std::pair<out_edge_iterator, out_edge_iterator> p;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ typename graph_traits<G>::edge_descriptor e;
+ typename graph_traits<G>::degree_size_type n;
+ G g;
+ };
+
+ BOOST_concept(BidirectionalGraph,(G))
+ : IncidenceGraph<G>
+ {
+ typedef typename graph_traits<G>::in_edge_iterator
+ in_edge_iterator;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+
+ BOOST_CONCEPT_USAGE(BidirectionalGraph) {
+ BOOST_CONCEPT_ASSERT((MultiPassInputIterator<in_edge_iterator>));
+ BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
+ bidirectional_graph_tag>));
+
+ p = in_edges(v, g);
+ n = in_degree(v, g);
+ e = *p.first;
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = in_edges(v, cg);
+ n = in_degree(v, cg);
+ e = *p.first;
+ }
+ std::pair<in_edge_iterator, in_edge_iterator> p;
+ typename graph_traits<G>::vertex_descriptor v;
+ typename graph_traits<G>::edge_descriptor e;
+ typename graph_traits<G>::degree_size_type n;
+ G g;
+ };
+
+ BOOST_concept(AdjacencyGraph,(G))
+ : Graph<G>
+ {
+ typedef typename graph_traits<G>::adjacency_iterator
+ adjacency_iterator;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+
+ BOOST_CONCEPT_USAGE(AdjacencyGraph) {
+ BOOST_CONCEPT_ASSERT((MultiPassInputIterator<adjacency_iterator>));
+ BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
+ adjacency_graph_tag>));
+
+ p = adjacent_vertices(v, g);
+ v = *p.first;
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = adjacent_vertices(v, cg);
+ }
+ std::pair<adjacency_iterator,adjacency_iterator> p;
+ typename graph_traits<G>::vertex_descriptor v;
+ G g;
+ };
- namespace concepts {
- BOOST_concept(MultiPassInputIterator,(T)) {
- BOOST_CONCEPT_USAGE(MultiPassInputIterator) {
- BOOST_CONCEPT_ASSERT((InputIterator<T>));
- }
- };
-
- BOOST_concept(Graph,(G))
- {
- typedef typename graph_traits<G>::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits<G>::directed_category directed_category;
- typedef typename graph_traits<G>::edge_parallel_category
- edge_parallel_category;
-
- typedef typename graph_traits<G>::traversal_category
- traversal_category;
-
- BOOST_CONCEPT_USAGE(Graph)
- {
- BOOST_CONCEPT_ASSERT((DefaultConstructible<vertex_descriptor>));
- BOOST_CONCEPT_ASSERT((EqualityComparable<vertex_descriptor>));
- BOOST_CONCEPT_ASSERT((Assignable<vertex_descriptor>));
- }
- G g;
- };
-
- BOOST_concept(IncidenceGraph,(G))
- : Graph<G>
- {
- typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
- typedef typename graph_traits<G>::out_edge_iterator
- out_edge_iterator;
-
- typedef typename graph_traits<G>::traversal_category
- traversal_category;
-
- BOOST_CONCEPT_USAGE(IncidenceGraph) {
- BOOST_CONCEPT_ASSERT((MultiPassInputIterator<out_edge_iterator>));
- BOOST_CONCEPT_ASSERT((DefaultConstructible<edge_descriptor>));
- BOOST_CONCEPT_ASSERT((EqualityComparable<edge_descriptor>));
- BOOST_CONCEPT_ASSERT((Assignable<edge_descriptor>));
- BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
- incidence_graph_tag>));
-
- p = out_edges(u, g);
- n = out_degree(u, g);
- e = *p.first;
- u = source(e, g);
- v = target(e, g);
- const_constraints(g);
- }
- void const_constraints(const G& cg) {
- p = out_edges(u, cg);
- n = out_degree(u, cg);
- e = *p.first;
- u = source(e, cg);
- v = target(e, cg);
- }
- std::pair<out_edge_iterator, out_edge_iterator> p;
- typename graph_traits<G>::vertex_descriptor u, v;
- typename graph_traits<G>::edge_descriptor e;
- typename graph_traits<G>::degree_size_type n;
- G g;
- };
-
- BOOST_concept(BidirectionalGraph,(G))
- : IncidenceGraph<G>
- {
- typedef typename graph_traits<G>::in_edge_iterator
- in_edge_iterator;
- typedef typename graph_traits<G>::traversal_category
- traversal_category;
-
- BOOST_CONCEPT_USAGE(BidirectionalGraph) {
- BOOST_CONCEPT_ASSERT((MultiPassInputIterator<in_edge_iterator>));
- BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
- bidirectional_graph_tag>));
-
- p = in_edges(v, g);
- n = in_degree(v, g);
- e = *p.first;
- const_constraints(g);
- }
- void const_constraints(const G& cg) {
- p = in_edges(v, cg);
- n = in_degree(v, cg);
- e = *p.first;
- }
- std::pair<in_edge_iterator, in_edge_iterator> p;
- typename graph_traits<G>::vertex_descriptor v;
- typename graph_traits<G>::edge_descriptor e;
- typename graph_traits<G>::degree_size_type n;
- G g;
- };
-
- BOOST_concept(AdjacencyGraph,(G))
- : Graph<G>
- {
- typedef typename graph_traits<G>::adjacency_iterator
- adjacency_iterator;
- typedef typename graph_traits<G>::traversal_category
- traversal_category;
-
- BOOST_CONCEPT_USAGE(AdjacencyGraph) {
- BOOST_CONCEPT_ASSERT((MultiPassInputIterator<adjacency_iterator>));
- BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
- adjacency_graph_tag>));
-
- p = adjacent_vertices(v, g);
- v = *p.first;
- const_constraints(g);
- }
- void const_constraints(const G& cg) {
- p = adjacent_vertices(v, cg);
- }
- std::pair<adjacency_iterator,adjacency_iterator> p;
- typename graph_traits<G>::vertex_descriptor v;
- G g;
- };
-
- BOOST_concept(VertexListGraph,(G))
- : Graph<G>
- {
- typedef typename graph_traits<G>::vertex_iterator vertex_iterator;
- typedef typename graph_traits<G>::vertices_size_type vertices_size_type;
- typedef typename graph_traits<G>::traversal_category
- traversal_category;
-
- BOOST_CONCEPT_USAGE(VertexListGraph) {
- BOOST_CONCEPT_ASSERT((MultiPassInputIterator<vertex_iterator>));
- BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
- vertex_list_graph_tag>));
+ BOOST_concept(VertexListGraph,(G))
+ : Graph<G>
+ {
+ typedef typename graph_traits<G>::vertex_iterator vertex_iterator;
+ typedef typename graph_traits<G>::vertices_size_type vertices_size_type;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+
+ BOOST_CONCEPT_USAGE(VertexListGraph) {
+ BOOST_CONCEPT_ASSERT((MultiPassInputIterator<vertex_iterator>));
+ BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
+ vertex_list_graph_tag>));
#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
- // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
- // you want to use vector_as_graph, it is! I'm sure the graph
- // library leaves these out all over the place. Probably a
- // redesign involving specializing a template with a static
- // member function is in order :(
- using boost::vertices;
-#endif
- p = vertices(g);
- v = *p.first;
- const_constraints(g);
- }
- void const_constraints(const G& cg) {
+ // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
+ // you want to use vector_as_graph, it is! I'm sure the graph
+ // library leaves these out all over the place. Probably a
+ // redesign involving specializing a template with a static
+ // member function is in order :(
+ using boost::vertices;
+#endif
+ p = vertices(g);
+ v = *p.first;
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
- // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
- // you want to use vector_as_graph, it is! I'm sure the graph
- // library leaves these out all over the place. Probably a
- // redesign involving specializing a template with a static
- // member function is in order :(
- using boost::vertices;
-#endif
-
- p = vertices(cg);
- v = *p.first;
- V = num_vertices(cg);
- }
- std::pair<vertex_iterator,vertex_iterator> p;
- typename graph_traits<G>::vertex_descriptor v;
- G g;
- vertices_size_type V;
- };
-
- BOOST_concept(EdgeListGraph,(G))
- : Graph<G>
- {
- typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
- typedef typename graph_traits<G>::edge_iterator edge_iterator;
- typedef typename graph_traits<G>::edges_size_type edges_size_type;
- typedef typename graph_traits<G>::traversal_category
- traversal_category;
-
- BOOST_CONCEPT_USAGE(EdgeListGraph) {
- BOOST_CONCEPT_ASSERT((MultiPassInputIterator<edge_iterator>));
- BOOST_CONCEPT_ASSERT((DefaultConstructible<edge_descriptor>));
- BOOST_CONCEPT_ASSERT((EqualityComparable<edge_descriptor>));
- BOOST_CONCEPT_ASSERT((Assignable<edge_descriptor>));
- BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
- edge_list_graph_tag>));
-
- p = edges(g);
- e = *p.first;
- u = source(e, g);
- v = target(e, g);
- const_constraints(g);
- }
- void const_constraints(const G& cg) {
- p = edges(cg);
- E = num_edges(cg);
- e = *p.first;
- u = source(e, cg);
- v = target(e, cg);
- }
- std::pair<edge_iterator,edge_iterator> p;
- typename graph_traits<G>::vertex_descriptor u, v;
- typename graph_traits<G>::edge_descriptor e;
- edges_size_type E;
- G g;
- };
-
- BOOST_concept(VertexAndEdgeListGraph,(G))
- : VertexListGraph<G>
- , EdgeListGraph<G>
- {
- };
-
- // Where to put the requirement for this constructor?
- // G g(n_vertices);
- // Not in mutable graph, then LEDA graph's can't be models of
- // MutableGraph.
-
- BOOST_concept(EdgeMutableGraph,(G))
- {
- typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
-
- BOOST_CONCEPT_USAGE(EdgeMutableGraph) {
- p = add_edge(u, v, g);
- remove_edge(u, v, g);
- remove_edge(e, g);
- clear_vertex(v, g);
- }
- G g;
- edge_descriptor e;
- std::pair<edge_descriptor, bool> p;
- typename graph_traits<G>::vertex_descriptor u, v;
- };
-
- BOOST_concept(VertexMutableGraph,(G))
- {
-
- BOOST_CONCEPT_USAGE(VertexMutableGraph) {
- v = add_vertex(g);
- remove_vertex(v, g);
- }
- G g;
- typename graph_traits<G>::vertex_descriptor u, v;
- };
-
- BOOST_concept(MutableGraph,(G))
- : EdgeMutableGraph<G>
- , VertexMutableGraph<G>
- {
- };
-
- template <class edge_descriptor>
- struct dummy_edge_predicate {
- bool operator()(const edge_descriptor&) const {
- return false;
- }
- };
-
- BOOST_concept(MutableIncidenceGraph,(G))
- : MutableGraph<G>
- {
- BOOST_CONCEPT_USAGE(MutableIncidenceGraph) {
- remove_edge(iter, g);
- remove_out_edge_if(u, p, g);
- }
- G g;
- typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
- dummy_edge_predicate<edge_descriptor> p;
- typename boost::graph_traits<G>::vertex_descriptor u;
- typename boost::graph_traits<G>::out_edge_iterator iter;
- };
-
- BOOST_concept(MutableBidirectionalGraph,(G))
- : MutableIncidenceGraph<G>
- {
- BOOST_CONCEPT_USAGE(MutableBidirectionalGraph)
- {
- remove_in_edge_if(u, p, g);
- }
- G g;
- typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
- dummy_edge_predicate<edge_descriptor> p;
- typename boost::graph_traits<G>::vertex_descriptor u;
- };
-
- BOOST_concept(MutableEdgeListGraph,(G))
- : EdgeMutableGraph<G>
- {
- BOOST_CONCEPT_USAGE(MutableEdgeListGraph) {
- remove_edge_if(p, g);
- }
- G g;
- typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
- dummy_edge_predicate<edge_descriptor> p;
- };
-
- BOOST_concept(VertexMutablePropertyGraph,(G))
- : VertexMutableGraph<G>
- {
- BOOST_CONCEPT_USAGE(VertexMutablePropertyGraph) {
- v = add_vertex(vp, g);
- }
- G g;
- typename graph_traits<G>::vertex_descriptor v;
- typename vertex_property<G>::type vp;
- };
-
- BOOST_concept(EdgeMutablePropertyGraph,(G))
- : EdgeMutableGraph<G>
- {
- typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
-
- BOOST_CONCEPT_USAGE(EdgeMutablePropertyGraph) {
- p = add_edge(u, v, ep, g);
- }
- G g;
- std::pair<edge_descriptor, bool> p;
- typename graph_traits<G>::vertex_descriptor u, v;
- typename edge_property<G>::type ep;
- };
-
- BOOST_concept(AdjacencyMatrix,(G))
- : Graph<G>
- {
- typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
-
- BOOST_CONCEPT_USAGE(AdjacencyMatrix) {
- p = edge(u, v, g);
- const_constraints(g);
- }
- void const_constraints(const G& cg) {
- p = edge(u, v, cg);
- }
- typename graph_traits<G>::vertex_descriptor u, v;
- std::pair<edge_descriptor, bool> p;
- G g;
- };
-
- BOOST_concept(ReadablePropertyGraph,(G)(X)(Property))
- : Graph<G>
- {
- typedef typename property_map<G, Property>::const_type const_Map;
-
- BOOST_CONCEPT_USAGE(ReadablePropertyGraph)
- {
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept<const_Map, X>));
-
- const_constraints(g);
- }
- void const_constraints(const G& cg) {
- const_Map pmap = get(Property(), cg);
- pval = get(Property(), cg, x);
- ignore_unused_variable_warning(pmap);
- }
- G g;
- X x;
- typename property_traits<const_Map>::value_type pval;
- };
-
- BOOST_concept(PropertyGraph,(G)(X)(Property))
- : ReadablePropertyGraph<G, X, Property>
- {
- typedef typename property_map<G, Property>::type Map;
- BOOST_CONCEPT_USAGE(PropertyGraph) {
- BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept<Map, X>));
-
- Map pmap = get(Property(), g);
- pval = get(Property(), g, x);
- put(Property(), g, x, pval);
- ignore_unused_variable_warning(pmap);
- }
- G g;
- X x;
- typename property_traits<Map>::value_type pval;
- };
-
- BOOST_concept(LvaluePropertyGraph,(G)(X)(Property))
- : ReadablePropertyGraph<G, X, Property>
- {
- typedef typename property_map<G, Property>::type Map;
- typedef typename property_map<G, Property>::const_type const_Map;
-
- BOOST_CONCEPT_USAGE(LvaluePropertyGraph) {
- BOOST_CONCEPT_ASSERT((LvaluePropertyMapConcept<const_Map, X>));
-
- pval = get(Property(), g, x);
- put(Property(), g, x, pval);
- }
- G g;
- X x;
- typename property_traits<Map>::value_type pval;
- };
-
- // This needs to move out of the graph library
- BOOST_concept(Buffer,(B))
- {
- BOOST_CONCEPT_USAGE(Buffer) {
- b.push(t);
- b.pop();
- typename B::value_type& v = b.top();
- const_constraints(b);
- ignore_unused_variable_warning(v);
- }
- void const_constraints(const B& cb) {
- const typename B::value_type& v = cb.top();
- n = cb.size();
- bool e = cb.empty();
- ignore_unused_variable_warning(v);
- ignore_unused_variable_warning(e);
- }
- typename B::size_type n;
- typename B::value_type t;
- B b;
- };
-
- BOOST_concept(ColorValue,(C))
- : EqualityComparable<C>
- , DefaultConstructible<C>
- {
- BOOST_CONCEPT_USAGE(ColorValue) {
- c = color_traits<C>::white();
- c = color_traits<C>::gray();
- c = color_traits<C>::black();
- }
- C c;
- };
-
- BOOST_concept(BasicMatrix,(M)(I)(V))
- {
- BOOST_CONCEPT_USAGE(BasicMatrix) {
- V& elt = A[i][j];
- const_constraints(A);
- ignore_unused_variable_warning(elt);
- }
- void const_constraints(const M& cA) {
- const V& elt = cA[i][j];
- ignore_unused_variable_warning(elt);
- }
- M A;
- I i, j;
- };
-
- } // end namespace concepts
-
- using boost::concepts::MultiPassInputIteratorConcept;
- using boost::concepts::GraphConcept;
- using boost::concepts::IncidenceGraphConcept;
- using boost::concepts::BidirectionalGraphConcept;
- using boost::concepts::AdjacencyGraphConcept;
- using boost::concepts::VertexListGraphConcept;
- using boost::concepts::EdgeListGraphConcept;
- using boost::concepts::VertexAndEdgeListGraphConcept;
- using boost::concepts::EdgeMutableGraphConcept;
- using boost::concepts::VertexMutableGraphConcept;
- using boost::concepts::MutableGraphConcept;
- using boost::concepts::MutableIncidenceGraphConcept;
- using boost::concepts::MutableBidirectionalGraphConcept;
- using boost::concepts::MutableEdgeListGraphConcept;
- using boost::concepts::VertexMutablePropertyGraphConcept;
- using boost::concepts::EdgeMutablePropertyGraphConcept;
- using boost::concepts::AdjacencyMatrixConcept;
- using boost::concepts::ReadablePropertyGraphConcept;
- using boost::concepts::PropertyGraphConcept;
- using boost::concepts::LvaluePropertyGraphConcept;
- using boost::concepts::BufferConcept;
- using boost::concepts::ColorValueConcept;
- using boost::concepts::BasicMatrixConcept;
-} // namespace boost
+ // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
+ // you want to use vector_as_graph, it is! I'm sure the graph
+ // library leaves these out all over the place. Probably a
+ // redesign involving specializing a template with a static
+ // member function is in order :(
+ using boost::vertices;
+#endif
+
+ p = vertices(cg);
+ v = *p.first;
+ V = num_vertices(cg);
+ }
+ std::pair<vertex_iterator,vertex_iterator> p;
+ typename graph_traits<G>::vertex_descriptor v;
+ G g;
+ vertices_size_type V;
+ };
+
+ BOOST_concept(EdgeListGraph,(G))
+ : Graph<G>
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ typedef typename graph_traits<G>::edge_iterator edge_iterator;
+ typedef typename graph_traits<G>::edges_size_type edges_size_type;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+
+ BOOST_CONCEPT_USAGE(EdgeListGraph) {
+ BOOST_CONCEPT_ASSERT((MultiPassInputIterator<edge_iterator>));
+ BOOST_CONCEPT_ASSERT((DefaultConstructible<edge_descriptor>));
+ BOOST_CONCEPT_ASSERT((EqualityComparable<edge_descriptor>));
+ BOOST_CONCEPT_ASSERT((Assignable<edge_descriptor>));
+ BOOST_CONCEPT_ASSERT((Convertible<traversal_category,
+ edge_list_graph_tag>));
+
+ p = edges(g);
+ e = *p.first;
+ u = source(e, g);
+ v = target(e, g);
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = edges(cg);
+ E = num_edges(cg);
+ e = *p.first;
+ u = source(e, cg);
+ v = target(e, cg);
+ }
+ std::pair<edge_iterator,edge_iterator> p;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ typename graph_traits<G>::edge_descriptor e;
+ edges_size_type E;
+ G g;
+ };
+
+ BOOST_concept(VertexAndEdgeListGraph,(G))
+ : VertexListGraph<G>
+ , EdgeListGraph<G>
+ {
+ };
+
+ // Where to put the requirement for this constructor?
+ // G g(n_vertices);
+ // Not in mutable graph, then LEDA graph's can't be models of
+ // MutableGraph.
+ BOOST_concept(EdgeMutableGraph,(G))
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+
+ BOOST_CONCEPT_USAGE(EdgeMutableGraph) {
+ p = add_edge(u, v, g);
+ remove_edge(u, v, g);
+ remove_edge(e, g);
+ clear_vertex(v, g);
+ }
+ G g;
+ edge_descriptor e;
+ std::pair<edge_descriptor, bool> p;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ };
+
+ BOOST_concept(VertexMutableGraph,(G))
+ {
+
+ BOOST_CONCEPT_USAGE(VertexMutableGraph) {
+ v = add_vertex(g);
+ remove_vertex(v, g);
+ }
+ G g;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ };
+
+ BOOST_concept(MutableGraph,(G))
+ : EdgeMutableGraph<G>
+ , VertexMutableGraph<G>
+ {
+ };
+
+ template <class edge_descriptor>
+ struct dummy_edge_predicate {
+ bool operator()(const edge_descriptor&) const {
+ return false;
+ }
+ };
+
+ BOOST_concept(MutableIncidenceGraph,(G))
+ : MutableGraph<G>
+ {
+ BOOST_CONCEPT_USAGE(MutableIncidenceGraph) {
+ remove_edge(iter, g);
+ remove_out_edge_if(u, p, g);
+ }
+ G g;
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ dummy_edge_predicate<edge_descriptor> p;
+ typename boost::graph_traits<G>::vertex_descriptor u;
+ typename boost::graph_traits<G>::out_edge_iterator iter;
+ };
+
+ BOOST_concept(MutableBidirectionalGraph,(G))
+ : MutableIncidenceGraph<G>
+ {
+ BOOST_CONCEPT_USAGE(MutableBidirectionalGraph)
+ {
+ remove_in_edge_if(u, p, g);
+ }
+ G g;
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ dummy_edge_predicate<edge_descriptor> p;
+ typename boost::graph_traits<G>::vertex_descriptor u;
+ };
+
+ BOOST_concept(MutableEdgeListGraph,(G))
+ : EdgeMutableGraph<G>
+ {
+ BOOST_CONCEPT_USAGE(MutableEdgeListGraph) {
+ remove_edge_if(p, g);
+ }
+ G g;
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ dummy_edge_predicate<edge_descriptor> p;
+ };
+
+ BOOST_concept(VertexMutablePropertyGraph,(G))
+ : VertexMutableGraph<G>
+ {
+ BOOST_CONCEPT_USAGE(VertexMutablePropertyGraph) {
+ v = add_vertex(vp, g);
+ }
+ G g;
+ typename graph_traits<G>::vertex_descriptor v;
+ typename vertex_property<G>::type vp;
+ };
+
+ BOOST_concept(EdgeMutablePropertyGraph,(G))
+ : EdgeMutableGraph<G>
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+
+ BOOST_CONCEPT_USAGE(EdgeMutablePropertyGraph) {
+ p = add_edge(u, v, ep, g);
+ }
+ G g;
+ std::pair<edge_descriptor, bool> p;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ typename edge_property<G>::type ep;
+ };
+
+ BOOST_concept(AdjacencyMatrix,(G))
+ : Graph<G>
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+
+ BOOST_CONCEPT_USAGE(AdjacencyMatrix) {
+ p = edge(u, v, g);
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = edge(u, v, cg);
+ }
+ typename graph_traits<G>::vertex_descriptor u, v;
+ std::pair<edge_descriptor, bool> p;
+ G g;
+ };
+
+ BOOST_concept(ReadablePropertyGraph,(G)(X)(Property))
+ : Graph<G>
+ {
+ typedef typename property_map<G, Property>::const_type const_Map;
+
+ BOOST_CONCEPT_USAGE(ReadablePropertyGraph)
+ {
+ BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept<const_Map, X>));
+
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ const_Map pmap = get(Property(), cg);
+ pval = get(Property(), cg, x);
+ ignore_unused_variable_warning(pmap);
+ }
+ G g;
+ X x;
+ typename property_traits<const_Map>::value_type pval;
+ };
+
+ BOOST_concept(PropertyGraph,(G)(X)(Property))
+ : ReadablePropertyGraph<G, X, Property>
+ {
+ typedef typename property_map<G, Property>::type Map;
+ BOOST_CONCEPT_USAGE(PropertyGraph) {
+ BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept<Map, X>));
+
+ Map pmap = get(Property(), g);
+ pval = get(Property(), g, x);
+ put(Property(), g, x, pval);
+ ignore_unused_variable_warning(pmap);
+ }
+ G g;
+ X x;
+ typename property_traits<Map>::value_type pval;
+ };
+
+ BOOST_concept(LvaluePropertyGraph,(G)(X)(Property))
+ : ReadablePropertyGraph<G, X, Property>
+ {
+ typedef typename property_map<G, Property>::type Map;
+ typedef typename property_map<G, Property>::const_type const_Map;
+
+ BOOST_CONCEPT_USAGE(LvaluePropertyGraph) {
+ BOOST_CONCEPT_ASSERT((LvaluePropertyMapConcept<const_Map, X>));
+
+ pval = get(Property(), g, x);
+ put(Property(), g, x, pval);
+ }
+ G g;
+ X x;
+ typename property_traits<Map>::value_type pval;
+ };
+
+ // The *IndexGraph concepts are "semantic" graph concpepts. These can be
+ // applied to describe any graph that has an index map that can be accessed
+ // using the get(*_index, g) method. For example, adjacency lists with
+ // VertexSet == vecS are implicitly models of this concept.
+ //
+ // NOTE: We could require an associated type vertex_index_type, but that
+ // would mean propagating that type name into graph_traits and all of the
+ // other graph implementations. Much easier to simply call it unsigned.
+
+ BOOST_concept(VertexIndexGraph,(Graph))
+ {
+ BOOST_CONCEPT_USAGE(VertexIndexGraph)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename property_map<Graph, vertex_index_t>::type Map;
+ typedef unsigned Index; // This could be Graph::vertex_index_type
+ Map m = get(vertex_index, g);
+ Index x = get(vertex_index, g, Vertex());
+ ignore_unused_variable_warning(x);
+
+ // This is relaxed
+ renumber_vertex_indices(g);
+
+ const_constraints(g);
+ }
+ void const_constraints(const Graph& g)
+ {
+ typedef typename property_map<Graph, vertex_index_t>::const_type Map;
+ Map m = get(vertex_index, g);
+ ignore_unused_variable_warning(m);
+ }
+ private:
+ Graph g;
+ };
+
+ BOOST_concept(EdgeIndexGraph,(Graph))
+ {
+ BOOST_CONCEPT_USAGE(EdgeIndexGraph)
+ {
+ typedef typename graph_traits<Graph>::edge_descriptor Edge;
+ typedef typename property_map<Graph, edge_index_t>::type Map;
+ typedef unsigned Index; // This could be Graph::vertex_index_type
+ Map m = get(edge_index, g);
+ Index x = get(edge_index, g, Edge());
+ ignore_unused_variable_warning(x);
+
+ // This is relaxed
+ renumber_edge_indices(g);
+
+ const_constraints(g);
+ }
+ void const_constraints(const Graph& g)
+ {
+ typedef typename property_map<Graph, edge_index_t>::const_type Map;
+ Map m = get(edge_index, g);
+ ignore_unused_variable_warning(m);
+ }
+ private:
+ Graph g;
+ };
+
+ // This needs to move out of the graph library
+ BOOST_concept(Buffer,(B))
+ {
+ BOOST_CONCEPT_USAGE(Buffer) {
+ b.push(t);
+ b.pop();
+ typename B::value_type& v = b.top();
+ const_constraints(b);
+ ignore_unused_variable_warning(v);
+ }
+ void const_constraints(const B& cb) {
+ const typename B::value_type& v = cb.top();
+ n = cb.size();
+ bool e = cb.empty();
+ ignore_unused_variable_warning(v);
+ ignore_unused_variable_warning(e);
+ }
+ typename B::size_type n;
+ typename B::value_type t;
+ B b;
+ };
+
+ BOOST_concept(ColorValue,(C))
+ : EqualityComparable<C>
+ , DefaultConstructible<C>
+ {
+ BOOST_CONCEPT_USAGE(ColorValue) {
+ c = color_traits<C>::white();
+ c = color_traits<C>::gray();
+ c = color_traits<C>::black();
+ }
+ C c;
+ };
+
+ BOOST_concept(BasicMatrix,(M)(I)(V))
+ {
+ BOOST_CONCEPT_USAGE(BasicMatrix) {
+ V& elt = A[i][j];
+ const_constraints(A);
+ ignore_unused_variable_warning(elt);
+ }
+ void const_constraints(const M& cA) {
+ const V& elt = cA[i][j];
+ ignore_unused_variable_warning(elt);
+ }
+ M A;
+ I i, j;
+ };
+
+ // The following concepts describe aspects of numberic values and measure
+ // functions. We're extending the notion of numeric values to include
+ // emulation for zero and infinity.
+
+ BOOST_concept(NumericValue,(Numeric))
+ {
+ BOOST_CONCEPT_USAGE(NumericValue)
+ {
+ function_requires< DefaultConstructible<Numeric> >();
+ function_requires< CopyConstructible<Numeric> >();
+ numeric_values<Numeric>::zero();
+ numeric_values<Numeric>::infinity();
+ }
+ };
+
+ BOOST_concept(DegreeMeasure,(Measure)(Graph))
+ {
+ BOOST_CONCEPT_USAGE(DegreeMeasure)
+ {
+ typedef typename Measure::degree_type Degree;
+ typedef typename Measure::vertex_type Vertex;
+
+ Degree d = m(Vertex(), g);
+ ignore_unused_variable_warning(d);
+ }
+ private:
+ Measure m;
+ Graph g;
+ };
+
+ BOOST_concept(DistanceMeasure,(Measure)(Graph))
+ {
+ BOOST_CONCEPT_USAGE(DistanceMeasure)
+ {
+ typedef typename Measure::distance_type Distance;
+ typedef typename Measure::result_type Result;
+ Result r = m(Distance(), g);
+ ignore_unused_variable_warning(r);
+ }
+ private:
+ Measure m;
+ Graph g;
+ };
+
+} /* namespace concepts */
+
+using boost::concepts::MultiPassInputIteratorConcept;
+
+// Graph concepts
+using boost::concepts::GraphConcept;
+using boost::concepts::IncidenceGraphConcept;
+using boost::concepts::BidirectionalGraphConcept;
+using boost::concepts::AdjacencyGraphConcept;
+using boost::concepts::VertexListGraphConcept;
+using boost::concepts::EdgeListGraphConcept;
+using boost::concepts::VertexAndEdgeListGraphConcept;
+using boost::concepts::EdgeMutableGraphConcept;
+using boost::concepts::VertexMutableGraphConcept;
+using boost::concepts::MutableGraphConcept;
+using boost::concepts::MutableIncidenceGraphConcept;
+using boost::concepts::MutableBidirectionalGraphConcept;
+using boost::concepts::MutableEdgeListGraphConcept;
+using boost::concepts::VertexMutablePropertyGraphConcept;
+using boost::concepts::EdgeMutablePropertyGraphConcept;
+using boost::concepts::AdjacencyMatrixConcept;
+using boost::concepts::ReadablePropertyGraphConcept;
+using boost::concepts::PropertyGraphConcept;
+using boost::concepts::LvaluePropertyGraphConcept;
+using boost::concepts::VertexIndexGraphConcept;
+using boost::concepts::EdgeIndexGraphConcept;
+
+// Utility concepts
+using boost::concepts::BufferConcept;
+using boost::concepts::ColorValueConcept;
+using boost::concepts::BasicMatrixConcept;
+using boost::concepts::NumericValueConcept;
+using boost::concepts::DistanceMeasureConcept;
+using boost::concepts::DegreeMeasureConcept;
+
+} /* namespace boost */
#include <boost/concept/detail/concept_undef.hpp>
#endif /* BOOST_GRAPH_CONCEPTS_H */
Modified: branches/release/boost/graph/graph_traits.hpp
==============================================================================
--- branches/release/boost/graph/graph_traits.hpp (original)
+++ branches/release/boost/graph/graph_traits.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -14,129 +14,280 @@
#include <iterator>
#include <boost/tuple/tuple.hpp>
#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/iterator/iterator_categories.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/pending/property.hpp>
#include <boost/detail/workaround.hpp>
namespace boost {
- template <typename G>
- struct graph_traits {
- typedef typename G::vertex_descriptor vertex_descriptor;
- typedef typename G::edge_descriptor edge_descriptor;
- typedef typename G::adjacency_iterator adjacency_iterator;
- typedef typename G::out_edge_iterator out_edge_iterator;
- typedef typename G::in_edge_iterator in_edge_iterator;
- typedef typename G::vertex_iterator vertex_iterator;
- typedef typename G::edge_iterator edge_iterator;
-
- typedef typename G::directed_category directed_category;
- typedef typename G::edge_parallel_category edge_parallel_category;
- typedef typename G::traversal_category traversal_category;
-
- typedef typename G::vertices_size_type vertices_size_type;
- typedef typename G::edges_size_type edges_size_type;
- typedef typename G::degree_size_type degree_size_type;
-
- static inline vertex_descriptor null_vertex();
- };
-
- template <typename G>
- inline typename graph_traits<G>::vertex_descriptor
- graph_traits<G>::null_vertex()
- {
- return G::null_vertex();
- }
-
- // directed_category tags
- struct directed_tag { };
- struct undirected_tag { };
- struct bidirectional_tag : public directed_tag { };
-
- namespace detail {
- inline bool is_directed(directed_tag) { return true; }
- inline bool is_directed(undirected_tag) { return false; }
- }
-
- template <typename Graph>
- bool is_directed(const Graph&) {
- typedef typename graph_traits<Graph>::directed_category Cat;
- return detail::is_directed(Cat());
- }
- template <typename Graph>
- bool is_undirected(const Graph& g) {
- return ! is_directed(g);
- }
-
- // edge_parallel_category tags
- struct allow_parallel_edge_tag {};
- struct disallow_parallel_edge_tag {};
-
- namespace detail {
- inline bool allows_parallel(allow_parallel_edge_tag) { return true; }
- inline bool allows_parallel(disallow_parallel_edge_tag) { return false; }
- }
-
- template <typename Graph>
- bool allows_parallel_edges(const Graph&) {
- typedef typename graph_traits<Graph>::edge_parallel_category Cat;
- return detail::allows_parallel(Cat());
- }
-
- // traversal_category tags
- struct incidence_graph_tag { };
- struct adjacency_graph_tag { };
- struct bidirectional_graph_tag :
- public virtual incidence_graph_tag { };
- struct vertex_list_graph_tag { };
- struct edge_list_graph_tag { };
- struct adjacency_matrix_tag { };
-
- //?? not the right place ?? Lee
- typedef boost::forward_traversal_tag multi_pass_input_iterator_tag;
-
- template <typename G>
- struct edge_property_type {
- typedef typename G::edge_property_type type;
- };
- template <typename G>
- struct vertex_property_type {
- typedef typename G::vertex_property_type type;
- };
- template <typename G>
- struct graph_property_type {
- typedef typename G::graph_property_type type;
- };
-
- struct no_vertex_bundle {};
- struct no_edge_bundle {};
-
- template<typename G>
- struct vertex_bundle_type
- {
- typedef typename G::vertex_bundled type;
- };
-
- template<typename G>
- struct edge_bundle_type
- {
- typedef typename G::edge_bundled type;
- };
-
- namespace graph { namespace detail {
- template<typename Graph, typename Descriptor>
- class bundled_result
- {
- typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
- typedef typename mpl::if_c<(is_same<Descriptor, Vertex>::value),
- vertex_bundle_type<Graph>,
- edge_bundle_type<Graph> >::type bundler;
+ template <typename G>
+ struct graph_traits {
+ typedef typename G::vertex_descriptor vertex_descriptor;
+ typedef typename G::edge_descriptor edge_descriptor;
+ typedef typename G::adjacency_iterator adjacency_iterator;
+ typedef typename G::out_edge_iterator out_edge_iterator;
+ typedef typename G::in_edge_iterator in_edge_iterator;
+ typedef typename G::vertex_iterator vertex_iterator;
+ typedef typename G::edge_iterator edge_iterator;
+
+ typedef typename G::directed_category directed_category;
+ typedef typename G::edge_parallel_category edge_parallel_category;
+ typedef typename G::traversal_category traversal_category;
+
+ typedef typename G::vertices_size_type vertices_size_type;
+ typedef typename G::edges_size_type edges_size_type;
+ typedef typename G::degree_size_type degree_size_type;
- public:
- typedef typename bundler::type type;
+ static inline vertex_descriptor null_vertex();
};
- } } // end namespace graph::detail
+
+ template <typename G>
+ inline typename graph_traits<G>::vertex_descriptor
+ graph_traits<G>::null_vertex()
+ { return G::null_vertex(); }
+
+ // directed_category tags
+ struct directed_tag { };
+ struct undirected_tag { };
+ struct bidirectional_tag : public directed_tag { };
+
+ namespace detail {
+ inline bool is_directed(directed_tag) { return true; }
+ inline bool is_directed(undirected_tag) { return false; }
+ }
+
+ /** Return true if the given graph is directed. */
+ template <typename Graph>
+ bool is_directed(const Graph&) {
+ typedef typename graph_traits<Graph>::directed_category Cat;
+ return detail::is_directed(Cat());
+ }
+
+ /** Return false if the given graph is undirected. */
+ template <typename Graph>
+ bool is_undirected(const Graph& g) {
+ return !is_directed(g);
+ }
+
+ /** @name Directed/Undirected Graph Traits */
+ //@{
+ namespace graph_detail {
+ template <typename Tag>
+ struct is_directed_tag
+ : mpl::bool_<is_convertible<Tag, directed_tag>::value>
+ { };
+ } // namespace graph_detail
+
+ template <typename Graph>
+ struct is_directed_graph
+ : graph_detail::is_directed_tag<
+ typename graph_traits<Graph>::directed_category
+ >
+ { };
+
+ template <typename Graph>
+ struct is_undirected_graph
+ : mpl::not_< is_directed_graph<Graph> >
+ { };
+ //@}
+
+ // edge_parallel_category tags
+ struct allow_parallel_edge_tag { };
+ struct disallow_parallel_edge_tag { };
+
+ namespace detail {
+ inline bool allows_parallel(allow_parallel_edge_tag) { return true; }
+ inline bool allows_parallel(disallow_parallel_edge_tag) { return false; }
+ }
+
+ template <typename Graph>
+ bool allows_parallel_edges(const Graph&) {
+ typedef typename graph_traits<Graph>::edge_parallel_category Cat;
+ return detail::allows_parallel(Cat());
+ }
+
+ /** @name Parallel Edges Traits */
+ //@{
+ /**
+ * The is_multigraph metafunction returns true if the graph allows
+ * parallel edges. Technically, a multigraph is a simple graph that
+ * allows parallel edges, but since there are no traits for the allowance
+ * or disallowance of loops, this is a moot point.
+ */
+ template <typename Graph>
+ struct is_multigraph
+ : mpl::bool_<
+ is_same<
+ typename graph_traits<Graph>::edge_parallel_category,
+ allow_parallel_edge_tag
+ >::value
+ >
+ { };
+ //@}
+
+ // traversal_category tags
+ struct incidence_graph_tag { };
+ struct adjacency_graph_tag { };
+ struct bidirectional_graph_tag : virtual incidence_graph_tag { };
+ struct vertex_list_graph_tag { };
+ struct edge_list_graph_tag { };
+ struct adjacency_matrix_tag { };
+
+ /** @name Taversal Category Traits
+ * These traits classify graph types by their supported methods of
+ * vertex and edge traversal.
+ */
+ //@{
+ template <typename Graph>
+ struct is_incidence_graph
+ : mpl::bool_<
+ is_convertible<
+ typename graph_traits<Graph>::traversal_category,
+ incidence_graph_tag
+ >::value
+ >
+ { };
+
+ template <typename Graph>
+ struct is_bidirectional_graph
+ : mpl::bool_<
+ is_convertible<
+ typename graph_traits<Graph>::traversal_category,
+ bidirectional_graph_tag
+ >::value
+ >
+ { };
+
+ template <typename Graph>
+ struct is_vertex_list_graph
+ : mpl::bool_<
+ is_convertible<
+ typename graph_traits<Graph>::traversal_category,
+ vertex_list_graph_tag
+ >::value
+ >
+ { };
+
+ template <typename Graph>
+ struct is_edge_list_graph
+ : mpl::bool_<
+ is_convertible<
+ typename graph_traits<Graph>::traversal_category,
+ edge_list_graph_tag
+ >::value
+ >
+ { };
+ //@}
+
+ /** @name Directed Graph Traits
+ * These metafunctions are used to fully classify directed vs. undirected
+ * graphs. Recall that an undirected graph is also bidirectional, but it
+ * cannot be both undirected and directed at the same time.
+ */
+ //@{
+ template <typename Graph>
+ struct is_directed_unidirectional_graph
+ : mpl::and_<
+ is_directed_graph<Graph>, mpl::not_< is_bidirectional_graph<Graph> >
+ >
+ { };
+
+ template <typename Graph>
+ struct is_directed_bidirectional_graph
+ : mpl::and_<
+ is_directed_graph<Graph>, is_bidirectional_graph<Graph>
+ >
+ { };
+ //@}
+
+ //?? not the right place ?? Lee
+ typedef boost::forward_traversal_tag multi_pass_input_iterator_tag;
+
+ template <typename G>
+ struct edge_property_type {
+ typedef typename G::edge_property_type type;
+ };
+ template <typename G>
+ struct vertex_property_type {
+ typedef typename G::vertex_property_type type;
+ };
+ template <typename G>
+ struct graph_property_type {
+ typedef typename G::graph_property_type type;
+ };
+
+ struct no_bundle { };
+ struct no_vertex_bundle : no_bundle { };
+ struct no_edge_bundle : no_bundle { };
+
+ template<typename G>
+ struct vertex_bundle_type {
+ typedef typename G::vertex_bundled type;
+ };
+
+ template<typename G>
+ struct edge_bundle_type {
+ typedef typename G::edge_bundled type;
+ };
+
+ namespace graph { namespace detail {
+ template<typename Graph, typename Descriptor>
+ class bundled_result {
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename mpl::if_c<(is_same<Descriptor, Vertex>::value),
+ vertex_bundle_type<Graph>,
+ edge_bundle_type<Graph> >::type bundler;
+ public:
+ typedef typename bundler::type type;
+ };
+
+ } } // namespace graph::detail
+
+ namespace graph_detail {
+ // A helper metafunction for determining whether or not a type is
+ // bundled.
+ template <typename T>
+ struct is_no_bundle
+ : mpl::bool_<is_convertible<T, no_bundle>::value>
+ { };
+ } // namespace graph_detail
+
+ /** @name Graph Property Traits
+ * These metafunctions (along with those above), can be used to access the
+ * vertex and edge properties (bundled or otherwise) of vertices and
+ * edges.
+ */
+ //@{
+ template <typename Graph>
+ struct has_vertex_property
+ : mpl::not_<
+ typename detail::is_no_property<typename vertex_property_type<Graph>::type>
+ >::type
+ { };
+ template <typename Graph>
+ struct has_edge_property
+ : mpl::not_<
+ typename detail::is_no_property<typename edge_property_type<Graph>::type>
+ >::type
+ { };
+ template <typename Graph>
+ struct has_bundled_vertex_property
+ : mpl::not_<
+ graph_detail::is_no_bundle<typename vertex_bundle_type<Graph>::type>
+ >
+ { };
+ template <typename Graph>
+ struct has_bundled_edge_property
+ : mpl::not_<
+ graph_detail::is_no_bundle<typename edge_bundle_type<Graph>::type>
+ >
+ { };
+ //@}
+
} // namespace boost
// Since pair is in namespace std, Koenig lookup will find source and
Modified: branches/release/boost/graph/graph_utility.hpp
==============================================================================
--- branches/release/boost/graph/graph_utility.hpp (original)
+++ branches/release/boost/graph/graph_utility.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -420,6 +420,33 @@
make_list(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5)
{ return std::make_pair(t1, std::make_pair(t2, std::make_pair(t3, std::make_pair(t4, t5)))); }
+ namespace graph {
+
+ // Functor for remove_parallel_edges: edge property of the removed edge is added to the remaining
+ template <typename EdgeProperty>
+ struct add_removed_edge_property
+ {
+ add_removed_edge_property(EdgeProperty ep) : ep(ep) {}
+
+ template <typename Edge>
+ void operator() (Edge stay, Edge away)
+ {
+ put(ep, stay, get(ep, stay) + get(ep, away));
+ }
+ EdgeProperty ep;
+ };
+
+ // Same as above: edge property is capacity here
+ template <typename Graph>
+ struct add_removed_edge_capacity
+ : add_removed_edge_property<typename property_map<Graph, edge_capacity_t>::type>
+ {
+ typedef add_removed_edge_property<typename property_map<Graph, edge_capacity_t>::type> base;
+ add_removed_edge_capacity(Graph& g) : base(get(edge_capacity, g)) {}
+ };
+
+ } // namespace graph
+
} /* namespace boost */
#endif /* BOOST_GRAPH_UTILITY_HPP*/
Modified: branches/release/boost/graph/graphml.hpp
==============================================================================
--- branches/release/boost/graph/graphml.hpp (original)
+++ branches/release/boost/graph/graphml.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -22,21 +22,74 @@
#include <boost/mpl/vector.hpp>
#include <boost/mpl/find.hpp>
#include <boost/mpl/for_each.hpp>
+#if 0 // Change this back later
+#include <boost/property_tree/detail/xml_parser_utils.hpp>
+#endif
#include <exception>
#include <sstream>
namespace boost
{
+ // FIXME: Remove this once property_tree is stable
+ namespace graph_detail_from_property_tree {
+
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// 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)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+ // Naively convert narrow string to another character type
+ template<class Ch>
+ std::basic_string<Ch> widen(const char *text)
+ {
+ std::basic_string<Ch> result;
+ while (*text)
+ {
+ result += Ch(*text);
+ ++text;
+ }
+ return result;
+ }
+
+ template<class Ch>
+ std::basic_string<Ch> encode_char_entities(const std::basic_string<Ch> &s)
+ {
+ typedef typename std::basic_string<Ch> Str;
+ Str r;
+ typename Str::const_iterator end = s.end();
+ for (typename Str::const_iterator it = s.begin(); it != end; ++it)
+ {
+ switch (*it)
+ {
+ case Ch('<'): r += boost::graph_detail_from_property_tree::widen<Ch>("<"); break;
+ case Ch('>'): r += boost::graph_detail_from_property_tree::widen<Ch>(">"); break;
+ case Ch('&'): r += boost::graph_detail_from_property_tree::widen<Ch>("&"); break;
+ case Ch('"'): r += boost::graph_detail_from_property_tree::widen<Ch>("""); break;
+ case Ch('\''): r += boost::graph_detail_from_property_tree::widen<Ch>("'"); break;
+ default: r += *it; break;
+ }
+ }
+ return r;
+ }
+
+ }
+
/////////////////////////////////////////////////////////////////////////////
// Graph reader exceptions
/////////////////////////////////////////////////////////////////////////////
struct parse_error: public graph_exception
{
- parse_error(const std::string& error) {statement = "parse error: " + error;}
+ parse_error(const std::string& err) {error = err; statement = "parse error: " + error;}
virtual ~parse_error() throw() {}
virtual const char* what() const throw() {return statement.c_str();}
std::string statement;
+ std::string error;
};
@@ -226,6 +279,9 @@
typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+ // using boost::property_tree::xml_parser::encode_char_entities;
+ using boost::graph_detail_from_property_tree::encode_char_entities;
+
BOOST_STATIC_CONSTANT(bool,
graph_is_directed =
(is_convertible<directed_category*, directed_tag*>::value));
@@ -254,7 +310,7 @@
continue;
std::string type_name = "string";
mpl::for_each<value_types>(get_type_name<value_types>(i->second->value(), type_names, type_name));
- out << " <key id=\"" << key_id << "\" for=\""
+ out << " <key id=\"" << encode_char_entities(key_id) << "\" for=\""
<< (i->second->key() == typeid(Graph) ? "graph" : (i->second->key() == typeid(vertex_descriptor) ? "node" : "edge")) << "\""
<< " attr.name=\"" << i->first << "\""
<< " attr.type=\"" << type_name << "\""
@@ -272,7 +328,7 @@
if (i->second->key() == typeid(Graph))
{
out << " <data key=\"" << graph_key_ids[i->first] << "\">"
- << i->second->get_string(g) << "</data>\n";
+ << encode_char_entities(i->second->get_string(g)) << "</data>\n";
}
}
@@ -287,7 +343,7 @@
if (i->second->key() == typeid(vertex_descriptor))
{
out << " <data key=\"" << vertex_key_ids[i->first] << "\">"
- << i->second->get_string(*v) << "</data>\n";
+ << encode_char_entities(i->second->get_string(*v)) << "</data>\n";
}
}
out << " </node>\n";
@@ -308,7 +364,7 @@
if (i->second->key() == typeid(edge_descriptor))
{
out << " <data key=\"" << edge_key_ids[i->first] << "\">"
- << i->second->get_string(*e) << "</data>\n";
+ << encode_char_entities(i->second->get_string(*e)) << "</data>\n";
}
}
out << " </edge>\n";
Modified: branches/release/boost/graph/graphviz.hpp
==============================================================================
--- branches/release/boost/graph/graphviz.hpp (original)
+++ branches/release/boost/graph/graphviz.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,7 +1,7 @@
//=======================================================================
// Copyright 2001 University of Notre Dame.
// Copyright 2003 Jeremy Siek
-// Authors: Lie-Quan Lee and Jeremy Siek
+// Authors: Lie-Quan Lee, Jeremy Siek, and Douglas Gregor
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -16,13 +16,14 @@
#include <iostream>
#include <fstream>
#include <stdio.h> // for FILE
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/subgraph.hpp>
#include <boost/graph/adjacency_list.hpp>
-#include <boost/dynamic_property_map.hpp>
+#include <boost/property_map/dynamic_property_map.hpp>
+#include <boost/graph/overloading.hpp>
#ifdef BOOST_HAS_DECLSPEC
# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_GRAPH_DYN_LINK)
@@ -236,11 +237,14 @@
template <typename Graph, typename VertexPropertiesWriter,
typename EdgePropertiesWriter, typename GraphPropertiesWriter,
typename VertexID>
- inline void write_graphviz(std::ostream& out, const Graph& g,
- VertexPropertiesWriter vpw,
- EdgePropertiesWriter epw,
- GraphPropertiesWriter gpw,
- VertexID vertex_id)
+ inline void
+ write_graphviz
+ (std::ostream& out, const Graph& g,
+ VertexPropertiesWriter vpw,
+ EdgePropertiesWriter epw,
+ GraphPropertiesWriter gpw,
+ VertexID vertex_id
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{
typedef typename graph_traits<Graph>::directed_category cat_type;
typedef graphviz_io_traits<cat_type> Traits;
@@ -267,17 +271,21 @@
template <typename Graph, typename VertexPropertiesWriter,
typename EdgePropertiesWriter, typename GraphPropertiesWriter>
- inline void write_graphviz(std::ostream& out, const Graph& g,
- VertexPropertiesWriter vpw,
- EdgePropertiesWriter epw,
- GraphPropertiesWriter gpw)
+ inline void
+ write_graphviz(std::ostream& out, const Graph& g,
+ VertexPropertiesWriter vpw,
+ EdgePropertiesWriter epw,
+ GraphPropertiesWriter gpw
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{ write_graphviz(out, g, vpw, epw, gpw, get(vertex_index, g)); }
#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
// ambiguous overload problem with VC++
template <typename Graph>
inline void
- write_graphviz(std::ostream& out, const Graph& g) {
+ write_graphviz(std::ostream& out, const Graph& g
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
+ {
default_writer dw;
default_writer gw;
write_graphviz(out, g, dw, dw, gw);
@@ -286,7 +294,9 @@
template <typename Graph, typename VertexWriter>
inline void
- write_graphviz(std::ostream& out, const Graph& g, VertexWriter vw) {
+ write_graphviz(std::ostream& out, const Graph& g, VertexWriter vw
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
+ {
default_writer dw;
default_writer gw;
write_graphviz(out, g, vw, dw, gw);
@@ -295,7 +305,9 @@
template <typename Graph, typename VertexWriter, typename EdgeWriter>
inline void
write_graphviz(std::ostream& out, const Graph& g,
- VertexWriter vw, EdgeWriter ew) {
+ VertexWriter vw, EdgeWriter ew
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
+ {
default_writer gw;
write_graphviz(out, g, vw, ew, gw);
}
@@ -479,11 +491,12 @@
// These four require linking the BGL-Graphviz library: libbgl-viz.a
// from the /src directory.
- extern void read_graphviz(const std::string& file, GraphvizDigraph& g);
- extern void read_graphviz(FILE* file, GraphvizDigraph& g);
-
- extern void read_graphviz(const std::string& file, GraphvizGraph& g);
- extern void read_graphviz(FILE* file, GraphvizGraph& g);
+ // Library has not existed for a while
+ // extern void read_graphviz(const std::string& file, GraphvizDigraph& g);
+ // extern void read_graphviz(FILE* file, GraphvizDigraph& g);
+ //
+ // extern void read_graphviz(const std::string& file, GraphvizGraph& g);
+ // extern void read_graphviz(FILE* file, GraphvizGraph& g);
class dynamic_properties_writer
{
@@ -575,7 +588,8 @@
inline void
write_graphviz(std::ostream& out, const Graph& g,
const dynamic_properties& dp,
- const std::string& node_id = "node_id")
+ const std::string& node_id = "node_id"
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{
typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
write_graphviz(out, g, dp, node_id,
@@ -586,7 +600,8 @@
void
write_graphviz(std::ostream& out, const Graph& g,
const dynamic_properties& dp, const std::string& node_id,
- VertexID id)
+ VertexID id
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,vertex_list_graph_tag))
{
write_graphviz
(out, g,
@@ -640,6 +655,14 @@
}
};
+struct bad_graphviz_syntax: public graph_exception {
+ std::string errmsg;
+ bad_graphviz_syntax(const std::string& errmsg)
+ : errmsg(errmsg) {}
+ const char* what() const throw () {return errmsg.c_str();}
+ ~bad_graphviz_syntax() throw () {};
+};
+
namespace detail { namespace graph {
typedef std::string id_t;
@@ -725,7 +748,7 @@
if(!result.second) {
// In the case of no parallel edges allowed
- throw bad_parallel_edge(source, target);
+ boost::throw_exception(bad_parallel_edge(source, target));
} else {
bgl_edges.insert(std::make_pair(edge, result.first));
}
@@ -770,14 +793,27 @@
dynamic_properties& dp,
std::string const& node_id = "node_id")
{
- detail::graph::mutate_graph_impl<MutableGraph> m_graph(graph, dp, node_id);
- return detail::graph::read_graphviz(in, m_graph);
+ std::string data;
+ in >> std::noskipws;
+ std::copy(std::istream_iterator<char>(in),
+ std::istream_iterator<char>(),
+ std::back_inserter(data));
+ return read_graphviz(data,graph,dp,node_id);
}
} // namespace boost
-#ifdef BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
+#ifdef BOOST_GRAPH_USE_SPIRIT_PARSER
+# ifndef BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
+# define BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
+# endif
# include <boost/graph/detail/read_graphviz_spirit.hpp>
-#endif // BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
+#else // New default parser
+# include <boost/graph/detail/read_graphviz_new.hpp>
+#endif // BOOST_GRAPH_USE_SPIRIT_PARSER
+
+#ifdef BOOST_GRAPH_USE_MPI
+# include <boost/graph/distributed/graphviz.hpp>
+#endif
#endif // BOOST_GRAPHVIZ_HPP
Modified: branches/release/boost/graph/gursoy_atun_layout.hpp
==============================================================================
--- branches/release/boost/graph/gursoy_atun_layout.hpp (original)
+++ branches/release/boost/graph/gursoy_atun_layout.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -28,6 +28,7 @@
#include <boost/graph/breadth_first_search.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <boost/graph/named_function_params.hpp>
+#include <boost/graph/topology.hpp>
namespace boost {
@@ -351,281 +352,6 @@
dummy_property_map()));
}
-/***********************************************************
- * Topologies *
- ***********************************************************/
-template<std::size_t Dims>
-class convex_topology
-{
- struct point
- {
- point() { }
- double& operator[](std::size_t i) {return values[i];}
- const double& operator[](std::size_t i) const {return values[i];}
-
- private:
- double values[Dims];
- };
-
- public:
- typedef point point_type;
-
- double distance(point a, point b) const
- {
- double dist = 0;
- for (std::size_t i = 0; i < Dims; ++i) {
- double diff = b[i] - a[i];
- dist += diff * diff;
- }
- // Exact properties of the distance are not important, as long as
- // < on what this returns matches real distances
- return dist;
- }
-
- point move_position_toward(point a, double fraction, point b) const
- {
- point result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = a[i] + (b[i] - a[i]) * fraction;
- return result;
- }
-};
-
-template<std::size_t Dims,
- typename RandomNumberGenerator = minstd_rand>
-class hypercube_topology : public convex_topology<Dims>
-{
- typedef uniform_01<RandomNumberGenerator, double> rand_t;
-
- public:
- typedef typename convex_topology<Dims>::point_type point_type;
-
- explicit hypercube_topology(double scaling = 1.0)
- : gen_ptr(new RandomNumberGenerator), rand(new rand_t(*gen_ptr)),
- scaling(scaling)
- { }
-
- hypercube_topology(RandomNumberGenerator& gen, double scaling = 1.0)
- : gen_ptr(), rand(new rand_t(gen)), scaling(scaling) { }
-
- point_type random_point() const
- {
- point_type p;
- for (std::size_t i = 0; i < Dims; ++i)
- p[i] = (*rand)() * scaling;
- return p;
- }
-
- private:
- shared_ptr<RandomNumberGenerator> gen_ptr;
- shared_ptr<rand_t> rand;
- double scaling;
-};
-
-template<typename RandomNumberGenerator = minstd_rand>
-class square_topology : public hypercube_topology<2, RandomNumberGenerator>
-{
- typedef hypercube_topology<2, RandomNumberGenerator> inherited;
-
- public:
- explicit square_topology(double scaling = 1.0) : inherited(scaling) { }
-
- square_topology(RandomNumberGenerator& gen, double scaling = 1.0)
- : inherited(gen, scaling) { }
-};
-
-template<typename RandomNumberGenerator = minstd_rand>
-class cube_topology : public hypercube_topology<3, RandomNumberGenerator>
-{
- typedef hypercube_topology<3, RandomNumberGenerator> inherited;
-
- public:
- explicit cube_topology(double scaling = 1.0) : inherited(scaling) { }
-
- cube_topology(RandomNumberGenerator& gen, double scaling = 1.0)
- : inherited(gen, scaling) { }
-};
-
-template<std::size_t Dims,
- typename RandomNumberGenerator = minstd_rand>
-class ball_topology : public convex_topology<Dims>
-{
- typedef uniform_01<RandomNumberGenerator, double> rand_t;
-
- public:
- typedef typename convex_topology<Dims>::point_type point_type;
-
- explicit ball_topology(double radius = 1.0)
- : gen_ptr(new RandomNumberGenerator), rand(new rand_t(*gen_ptr)),
- radius(radius)
- { }
-
- ball_topology(RandomNumberGenerator& gen, double radius = 1.0)
- : gen_ptr(), rand(new rand_t(gen)), radius(radius) { }
-
- point_type random_point() const
- {
- point_type p;
- double dist_sum;
- do {
- dist_sum = 0.0;
- for (std::size_t i = 0; i < Dims; ++i) {
- double x = (*rand)() * 2*radius - radius;
- p[i] = x;
- dist_sum += x * x;
- }
- } while (dist_sum > radius*radius);
- return p;
- }
-
- private:
- shared_ptr<RandomNumberGenerator> gen_ptr;
- shared_ptr<rand_t> rand;
- double radius;
-};
-
-template<typename RandomNumberGenerator = minstd_rand>
-class circle_topology : public ball_topology<2, RandomNumberGenerator>
-{
- typedef ball_topology<2, RandomNumberGenerator> inherited;
-
- public:
- explicit circle_topology(double radius = 1.0) : inherited(radius) { }
-
- circle_topology(RandomNumberGenerator& gen, double radius = 1.0)
- : inherited(gen, radius) { }
-};
-
-template<typename RandomNumberGenerator = minstd_rand>
-class sphere_topology : public ball_topology<3, RandomNumberGenerator>
-{
- typedef ball_topology<3, RandomNumberGenerator> inherited;
-
- public:
- explicit sphere_topology(double radius = 1.0) : inherited(radius) { }
-
- sphere_topology(RandomNumberGenerator& gen, double radius = 1.0)
- : inherited(gen, radius) { }
-};
-
-template<typename RandomNumberGenerator = minstd_rand>
-class heart_topology
-{
- // Heart is defined as the union of three shapes:
- // Square w/ corners (+-1000, -1000), (0, 0), (0, -2000)
- // Circle centered at (-500, -500) radius 500*sqrt(2)
- // Circle centered at (500, -500) radius 500*sqrt(2)
- // Bounding box (-1000, -2000) - (1000, 500*(sqrt(2) - 1))
-
- struct point
- {
- point() { values[0] = 0.0; values[1] = 0.0; }
- point(double x, double y) { values[0] = x; values[1] = y; }
-
- double& operator[](std::size_t i) { return values[i]; }
- double operator[](std::size_t i) const { return values[i]; }
-
- private:
- double values[2];
- };
-
- bool in_heart(point p) const
- {
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::abs;
- using std::pow;
-#endif
-
- if (p[1] < abs(p[0]) - 2000) return false; // Bottom
- if (p[1] <= -1000) return true; // Diagonal of square
- if (pow(p[0] - -500, 2) + pow(p[1] - -500, 2) <= 500000)
- return true; // Left circle
- if (pow(p[0] - 500, 2) + pow(p[1] - -500, 2) <= 500000)
- return true; // Right circle
- return false;
- }
-
- bool segment_within_heart(point p1, point p2) const
- {
- // Assumes that p1 and p2 are within the heart
- if ((p1[0] < 0) == (p2[0] < 0)) return true; // Same side of symmetry line
- if (p1[0] == p2[0]) return true; // Vertical
- double slope = (p2[1] - p1[1]) / (p2[0] - p1[0]);
- double intercept = p1[1] - p1[0] * slope;
- if (intercept > 0) return false; // Crosses between circles
- return true;
- }
-
- typedef uniform_01<RandomNumberGenerator, double> rand_t;
-
- public:
- typedef point point_type;
-
- heart_topology()
- : gen_ptr(new RandomNumberGenerator), rand(new rand_t(*gen_ptr)) { }
-
- heart_topology(RandomNumberGenerator& gen)
- : gen_ptr(), rand(new rand_t(gen)) { }
-
- point random_point() const
- {
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif
-
- point result;
- double sqrt2 = sqrt(2.);
- do {
- result[0] = (*rand)() * (1000 + 1000 * sqrt2) - (500 + 500 * sqrt2);
- result[1] = (*rand)() * (2000 + 500 * (sqrt2 - 1)) - 2000;
- } while (!in_heart(result));
- return result;
- }
-
- double distance(point a, point b) const
- {
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif
- if (segment_within_heart(a, b)) {
- // Straight line
- return sqrt((b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1]));
- } else {
- // Straight line bending around (0, 0)
- return sqrt(a[0] * a[0] + a[1] * a[1]) + sqrt(b[0] * b[0] + b[1] * b[1]);
- }
- }
-
- point move_position_toward(point a, double fraction, point b) const
- {
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif
-
- if (segment_within_heart(a, b)) {
- // Straight line
- return point(a[0] + (b[0] - a[0]) * fraction,
- a[1] + (b[1] - a[1]) * fraction);
- } else {
- double distance_to_point_a = sqrt(a[0] * a[0] + a[1] * a[1]);
- double distance_to_point_b = sqrt(b[0] * b[0] + b[1] * b[1]);
- double location_of_point = distance_to_point_a /
- (distance_to_point_a + distance_to_point_b);
- if (fraction < location_of_point)
- return point(a[0] * (1 - fraction / location_of_point),
- a[1] * (1 - fraction / location_of_point));
- else
- return point(
- b[0] * ((fraction - location_of_point) / (1 - location_of_point)),
- b[1] * ((fraction - location_of_point) / (1 - location_of_point)));
- }
- }
-
- private:
- shared_ptr<RandomNumberGenerator> gen_ptr;
- shared_ptr<rand_t> rand;
-};
-
} // namespace boost
#endif // BOOST_GRAPH_GURSOY_ATUN_LAYOUT_HPP
Modified: branches/release/boost/graph/howard_cycle_ratio.hpp
==============================================================================
--- branches/release/boost/graph/howard_cycle_ratio.hpp (original)
+++ branches/release/boost/graph/howard_cycle_ratio.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -19,6 +19,7 @@
#include <exception>
#include <set>
#include <boost/bind.hpp>
+#include <boost/config.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/remove_const.hpp>
Modified: branches/release/boost/graph/is_kuratowski_subgraph.hpp
==============================================================================
--- branches/release/boost/graph/is_kuratowski_subgraph.hpp (original)
+++ branches/release/boost/graph/is_kuratowski_subgraph.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,7 +11,7 @@
#include <boost/config.hpp>
#include <boost/utility.hpp> //for next/prior
#include <boost/tuple/tuple.hpp> //for tie
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/isomorphism.hpp>
#include <boost/graph/adjacency_list.hpp>
Modified: branches/release/boost/graph/is_straight_line_drawing.hpp
==============================================================================
--- branches/release/boost/graph/is_straight_line_drawing.hpp (original)
+++ branches/release/boost/graph/is_straight_line_drawing.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,7 +12,7 @@
#include <boost/utility.hpp> //for next and prior
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/planar_detail/bucket_sort.hpp>
Modified: branches/release/boost/graph/johnson_all_pairs_shortest.hpp
==============================================================================
--- branches/release/boost/graph/johnson_all_pairs_shortest.hpp (original)
+++ branches/release/boost/graph/johnson_all_pairs_shortest.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -23,7 +23,8 @@
#define BOOST_GRAPH_JOHNSON_HPP
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/property_map/shared_array_property_map.hpp>
#include <boost/graph/bellman_ford_shortest_paths.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <boost/graph/adjacency_list.hpp>
@@ -94,12 +95,10 @@
}
typename Traits2::vertex_iterator v, v_end, u, u_end;
typename Traits2::edge_iterator e, e_end;
- std::vector<DT> h_vec(num_vertices(g2));
- typedef typename std::vector<DT>::iterator iter_t;
- iterator_property_map<iter_t,VertexID2,DT,DT&> h(h_vec.begin(), id2);
+ shared_array_property_map<DT,VertexID2> h(num_vertices(g2), id2);
for (tie(v, v_end) = vertices(g2); v != v_end; ++v)
- d[*v] = inf;
+ put(d, *v, inf);
put(d, s, zero);
// Using the non-named parameter versions of bellman_ford and
@@ -122,8 +121,8 @@
for (tie(v, v_end) = vertices(g2); v != v_end; ++v) {
if (*u != s && *v != s) {
typename Traits1::vertex_descriptor u1, v1;
- u1 = verts1[id2[*u]]; v1 = verts1[id2[*v]];
- D[id2[*u]-1][id2[*v]-1] = combine(get(d, *v), (get(h, *v) - get(h, *u)));
+ u1 = verts1[get(id2, *u)]; v1 = verts1[get(id2, *v)];
+ D[get(id2, *u)-1][get(id2, *v)-1] = combine(get(d, *v), (get(h, *v) - get(h, *u)));
}
}
}
Modified: branches/release/boost/graph/kamada_kawai_spring_layout.hpp
==============================================================================
--- branches/release/boost/graph/kamada_kawai_spring_layout.hpp (original)
+++ branches/release/boost/graph/kamada_kawai_spring_layout.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -10,6 +10,8 @@
#define BOOST_GRAPH_KAMADA_KAWAI_SPRING_LAYOUT_HPP
#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/topology.hpp>
+#include <boost/graph/iteration_macros.hpp>
#include <boost/graph/johnson_all_pairs_shortest.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <utility>
@@ -68,21 +70,81 @@
}
/**
+ * Dense linear solver for fixed-size matrices.
+ */
+ template <std::size_t Size>
+ struct linear_solver {
+ // Indices in mat are (row, column)
+ // template <typename Vec>
+ // static Vec solve(double mat[Size][Size], Vec rhs);
+ };
+
+ template <>
+ struct linear_solver<1> {
+ template <typename Vec>
+ static Vec solve(double mat[1][1], Vec rhs) {
+ return rhs / mat[0][0];
+ }
+ };
+
+ // These are from http://en.wikipedia.org/wiki/Cramer%27s_rule
+ template <>
+ struct linear_solver<2> {
+ template <typename Vec>
+ static Vec solve(double mat[2][2], Vec rhs) {
+ double denom = mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1];
+ double x_num = rhs[0] * mat[1][1] - rhs[1] * mat[0][1];
+ double y_num = mat[0][0] * rhs[1] - mat[1][0] * rhs[0] ;
+ Vec result;
+ result[0] = x_num / denom;
+ result[1] = y_num / denom;
+ return result;
+ }
+ };
+
+ template <>
+ struct linear_solver<3> {
+ template <typename Vec>
+ static Vec solve(double mat[2][2], Vec rhs) {
+ double denom = mat[0][0] * (mat[1][1] * mat[2][2] - mat[2][1] * mat[1][2])
+ - mat[1][0] * (mat[0][1] * mat[2][2] - mat[2][1] * mat[0][2])
+ + mat[2][0] * (mat[0][1] * mat[1][2] - mat[1][1] * mat[0][2]);
+ double x_num = rhs[0] * (mat[1][1] * mat[2][2] - mat[2][1] * mat[1][2])
+ - rhs[1] * (mat[0][1] * mat[2][2] - mat[2][1] * mat[0][2])
+ + rhs[2] * (mat[0][1] * mat[1][2] - mat[1][1] * mat[0][2]);
+ double y_num = mat[0][0] * (rhs[1] * mat[2][2] - rhs[2] * mat[1][2])
+ - mat[1][0] * (rhs[0] * mat[2][2] - rhs[2] * mat[0][2])
+ + mat[2][0] * (rhs[0] * mat[1][2] - rhs[1] * mat[0][2]);
+ double z_num = mat[0][0] * (mat[1][1] * rhs[2] - mat[2][1] * rhs[1] )
+ - mat[1][0] * (mat[0][1] * rhs[2] - mat[2][1] * rhs[0] )
+ + mat[2][0] * (mat[0][1] * rhs[1] - mat[1][1] * rhs[0] );
+ Vec result;
+ result[0] = x_num / denom;
+ result[1] = y_num / denom;
+ result[2] = z_num / denom;
+ return result;
+ }
+ };
+
+ /**
* Implementation of the Kamada-Kawai spring layout algorithm.
*/
- template<typename Graph, typename PositionMap, typename WeightMap,
+ template<typename Topology, typename Graph, typename PositionMap, typename WeightMap,
typename EdgeOrSideLength, typename Done,
typename VertexIndexMap, typename DistanceMatrix,
typename SpringStrengthMatrix, typename PartialDerivativeMap>
struct kamada_kawai_spring_layout_impl
{
typedef typename property_traits<WeightMap>::value_type weight_type;
- typedef std::pair<weight_type, weight_type> deriv_type;
+ typedef typename Topology::point_type Point;
+ typedef typename Topology::point_difference_type point_difference_type;
+ typedef point_difference_type deriv_type;
typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
typedef typename graph_traits<Graph>::vertex_descriptor
vertex_descriptor;
kamada_kawai_spring_layout_impl(
+ const Topology& topology,
const Graph& g,
PositionMap position,
WeightMap weight,
@@ -93,7 +155,7 @@
DistanceMatrix distance,
SpringStrengthMatrix spring_strength,
PartialDerivativeMap partial_derivatives)
- : g(g), position(position), weight(weight),
+ : topology(topology), g(g), position(position), weight(weight),
edge_or_side_length(edge_or_side_length), done(done),
spring_constant(spring_constant), index(index), distance(distance),
spring_strength(spring_strength),
@@ -108,15 +170,12 @@
using std::sqrt;
#endif // BOOST_NO_STDC_NAMESPACE
- deriv_type result(0, 0);
+ deriv_type result;
if (i != m) {
- weight_type x_diff = position[m].x - position[i].x;
- weight_type y_diff = position[m].y - position[i].y;
- weight_type dist = sqrt(x_diff * x_diff + y_diff * y_diff);
- result.first = spring_strength[get(index, m)][get(index, i)]
- * (x_diff - distance[get(index, m)][get(index, i)]*x_diff/dist);
- result.second = spring_strength[get(index, m)][get(index, i)]
- * (y_diff - distance[get(index, m)][get(index, i)]*y_diff/dist);
+ point_difference_type diff = topology.difference(position[m], position[i]);
+ weight_type dist = topology.norm(diff);
+ result = spring_strength[get(index, m)][get(index, i)]
+ * (diff - distance[get(index, m)][get(index, i)]/dist*diff);
}
return result;
@@ -130,15 +189,12 @@
using std::sqrt;
#endif // BOOST_NO_STDC_NAMESPACE
- deriv_type result(0, 0);
+ deriv_type result;
// TBD: looks like an accumulate to me
- std::pair<vertex_iterator, vertex_iterator> verts = vertices(g);
- for (/* no init */; verts.first != verts.second; ++verts.first) {
- vertex_descriptor i = *verts.first;
+ BGL_FORALL_VERTICES_T(i, g, Graph) {
deriv_type deriv = compute_partial_derivative(m, i);
- result.first += deriv.first;
- result.second += deriv.second;
+ result += deriv;
}
return result;
@@ -185,8 +241,7 @@
deriv_type deriv = compute_partial_derivatives(*ui);
put(partial_derivatives, *ui, deriv);
- weight_type delta =
- sqrt(deriv.first*deriv.first + deriv.second*deriv.second);
+ weight_type delta = topology.norm(deriv);
if (delta > delta_p) {
p = *ui;
@@ -206,47 +261,48 @@
}
do {
- // Compute the 4 elements of the Jacobian
- weight_type dE_dx_dx = 0, dE_dx_dy = 0, dE_dy_dx = 0, dE_dy_dy = 0;
+ // Compute the elements of the Jacobian
+ // From
+ // http://www.cs.panam.edu/~rfowler/papers/1994_kumar_fowler_A_Spring_UTPACSTR.pdf
+ // with the bugs fixed in the off-diagonal case
+ weight_type dE_d_d[Point::dimensions][Point::dimensions];
+ for (std::size_t i = 0; i < Point::dimensions; ++i)
+ for (std::size_t j = 0; j < Point::dimensions; ++j)
+ dE_d_d[i][j] = 0.;
for (ui = vertices(g).first; ui != end; ++ui) {
vertex_descriptor i = *ui;
if (i != p) {
- weight_type x_diff = position[p].x - position[i].x;
- weight_type y_diff = position[p].y - position[i].y;
- weight_type dist = sqrt(x_diff * x_diff + y_diff * y_diff);
- weight_type dist_cubed = dist * dist * dist;
+ point_difference_type diff = topology.difference(position[p], position[i]);
+ weight_type dist = topology.norm(diff);
+ weight_type dist_squared = dist * dist;
+ weight_type inv_dist_cubed = 1. / (dist_squared * dist);
weight_type k_mi = spring_strength[get(index,p)][get(index,i)];
weight_type l_mi = distance[get(index, p)][get(index, i)];
- dE_dx_dx += k_mi * (1 - (l_mi * y_diff * y_diff)/dist_cubed);
- dE_dx_dy += k_mi * l_mi * x_diff * y_diff / dist_cubed;
- dE_dy_dx += k_mi * l_mi * x_diff * y_diff / dist_cubed;
- dE_dy_dy += k_mi * (1 - (l_mi * x_diff * x_diff)/dist_cubed);
+ for (std::size_t i = 0; i < Point::dimensions; ++i) {
+ for (std::size_t j = 0; j < Point::dimensions; ++j) {
+ if (i == j) {
+ dE_d_d[i][i] += k_mi * (1 + (l_mi * (diff[i] * diff[i] - dist_squared) * inv_dist_cubed));
+ } else {
+ dE_d_d[i][j] += k_mi * l_mi * diff[i] * diff[j] * inv_dist_cubed;
+ }
+ }
+ }
}
}
- // Solve for delta_x and delta_y
- weight_type dE_dx = get(partial_derivatives, p).first;
- weight_type dE_dy = get(partial_derivatives, p).second;
-
- weight_type delta_x =
- (dE_dx_dy * dE_dy - dE_dy_dy * dE_dx)
- / (dE_dx_dx * dE_dy_dy - dE_dx_dy * dE_dy_dx);
-
- weight_type delta_y =
- (dE_dx_dx * dE_dy - dE_dy_dx * dE_dx)
- / (dE_dy_dx * dE_dx_dy - dE_dx_dx * dE_dy_dy);
-
-
- // Move p by (delta_x, delta_y)
- position[p].x += delta_x;
- position[p].y += delta_y;
+ deriv_type dE_d = get(partial_derivatives, p);
+
+ // Solve dE_d_d * delta = dE_d to get delta
+ point_difference_type delta = -linear_solver<Point::dimensions>::solve(dE_d_d, dE_d);
+
+ // Move p by delta
+ position[p] = topology.adjust(position[p], delta);
// Recompute partial derivatives and delta_p
deriv_type deriv = compute_partial_derivatives(p);
put(partial_derivatives, p, deriv);
- delta_p =
- sqrt(deriv.first*deriv.first + deriv.second*deriv.second);
+ delta_p = topology.norm(deriv);
} while (!done(delta_p, p, g, false));
// Select new p by updating each partial derivative and delta
@@ -257,12 +313,10 @@
compute_partial_derivative(*ui, old_p);
deriv_type deriv = get(partial_derivatives, *ui);
- deriv.first += old_p_partial.first - old_deriv_p.first;
- deriv.second += old_p_partial.second - old_deriv_p.second;
+ deriv += old_p_partial - old_deriv_p;
put(partial_derivatives, *ui, deriv);
- weight_type delta =
- sqrt(deriv.first*deriv.first + deriv.second*deriv.second);
+ weight_type delta = topology.norm(deriv);
if (delta > delta_p) {
p = *ui;
@@ -274,6 +328,7 @@
return true;
}
+ const Topology& topology;
const Graph& g;
PositionMap position;
WeightMap weight;
@@ -373,6 +428,9 @@
* \param weight (IN) must be a model of Readable Property Map,
* which provides the weight of each edge in the graph @p g.
*
+ * \param topology (IN) must be a topology object (see topology.hpp),
+ * which provides operations on points and differences between them.
+ *
* \param edge_or_side_length (IN) provides either the unit length
* @c e of an edge in the layout or the length of a side @c s of the
* display area, and must be either @c boost::edge_length(e) or @c
@@ -417,7 +475,7 @@
* \returns @c true if layout was successful or @c false if a
* negative weight cycle was detected.
*/
- template<typename Graph, typename PositionMap, typename WeightMap,
+ template<typename Topology, typename Graph, typename PositionMap, typename WeightMap,
typename T, bool EdgeOrSideLength, typename Done,
typename VertexIndexMap, typename DistanceMatrix,
typename SpringStrengthMatrix, typename PartialDerivativeMap>
@@ -426,6 +484,7 @@
const Graph& g,
PositionMap position,
WeightMap weight,
+ const Topology& topology,
detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length,
Done done,
typename property_traits<WeightMap>::value_type spring_constant,
@@ -440,10 +499,10 @@
>::value));
detail::graph::kamada_kawai_spring_layout_impl<
- Graph, PositionMap, WeightMap,
+ Topology, Graph, PositionMap, WeightMap,
detail::graph::edge_or_side<EdgeOrSideLength, T>, Done, VertexIndexMap,
DistanceMatrix, SpringStrengthMatrix, PartialDerivativeMap>
- alg(g, position, weight, edge_or_side_length, done, spring_constant,
+ alg(topology, g, position, weight, edge_or_side_length, done, spring_constant,
index, distance, spring_strength, partial_derivatives);
return alg.run();
}
@@ -451,7 +510,7 @@
/**
* \overload
*/
- template<typename Graph, typename PositionMap, typename WeightMap,
+ template<typename Topology, typename Graph, typename PositionMap, typename WeightMap,
typename T, bool EdgeOrSideLength, typename Done,
typename VertexIndexMap>
bool
@@ -459,6 +518,7 @@
const Graph& g,
PositionMap position,
WeightMap weight,
+ const Topology& topology,
detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length,
Done done,
typename property_traits<WeightMap>::value_type spring_constant,
@@ -471,32 +531,33 @@
std::vector<weight_vec> distance(n, weight_vec(n));
std::vector<weight_vec> spring_strength(n, weight_vec(n));
- std::vector<std::pair<weight_type, weight_type> > partial_derivatives(n);
+ std::vector<typename Topology::point_difference_type> partial_derivatives(n);
return
kamada_kawai_spring_layout(
- g, position, weight, edge_or_side_length, done, spring_constant, index,
+ g, position, weight, topology, edge_or_side_length, done, spring_constant, index,
distance.begin(),
spring_strength.begin(),
make_iterator_property_map(partial_derivatives.begin(), index,
- std::pair<weight_type, weight_type>()));
+ typename Topology::point_difference_type()));
}
/**
* \overload
*/
- template<typename Graph, typename PositionMap, typename WeightMap,
+ template<typename Topology, typename Graph, typename PositionMap, typename WeightMap,
typename T, bool EdgeOrSideLength, typename Done>
bool
kamada_kawai_spring_layout(
const Graph& g,
PositionMap position,
WeightMap weight,
+ const Topology& topology,
detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length,
Done done,
typename property_traits<WeightMap>::value_type spring_constant)
{
- return kamada_kawai_spring_layout(g, position, weight, edge_or_side_length,
+ return kamada_kawai_spring_layout(g, position, weight, topology, edge_or_side_length,
done, spring_constant,
get(vertex_index, g));
}
@@ -504,35 +565,37 @@
/**
* \overload
*/
- template<typename Graph, typename PositionMap, typename WeightMap,
+ template<typename Topology, typename Graph, typename PositionMap, typename WeightMap,
typename T, bool EdgeOrSideLength, typename Done>
bool
kamada_kawai_spring_layout(
const Graph& g,
PositionMap position,
WeightMap weight,
+ const Topology& topology,
detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length,
Done done)
{
typedef typename property_traits<WeightMap>::value_type weight_type;
- return kamada_kawai_spring_layout(g, position, weight, edge_or_side_length,
+ return kamada_kawai_spring_layout(g, position, weight, topology, edge_or_side_length,
done, weight_type(1));
}
/**
* \overload
*/
- template<typename Graph, typename PositionMap, typename WeightMap,
+ template<typename Topology, typename Graph, typename PositionMap, typename WeightMap,
typename T, bool EdgeOrSideLength>
bool
kamada_kawai_spring_layout(
const Graph& g,
PositionMap position,
WeightMap weight,
+ const Topology& topology,
detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length)
{
typedef typename property_traits<WeightMap>::value_type weight_type;
- return kamada_kawai_spring_layout(g, position, weight, edge_or_side_length,
+ return kamada_kawai_spring_layout(g, position, weight, topology, edge_or_side_length,
layout_tolerance<weight_type>(),
weight_type(1.0),
get(vertex_index, g));
Modified: branches/release/boost/graph/kolmogorov_max_flow.hpp
==============================================================================
--- branches/release/boost/graph/kolmogorov_max_flow.hpp (original)
+++ branches/release/boost/graph/kolmogorov_max_flow.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -42,7 +42,7 @@
#include <boost/pending/queue.hpp>
#include <boost/limits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/none_t.hpp>
#include <boost/graph/graph_concepts.hpp>
#include <boost/graph/named_function_params.hpp>
Modified: branches/release/boost/graph/kruskal_min_spanning_tree.hpp
==============================================================================
--- branches/release/boost/graph/kruskal_min_spanning_tree.hpp (original)
+++ branches/release/boost/graph/kruskal_min_spanning_tree.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -23,7 +23,7 @@
#include <queue>
#include <functional>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_concepts.hpp>
#include <boost/graph/named_function_params.hpp>
#include <boost/pending/disjoint_sets.hpp>
Modified: branches/release/boost/graph/make_biconnected_planar.hpp
==============================================================================
--- branches/release/boost/graph/make_biconnected_planar.hpp (original)
+++ branches/release/boost/graph/make_biconnected_planar.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,7 +11,7 @@
#include <boost/config.hpp>
#include <boost/tuple/tuple.hpp> //for tie
#include <boost/graph/biconnected_components.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <vector>
#include <iterator>
#include <algorithm>
Modified: branches/release/boost/graph/make_connected.hpp
==============================================================================
--- branches/release/boost/graph/make_connected.hpp (original)
+++ branches/release/boost/graph/make_connected.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,7 +12,7 @@
#include <boost/utility.hpp> //for next
#include <boost/tuple/tuple.hpp> //for tie
#include <boost/graph/connected_components.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <vector>
#include <boost/graph/planar_detail/add_edge_visitors.hpp>
Modified: branches/release/boost/graph/make_maximal_planar.hpp
==============================================================================
--- branches/release/boost/graph/make_maximal_planar.hpp (original)
+++ branches/release/boost/graph/make_maximal_planar.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,7 +11,7 @@
#include <boost/config.hpp>
#include <boost/tuple/tuple.hpp> //for tie
#include <boost/graph/biconnected_components.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <vector>
#include <iterator>
#include <algorithm>
Modified: branches/release/boost/graph/max_cardinality_matching.hpp
==============================================================================
--- branches/release/boost/graph/max_cardinality_matching.hpp (original)
+++ branches/release/boost/graph/max_cardinality_matching.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -15,7 +15,7 @@
#include <deque>
#include <algorithm> // for std::sort and std::stable_sort
#include <utility> // for std::pair
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/utility.hpp> // for boost::tie
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/visitors.hpp>
Modified: branches/release/boost/graph/minimum_degree_ordering.hpp
==============================================================================
--- branches/release/boost/graph/minimum_degree_ordering.hpp (original)
+++ branches/release/boost/graph/minimum_degree_ordering.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -17,7 +17,7 @@
#include <boost/pending/bucket_sorter.hpp>
#include <boost/detail/numeric_traits.hpp> // for integer_traits
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost {
Modified: branches/release/boost/graph/named_function_params.hpp
==============================================================================
--- branches/release/boost/graph/named_function_params.hpp (original)
+++ branches/release/boost/graph/named_function_params.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,6 +11,15 @@
#define BOOST_GRAPH_NAMED_FUNCTION_PARAMS_HPP
#include <boost/graph/properties.hpp>
+#include <boost/ref.hpp>
+#include <boost/parameter/name.hpp>
+#include <boost/parameter/binding.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/graph/named_function_params.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/property_map/shared_array_property_map.hpp>
namespace boost {
@@ -29,6 +38,9 @@
struct vertex_max_invariant_t { };
struct orig_to_copy_t { };
struct root_vertex_t { };
+ struct polling_t { };
+ struct lookahead_t { };
+ struct in_parallel_t { };
struct attractive_force_t { };
struct repulsive_force_t { };
struct force_pairs_t { };
@@ -38,13 +50,51 @@
struct diameter_range_t { };
struct learning_constant_range_t { };
- namespace detail {
- template <class T>
- struct wrap_ref {
- wrap_ref(T& r) : ref(r) {}
- T& ref;
- };
- }
+#define BOOST_BGL_DECLARE_NAMED_PARAMS \
+ BOOST_BGL_ONE_PARAM_CREF(weight_map, edge_weight) \
+ BOOST_BGL_ONE_PARAM_CREF(weight_map2, edge_weight2) \
+ BOOST_BGL_ONE_PARAM_CREF(distance_map, vertex_distance) \
+ BOOST_BGL_ONE_PARAM_CREF(predecessor_map, vertex_predecessor) \
+ BOOST_BGL_ONE_PARAM_CREF(rank_map, vertex_rank) \
+ BOOST_BGL_ONE_PARAM_CREF(root_map, vertex_root) \
+ BOOST_BGL_ONE_PARAM_CREF(root_vertex, root_vertex) \
+ BOOST_BGL_ONE_PARAM_CREF(edge_centrality_map, edge_centrality) \
+ BOOST_BGL_ONE_PARAM_CREF(centrality_map, vertex_centrality) \
+ BOOST_BGL_ONE_PARAM_CREF(color_map, vertex_color) \
+ BOOST_BGL_ONE_PARAM_CREF(edge_color_map, edge_color) \
+ BOOST_BGL_ONE_PARAM_CREF(capacity_map, edge_capacity) \
+ BOOST_BGL_ONE_PARAM_CREF(residual_capacity_map, edge_residual_capacity) \
+ BOOST_BGL_ONE_PARAM_CREF(reverse_edge_map, edge_reverse) \
+ BOOST_BGL_ONE_PARAM_CREF(discover_time_map, vertex_discover_time) \
+ BOOST_BGL_ONE_PARAM_CREF(lowpoint_map, vertex_lowpoint) \
+ BOOST_BGL_ONE_PARAM_CREF(vertex_index_map, vertex_index) \
+ BOOST_BGL_ONE_PARAM_CREF(vertex_index1_map, vertex_index1) \
+ BOOST_BGL_ONE_PARAM_CREF(vertex_index2_map, vertex_index2) \
+ BOOST_BGL_ONE_PARAM_CREF(visitor, graph_visitor) \
+ BOOST_BGL_ONE_PARAM_CREF(distance_compare, distance_compare) \
+ BOOST_BGL_ONE_PARAM_CREF(distance_combine, distance_combine) \
+ BOOST_BGL_ONE_PARAM_CREF(distance_inf, distance_inf) \
+ BOOST_BGL_ONE_PARAM_CREF(distance_zero, distance_zero) \
+ BOOST_BGL_ONE_PARAM_CREF(edge_copy, edge_copy) \
+ BOOST_BGL_ONE_PARAM_CREF(vertex_copy, vertex_copy) \
+ BOOST_BGL_ONE_PARAM_REF(buffer, buffer_param) \
+ BOOST_BGL_ONE_PARAM_CREF(orig_to_copy, orig_to_copy) \
+ BOOST_BGL_ONE_PARAM_CREF(isomorphism_map, vertex_isomorphism) \
+ BOOST_BGL_ONE_PARAM_CREF(vertex_invariant, vertex_invariant) \
+ BOOST_BGL_ONE_PARAM_CREF(vertex_invariant1, vertex_invariant1) \
+ BOOST_BGL_ONE_PARAM_CREF(vertex_invariant2, vertex_invariant2) \
+ BOOST_BGL_ONE_PARAM_CREF(vertex_max_invariant, vertex_max_invariant) \
+ BOOST_BGL_ONE_PARAM_CREF(polling, polling) \
+ BOOST_BGL_ONE_PARAM_CREF(lookahead, lookahead) \
+ BOOST_BGL_ONE_PARAM_CREF(in_parallel, in_parallel) \
+ BOOST_BGL_ONE_PARAM_CREF(displacement_map, vertex_displacement) \
+ BOOST_BGL_ONE_PARAM_CREF(attractive_force, attractive_force) \
+ BOOST_BGL_ONE_PARAM_CREF(repulsive_force, repulsive_force) \
+ BOOST_BGL_ONE_PARAM_CREF(force_pairs, force_pairs) \
+ BOOST_BGL_ONE_PARAM_CREF(cooling, cooling) \
+ BOOST_BGL_ONE_PARAM_CREF(iterations, iterations) \
+ BOOST_BGL_ONE_PARAM_CREF(diameter_range, diameter_range) \
+ BOOST_BGL_ONE_PARAM_CREF(learning_constant_range, learning_constant_range)
template <typename T, typename Tag, typename Base = no_property>
struct bgl_named_params : public Base
@@ -53,598 +103,67 @@
typedef Base next_type;
typedef Tag tag_type;
typedef T value_type;
- bgl_named_params(T v) : m_value(v) { }
+ bgl_named_params(T v = T()) : m_value(v) { }
bgl_named_params(T v, const Base& b) : Base(b), m_value(v) { }
T m_value;
- template <typename WeightMap>
- bgl_named_params<WeightMap, edge_weight_t, self>
- weight_map(const WeightMap& pmap) const {
- typedef bgl_named_params<WeightMap, edge_weight_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename WeightMap>
- bgl_named_params<WeightMap, edge_weight2_t, self>
- weight_map2(const WeightMap& pmap) const {
- typedef bgl_named_params<WeightMap, edge_weight2_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename DistanceMap>
- bgl_named_params<DistanceMap, vertex_distance_t, self>
- distance_map(const DistanceMap& pmap) const {
- typedef bgl_named_params<DistanceMap, vertex_distance_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename PredecessorMap>
- bgl_named_params<PredecessorMap, vertex_predecessor_t, self>
- predecessor_map(const PredecessorMap& pmap) const {
- typedef bgl_named_params<PredecessorMap, vertex_predecessor_t, self>
- Params;
- return Params(pmap, *this);
- }
-
- template <typename RankMap>
- bgl_named_params<RankMap, vertex_rank_t, self>
- rank_map(const RankMap& pmap) const {
- typedef bgl_named_params<RankMap, vertex_rank_t, self>
- Params;
- return Params(pmap, *this);
- }
-
- template <typename RootMap>
- bgl_named_params<RootMap, vertex_root_t, self>
- root_map(const RootMap& pmap) const {
- typedef bgl_named_params<RootMap, vertex_root_t, self>
- Params;
- return Params(pmap, *this);
- }
-
- template <typename Vertex>
- bgl_named_params<Vertex, root_vertex_t, self>
- root_vertex(const Vertex& r) const {
- typedef bgl_named_params<Vertex, root_vertex_t, self> Params;
- return Params(r, *this);
- }
-
- template <typename EdgeCentralityMap>
- bgl_named_params<EdgeCentralityMap, edge_centrality_t, self>
- edge_centrality_map(const EdgeCentralityMap& r) const {
- typedef bgl_named_params<EdgeCentralityMap, edge_centrality_t, self> Params;
- return Params(r, *this);
- }
-
- template <typename CentralityMap>
- bgl_named_params<CentralityMap, vertex_centrality_t, self>
- centrality_map(const CentralityMap& r) const {
- typedef bgl_named_params<CentralityMap, vertex_centrality_t, self> Params;
- return Params(r, *this);
- }
-
- template <typename ColorMap>
- bgl_named_params<ColorMap, vertex_color_t, self>
- color_map(const ColorMap& pmap) const {
- typedef bgl_named_params<ColorMap, vertex_color_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename ColorMap>
- bgl_named_params<ColorMap, vertex_color_t, self>
- vertex_color_map(const ColorMap& pmap) const {
- typedef bgl_named_params<ColorMap, vertex_color_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename ColorMap>
- bgl_named_params<ColorMap, edge_color_t, self>
- edge_color_map(const ColorMap& pmap) const {
- typedef bgl_named_params<ColorMap, edge_color_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename CapacityMap>
- bgl_named_params<CapacityMap, edge_capacity_t, self>
- capacity_map(CapacityMap pmap) {
- typedef bgl_named_params<CapacityMap, edge_capacity_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename Residual_CapacityMap>
- bgl_named_params<Residual_CapacityMap, edge_residual_capacity_t, self>
- residual_capacity_map(Residual_CapacityMap pmap) {
- typedef bgl_named_params<Residual_CapacityMap,
- edge_residual_capacity_t, self>
- Params;
- return Params(pmap, *this);
- }
-
- template <typename ReverseMap>
- bgl_named_params<ReverseMap, edge_reverse_t, self>
- reverse_edge_map(ReverseMap pmap) {
- typedef bgl_named_params<ReverseMap,
- edge_reverse_t, self>
- Params;
- return Params(pmap, *this);
- }
-
- template <typename DiscoverTimeMap>
- bgl_named_params<DiscoverTimeMap, vertex_discover_time_t, self>
- discover_time_map(const DiscoverTimeMap& pmap) const {
- typedef bgl_named_params<DiscoverTimeMap, vertex_discover_time_t, self>
- Params;
- return Params(pmap, *this);
- }
-
- template <typename LowPointMap>
- bgl_named_params<LowPointMap, vertex_lowpoint_t, self>
- lowpoint_map(const LowPointMap& pmap) const {
- typedef bgl_named_params<LowPointMap, vertex_lowpoint_t, self>
- Params;
- return Params(pmap, *this);
- }
-
- template <typename IndexMap>
- bgl_named_params<IndexMap, vertex_index_t, self>
- vertex_index_map(const IndexMap& pmap) const {
- typedef bgl_named_params<IndexMap, vertex_index_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename IndexMap>
- bgl_named_params<IndexMap, vertex_index1_t, self>
- vertex_index1_map(const IndexMap& pmap) const {
- typedef bgl_named_params<IndexMap, vertex_index1_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename IndexMap>
- bgl_named_params<IndexMap, vertex_index2_t, self>
- vertex_index2_map(const IndexMap& pmap) const {
- typedef bgl_named_params<IndexMap, vertex_index2_t, self> Params;
- return Params(pmap, *this);
- }
-
- template <typename Visitor>
- bgl_named_params<Visitor, graph_visitor_t, self>
- visitor(const Visitor& vis) const {
- typedef bgl_named_params<Visitor, graph_visitor_t, self> Params;
- return Params(vis, *this);
- }
-
- template <typename Compare>
- bgl_named_params<Compare, distance_compare_t, self>
- distance_compare(Compare cmp) const {
- typedef bgl_named_params<Compare, distance_compare_t, self> Params;
- return Params(cmp, *this);
- }
-
- template <typename Combine>
- bgl_named_params<Combine, distance_combine_t, self>
- distance_combine(Combine cmb) const {
- typedef bgl_named_params<Combine, distance_combine_t, self> Params;
- return Params(cmb, *this);
- }
-
- template <typename Init>
- bgl_named_params<Init, distance_inf_t, self>
- distance_inf(Init init) const {
- typedef bgl_named_params<Init, distance_inf_t, self> Params;
- return Params(init, *this);
- }
-
- template <typename Init>
- bgl_named_params<Init, distance_zero_t, self>
- distance_zero(Init init) const {
- typedef bgl_named_params<Init, distance_zero_t, self> Params;
- return Params(init, *this);
- }
-
- template <typename Buffer>
- bgl_named_params<detail::wrap_ref<Buffer>, buffer_param_t, self>
- buffer(Buffer& b) const {
- typedef bgl_named_params<detail::wrap_ref<Buffer>, buffer_param_t, self>
- Params;
- return Params(detail::wrap_ref<Buffer>(b), *this);
- }
-
- template <typename Copier>
- bgl_named_params<Copier, edge_copy_t, self>
- edge_copy(const Copier& c) const {
- typedef bgl_named_params<Copier, edge_copy_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename Copier>
- bgl_named_params<Copier, vertex_copy_t, self>
- vertex_copy(const Copier& c) const {
- typedef bgl_named_params<Copier, vertex_copy_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename Orig2CopyMap>
- bgl_named_params<Orig2CopyMap, orig_to_copy_t, self>
- orig_to_copy(const Orig2CopyMap& c) const {
- typedef bgl_named_params<Orig2CopyMap, orig_to_copy_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename IsoMap>
- bgl_named_params<IsoMap, vertex_isomorphism_t, self>
- isomorphism_map(const IsoMap& c) const {
- typedef bgl_named_params<IsoMap, vertex_isomorphism_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename VertexInvar>
- bgl_named_params<VertexInvar, vertex_invariant_t, self>
- vertex_invariant(const VertexInvar& c) const {
- typedef bgl_named_params<VertexInvar, vertex_invariant_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename VertexInvar>
- bgl_named_params<VertexInvar, vertex_invariant1_t, self>
- vertex_invariant1(const VertexInvar& c) const {
- typedef bgl_named_params<VertexInvar, vertex_invariant1_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename VertexInvar>
- bgl_named_params<VertexInvar, vertex_invariant2_t, self>
- vertex_invariant2(const VertexInvar& c) const {
- typedef bgl_named_params<VertexInvar, vertex_invariant2_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename VertexMaxInvar>
- bgl_named_params<VertexMaxInvar, vertex_max_invariant_t, self>
- vertex_max_invariant(const VertexMaxInvar& c) const {
- typedef bgl_named_params<VertexMaxInvar, vertex_max_invariant_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename VertexDisplacement>
- bgl_named_params<VertexDisplacement, vertex_displacement_t, self>
- displacement_map(const VertexDisplacement& c) const {
- typedef bgl_named_params<VertexDisplacement, vertex_displacement_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename AttractiveForce>
- bgl_named_params<AttractiveForce, attractive_force_t, self>
- attractive_force(const AttractiveForce& c) {
- typedef bgl_named_params<AttractiveForce, attractive_force_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename RepulsiveForce>
- bgl_named_params<RepulsiveForce, repulsive_force_t, self>
- repulsive_force(const RepulsiveForce& c) {
- typedef bgl_named_params<RepulsiveForce, repulsive_force_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename ForcePairs>
- bgl_named_params<ForcePairs, force_pairs_t, self>
- force_pairs(const ForcePairs& c) {
- typedef bgl_named_params<ForcePairs, force_pairs_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename Cooling>
- bgl_named_params<Cooling, cooling_t, self>
- cooling(const Cooling& c) {
- typedef bgl_named_params<Cooling, cooling_t, self> Params;
- return Params(c, *this);
- }
-
- template <typename TP>
- bgl_named_params<TP, iterations_t, self>
- iterations(const TP& c) {
- typedef bgl_named_params<TP, iterations_t, self> Params;
- return Params(c, *this);
- }
-
- template<typename TP>
- bgl_named_params<std::pair<TP, TP>, diameter_range_t, self>
- diameter_range(const std::pair<TP, TP>& c) {
- typedef bgl_named_params<std::pair<TP, TP>, diameter_range_t, self> Params;
- return Params(c, *this);
- }
-
- template<typename TP>
- bgl_named_params<std::pair<TP, TP>, learning_constant_range_t, self>
- learning_constant_range(const std::pair<TP, TP>& c) {
- typedef bgl_named_params<std::pair<TP, TP>, learning_constant_range_t, self>
- Params;
- return Params(c, *this);
- }
+#define BOOST_BGL_ONE_PARAM_REF(name, key) \
+ template <typename PType> \
+ bgl_named_params<boost::reference_wrapper<PType>, BOOST_PP_CAT(key, _t), self> \
+ name(PType& p) const { \
+ typedef bgl_named_params<boost::reference_wrapper<PType>, BOOST_PP_CAT(key, _t), self> Params; \
+ return Params(boost::ref(p), *this); \
+ } \
+
+#define BOOST_BGL_ONE_PARAM_CREF(name, key) \
+ template <typename PType> \
+ bgl_named_params<PType, BOOST_PP_CAT(key, _t), self> \
+ name(const PType& p) const { \
+ typedef bgl_named_params<PType, BOOST_PP_CAT(key, _t), self> Params; \
+ return Params(p, *this); \
+ } \
+
+BOOST_BGL_DECLARE_NAMED_PARAMS
+
+#undef BOOST_BGL_ONE_PARAM_REF
+#undef BOOST_BGL_ONE_PARAM_CREF
+
+ // Duplicate
+ template <typename PType>
+ bgl_named_params<PType, vertex_color_t, self>
+ vertex_color_map(const PType& p) const {return this->color_map(p);}
};
- template <typename WeightMap>
- bgl_named_params<WeightMap, edge_weight_t>
- weight_map(WeightMap pmap) {
- typedef bgl_named_params<WeightMap, edge_weight_t> Params;
- return Params(pmap);
- }
-
- template <typename WeightMap>
- bgl_named_params<WeightMap, edge_weight2_t>
- weight_map2(WeightMap pmap) {
- typedef bgl_named_params<WeightMap, edge_weight2_t> Params;
- return Params(pmap);
- }
-
- template <typename DistanceMap>
- bgl_named_params<DistanceMap, vertex_distance_t>
- distance_map(DistanceMap pmap) {
- typedef bgl_named_params<DistanceMap, vertex_distance_t> Params;
- return Params(pmap);
- }
-
- template <typename PredecessorMap>
- bgl_named_params<PredecessorMap, vertex_predecessor_t>
- predecessor_map(PredecessorMap pmap) {
- typedef bgl_named_params<PredecessorMap, vertex_predecessor_t> Params;
- return Params(pmap);
- }
-
- template <typename RankMap>
- bgl_named_params<RankMap, vertex_rank_t>
- rank_map(RankMap pmap) {
- typedef bgl_named_params<RankMap, vertex_rank_t> Params;
- return Params(pmap);
- }
-
- template <typename RootMap>
- bgl_named_params<RootMap, vertex_root_t>
- root_map(RootMap pmap) {
- typedef bgl_named_params<RootMap, vertex_root_t> Params;
- return Params(pmap);
- }
-
- template <typename Vertex>
- bgl_named_params<Vertex, root_vertex_t>
- root_vertex(const Vertex& r) {
- typedef bgl_named_params<Vertex, root_vertex_t> Params;
- return Params(r);
- }
-
- template <typename EdgeCentralityMap>
- bgl_named_params<EdgeCentralityMap, edge_centrality_t>
- edge_centrality_map(const EdgeCentralityMap& r) {
- typedef bgl_named_params<EdgeCentralityMap, edge_centrality_t> Params;
- return Params(r);
- }
-
- template <typename CentralityMap>
- bgl_named_params<CentralityMap, vertex_centrality_t>
- centrality_map(const CentralityMap& r) {
- typedef bgl_named_params<CentralityMap, vertex_centrality_t> Params;
- return Params(r);
- }
-
- template <typename ColorMap>
- bgl_named_params<ColorMap, vertex_color_t>
- color_map(ColorMap pmap) {
- typedef bgl_named_params<ColorMap, vertex_color_t> Params;
- return Params(pmap);
- }
-
- template <typename CapacityMap>
- bgl_named_params<CapacityMap, edge_capacity_t>
- capacity_map(CapacityMap pmap) {
- typedef bgl_named_params<CapacityMap, edge_capacity_t> Params;
- return Params(pmap);
- }
-
- template <typename Residual_CapacityMap>
- bgl_named_params<Residual_CapacityMap, edge_residual_capacity_t>
- residual_capacity_map(Residual_CapacityMap pmap) {
- typedef bgl_named_params<Residual_CapacityMap, edge_residual_capacity_t>
- Params;
- return Params(pmap);
- }
+#define BOOST_BGL_ONE_PARAM_REF(name, key) \
+ template <typename PType> \
+ bgl_named_params<boost::reference_wrapper<PType>, BOOST_PP_CAT(key, _t)> \
+ name(PType& p) { \
+ typedef bgl_named_params<boost::reference_wrapper<PType>, BOOST_PP_CAT(key, _t)> Params; \
+ return Params(boost::ref(p)); \
+ } \
+
+#define BOOST_BGL_ONE_PARAM_CREF(name, key) \
+ template <typename PType> \
+ bgl_named_params<PType, BOOST_PP_CAT(key, _t)> \
+ name(const PType& p) { \
+ typedef bgl_named_params<PType, BOOST_PP_CAT(key, _t)> Params; \
+ return Params(p); \
+ } \
+
+BOOST_BGL_DECLARE_NAMED_PARAMS
+
+#undef BOOST_BGL_ONE_PARAM_REF
+#undef BOOST_BGL_ONE_PARAM_CREF
+
+ // Duplicate
+ template <typename PType>
+ bgl_named_params<PType, vertex_color_t>
+ vertex_color_map(const PType& p) {return color_map(p);}
- template <typename ReverseMap>
- bgl_named_params<ReverseMap, edge_reverse_t>
- reverse_edge_map(ReverseMap pmap) {
- typedef bgl_named_params<ReverseMap, edge_reverse_t>
- Params;
- return Params(pmap);
- }
-
- template <typename DiscoverTimeMap>
- bgl_named_params<DiscoverTimeMap, vertex_discover_time_t>
- discover_time_map(DiscoverTimeMap pmap) {
- typedef bgl_named_params<DiscoverTimeMap, vertex_discover_time_t> Params;
- return Params(pmap);
- }
-
- template <typename LowPointMap>
- bgl_named_params<LowPointMap, vertex_lowpoint_t>
- lowpoint_map(LowPointMap pmap) {
- typedef bgl_named_params<LowPointMap, vertex_lowpoint_t> Params;
- return Params(pmap);
- }
-
- template <typename IndexMap>
- bgl_named_params<IndexMap, vertex_index_t>
- vertex_index_map(IndexMap pmap) {
- typedef bgl_named_params<IndexMap, vertex_index_t> Params;
- return Params(pmap);
- }
-
- template <typename IndexMap>
- bgl_named_params<IndexMap, vertex_index1_t>
- vertex_index1_map(const IndexMap& pmap) {
- typedef bgl_named_params<IndexMap, vertex_index1_t> Params;
- return Params(pmap);
- }
-
- template <typename IndexMap>
- bgl_named_params<IndexMap, vertex_index2_t>
- vertex_index2_map(const IndexMap& pmap) {
- typedef bgl_named_params<IndexMap, vertex_index2_t> Params;
- return Params(pmap);
- }
-
- template <typename Visitor>
- bgl_named_params<Visitor, graph_visitor_t>
- visitor(const Visitor& vis) {
- typedef bgl_named_params<Visitor, graph_visitor_t> Params;
- return Params(vis);
- }
-
- template <typename Compare>
- bgl_named_params<Compare, distance_compare_t>
- distance_compare(Compare cmp) {
- typedef bgl_named_params<Compare, distance_compare_t> Params;
- return Params(cmp);
- }
-
- template <typename Combine>
- bgl_named_params<Combine, distance_combine_t>
- distance_combine(Combine cmb) {
- typedef bgl_named_params<Combine, distance_combine_t> Params;
- return Params(cmb);
- }
-
- template <typename Init>
- bgl_named_params<Init, distance_inf_t>
- distance_inf(Init init) {
- typedef bgl_named_params<Init, distance_inf_t> Params;
- return Params(init);
- }
-
- template <typename Init>
- bgl_named_params<Init, distance_zero_t>
- distance_zero(Init init) {
- typedef bgl_named_params<Init, distance_zero_t> Params;
- return Params(init);
- }
-
- template <typename Buffer>
- bgl_named_params<detail::wrap_ref<Buffer>, buffer_param_t>
- buffer(Buffer& b) {
- typedef bgl_named_params<detail::wrap_ref<Buffer>, buffer_param_t> Params;
- return Params(detail::wrap_ref<Buffer>(b));
- }
-
- template <typename Copier>
- bgl_named_params<Copier, edge_copy_t>
- edge_copy(const Copier& c) {
- typedef bgl_named_params<Copier, edge_copy_t> Params;
- return Params(c);
- }
-
- template <typename Copier>
- bgl_named_params<Copier, vertex_copy_t>
- vertex_copy(const Copier& c) {
- typedef bgl_named_params<Copier, vertex_copy_t> Params;
- return Params(c);
- }
-
- template <typename Orig2CopyMap>
- bgl_named_params<Orig2CopyMap, orig_to_copy_t>
- orig_to_copy(const Orig2CopyMap& c) {
- typedef bgl_named_params<Orig2CopyMap, orig_to_copy_t> Params;
- return Params(c);
- }
-
- template <typename IsoMap>
- bgl_named_params<IsoMap, vertex_isomorphism_t>
- isomorphism_map(const IsoMap& c) {
- typedef bgl_named_params<IsoMap, vertex_isomorphism_t> Params;
- return Params(c);
- }
-
- template <typename VertexInvar>
- bgl_named_params<VertexInvar, vertex_invariant_t>
- vertex_invariant(const VertexInvar& c) {
- typedef bgl_named_params<VertexInvar, vertex_invariant_t> Params;
- return Params(c);
- }
-
- template <typename VertexInvar>
- bgl_named_params<VertexInvar, vertex_invariant1_t>
- vertex_invariant1(const VertexInvar& c) {
- typedef bgl_named_params<VertexInvar, vertex_invariant1_t> Params;
- return Params(c);
- }
-
- template <typename VertexInvar>
- bgl_named_params<VertexInvar, vertex_invariant2_t>
- vertex_invariant2(const VertexInvar& c) {
- typedef bgl_named_params<VertexInvar, vertex_invariant2_t> Params;
- return Params(c);
- }
-
- template <typename VertexMaxInvar>
- bgl_named_params<VertexMaxInvar, vertex_max_invariant_t>
- vertex_max_invariant(const VertexMaxInvar& c) {
- typedef bgl_named_params<VertexMaxInvar, vertex_max_invariant_t> Params;
- return Params(c);
- }
-
- template <typename VertexDisplacement>
- bgl_named_params<VertexDisplacement, vertex_displacement_t>
- displacement_map(const VertexDisplacement& c) {
- typedef bgl_named_params<VertexDisplacement, vertex_displacement_t> Params;
- return Params(c);
- }
-
- template <typename AttractiveForce>
- bgl_named_params<AttractiveForce, attractive_force_t>
- attractive_force(const AttractiveForce& c) {
- typedef bgl_named_params<AttractiveForce, attractive_force_t> Params;
- return Params(c);
- }
-
- template <typename RepulsiveForce>
- bgl_named_params<RepulsiveForce, repulsive_force_t>
- repulsive_force(const RepulsiveForce& c) {
- typedef bgl_named_params<RepulsiveForce, repulsive_force_t> Params;
- return Params(c);
- }
-
- template <typename ForcePairs>
- bgl_named_params<ForcePairs, force_pairs_t>
- force_pairs(const ForcePairs& c) {
- typedef bgl_named_params<ForcePairs, force_pairs_t> Params;
- return Params(c);
- }
-
- template <typename Cooling>
- bgl_named_params<Cooling, cooling_t>
- cooling(const Cooling& c) {
- typedef bgl_named_params<Cooling, cooling_t> Params;
- return Params(c);
- }
-
- template <typename T>
- bgl_named_params<T, iterations_t>
- iterations(const T& c) {
- typedef bgl_named_params<T, iterations_t> Params;
- return Params(c);
- }
-
- template<typename T>
- bgl_named_params<std::pair<T, T>, diameter_range_t>
- diameter_range(const std::pair<T, T>& c) {
- typedef bgl_named_params<std::pair<T, T>, diameter_range_t> Params;
- return Params(c);
- }
-
- template<typename T>
- bgl_named_params<std::pair<T, T>, learning_constant_range_t>
- learning_constant_range(const std::pair<T, T>& c) {
- typedef bgl_named_params<std::pair<T, T>, learning_constant_range_t>
- Params;
- return Params(c);
+ namespace detail {
+ struct unused_tag_type {};
}
+ typedef bgl_named_params<char, detail::unused_tag_type> no_named_parameters;
//===========================================================================
// Functions for extracting parameters from bgl_named_params
@@ -790,6 +309,194 @@
return Choice::apply(p, g, tag);
}
+ // Declare all new tags
+ namespace graph {
+ namespace keywords {
+#define BOOST_BGL_ONE_PARAM_REF(name, key) BOOST_PARAMETER_NAME(name)
+#define BOOST_BGL_ONE_PARAM_CREF(name, key) BOOST_PARAMETER_NAME(name)
+ BOOST_BGL_DECLARE_NAMED_PARAMS
+#undef BOOST_BGL_ONE_PARAM_REF
+#undef BOOST_BGL_ONE_PARAM_CREF
+ }
+ }
+
+ namespace detail {
+ template <typename Tag> struct convert_one_keyword {};
+#define BOOST_BGL_ONE_PARAM_REF(name, key) \
+ template <> \
+ struct convert_one_keyword<BOOST_PP_CAT(key, _t)> { \
+ typedef boost::graph::keywords::tag::name type; \
+ };
+#define BOOST_BGL_ONE_PARAM_CREF(name, key) BOOST_BGL_ONE_PARAM_REF(name, key)
+ BOOST_BGL_DECLARE_NAMED_PARAMS
+#undef BOOST_BGL_ONE_PARAM_REF
+#undef BOOST_BGL_ONE_PARAM_CREF
+
+ template <typename T>
+ struct convert_bgl_params_to_boost_parameter {
+ typedef typename convert_one_keyword<typename T::tag_type>::type new_kw;
+ typedef boost::parameter::aux::tagged_argument<new_kw, const typename T::value_type> tagged_arg_type;
+ typedef convert_bgl_params_to_boost_parameter<typename T::next_type> rest_conv;
+ typedef boost::parameter::aux::arg_list<tagged_arg_type, typename rest_conv::type> type;
+ static type conv(const T& x) {
+ return type(tagged_arg_type(x.m_value), rest_conv::conv(x));
+ }
+ };
+
+ template <typename P, typename R>
+ struct convert_bgl_params_to_boost_parameter<bgl_named_params<P, int, R> > {
+ typedef convert_bgl_params_to_boost_parameter<R> rest_conv;
+ typedef typename rest_conv::type type;
+ static type conv(const bgl_named_params<P, int, R>& x) {
+ return rest_conv::conv(x);
+ }
+ };
+
+ template <>
+ struct convert_bgl_params_to_boost_parameter<boost::no_property> {
+ typedef boost::parameter::aux::empty_arg_list type;
+ static type conv(const boost::no_property&) {return type();}
+ };
+
+ template <>
+ struct convert_bgl_params_to_boost_parameter<boost::no_named_parameters> {
+ typedef boost::parameter::aux::empty_arg_list type;
+ static type conv(const boost::no_property&) {return type();}
+ };
+
+ struct bgl_parameter_not_found_type {};
+
+ template <typename ArgPack, typename KeywordType>
+ struct parameter_exists : boost::mpl::not_<boost::is_same<typename boost::parameter::binding<ArgPack, KeywordType, bgl_parameter_not_found_type>::type, bgl_parameter_not_found_type> > {};
+ }
+
+#define BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(old_type, old_var) \
+ typedef typename boost::detail::convert_bgl_params_to_boost_parameter<old_type>::type arg_pack_type; \
+ arg_pack_type arg_pack = boost::detail::convert_bgl_params_to_boost_parameter<old_type>::conv(old_var);
+
+ namespace detail {
+
+ template <typename ArgType, typename Prop, typename Graph, bool Exists>
+ struct override_const_property_t {
+ typedef ArgType result_type;
+ result_type operator()(const Graph& g, const typename boost::add_reference<ArgType>::type a) const {return a;}
+ };
+
+ template <typename ArgType, typename Prop, typename Graph>
+ struct override_const_property_t<ArgType, Prop, Graph, false> {
+ typedef typename boost::property_map<Graph, Prop>::const_type result_type;
+ result_type operator()(const Graph& g, const ArgType& a) const {return get(Prop(), g);}
+ };
+
+ template <typename ArgPack, typename Tag, typename Prop, typename Graph>
+ typename override_const_property_t<
+ typename boost::parameter::value_type<ArgPack, Tag, int>::type,
+ Prop,
+ Graph,
+ boost::detail::parameter_exists<ArgPack, Tag>::value
+ >::result_type
+ override_const_property(const ArgPack& ap, const boost::parameter::keyword<Tag>& t, const Graph& g, Prop prop) {
+ return override_const_property_t<
+ typename boost::parameter::value_type<ArgPack, Tag, int>::type,
+ Prop,
+ Graph,
+ boost::detail::parameter_exists<ArgPack, Tag>::value
+ >()(g, ap[t | 0]);
+ }
+
+ template <typename ArgType, typename Prop, typename Graph, bool Exists>
+ struct override_property_t {
+ typedef ArgType result_type;
+ result_type operator()(const Graph& g, const typename boost::add_reference<ArgType>::type a) const {return a;}
+ };
+
+ template <typename ArgType, typename Prop, typename Graph>
+ struct override_property_t<ArgType, Prop, Graph, false> {
+ typedef typename boost::property_map<Graph, Prop>::type result_type;
+ result_type operator()(const Graph& g, const ArgType& a) const {return get(Prop(), g);}
+ };
+
+ template <typename ArgPack, typename Tag, typename Prop, typename Graph>
+ typename override_property_t<
+ typename boost::parameter::value_type<ArgPack, Tag, int>::type,
+ Prop,
+ Graph,
+ boost::detail::parameter_exists<ArgPack, Tag>::value
+ >::result_type
+ override_property(const ArgPack& ap, const boost::parameter::keyword<Tag>& t, const Graph& g, Prop prop) {
+ return override_property_t<
+ typename boost::parameter::value_type<ArgPack, Tag, int>::type,
+ Prop,
+ Graph,
+ boost::detail::parameter_exists<ArgPack, Tag>::value
+ >()(g, ap[t | 0]);
+ }
+
+ }
+
+ namespace detail {
+
+ template <bool Exists, typename Graph, typename ArgPack, typename Value, typename PM>
+ struct color_map_maker_helper {
+ typedef PM map_type;
+ static PM make_map(const Graph&, Value, const PM& pm, const ArgPack&) {
+ return pm;
+ }
+ };
+
+ template <typename Graph, typename ArgPack, typename Value, typename PM>
+ struct color_map_maker_helper<false, Graph, ArgPack, Value, PM> {
+ typedef typename boost::remove_const<
+ typename override_const_property_t<
+ typename boost::parameter::value_type<
+ ArgPack, boost::graph::keywords::tag::vertex_index_map, int>::type,
+ boost::vertex_index_t,
+ Graph,
+ boost::detail::parameter_exists<
+ ArgPack, boost::graph::keywords::tag::vertex_index_map>::value
+ >::result_type>::type vi_map_type;
+ typedef
+ boost::shared_array_property_map<Value, vi_map_type>
+ map_type;
+ static map_type make_map(const Graph& g,
+ Value v,
+ const PM&,
+ const ArgPack& ap) {
+ return make_shared_array_property_map(
+ num_vertices(g),
+ v,
+ override_const_property(
+ ap,
+ boost::graph::keywords::_vertex_index_map,
+ g, vertex_index));
+ }
+ };
+
+ template <typename Graph, typename ArgPack>
+ struct color_map_maker {
+ BOOST_STATIC_CONSTANT(
+ bool,
+ has_color_map =
+ (parameter_exists<ArgPack, boost::graph::keywords::tag::color_map>
+ ::value));
+ typedef color_map_maker_helper<has_color_map, Graph, ArgPack, default_color_type,
+ typename boost::remove_const<
+ typename boost::parameter::value_type<
+ ArgPack,
+ boost::graph::keywords::tag::color_map,
+ int
+ >::type
+ >::type> helper;
+ typedef typename helper::map_type map_type;
+ static map_type make_map(const Graph& g, const ArgPack& ap) {
+ return helper::make_map(g, white_color, ap[boost::graph::keywords::_color_map | 0], ap);
+ }
+ };
+
+ }
+
} // namespace boost
+#undef BOOST_BGL_DECLARE_NAMED_PARAMS
+
#endif // BOOST_GRAPH_NAMED_FUNCTION_PARAMS_HPP
Modified: branches/release/boost/graph/named_graph.hpp
==============================================================================
--- branches/release/boost/graph/named_graph.hpp (original)
+++ branches/release/boost/graph/named_graph.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007 Douglas Gregor
+// Copyright (C) 2007 Douglas Gregor
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -33,7 +33,7 @@
* To enable the use of internal vertex names in a graph type,
* specialize the @c internal_vertex_name trait for your graph
* property (e.g., @c a City class, which stores information about the
- * vertices in a road map).
+ * vertices in a road map).
*/
template<typename VertexProperty>
struct internal_vertex_name
@@ -80,9 +80,9 @@
typedef vertex_name_type argument_type;
typedef VertexProperty result_type;
- VertexProperty operator()(const vertex_name_type& name)
- {
- return VertexProperty(name);
+ VertexProperty operator()(const vertex_name_type& name)
+ {
+ return VertexProperty(name);
}
};
@@ -105,8 +105,8 @@
typedef vertex_name_type argument_type;
typedef VertexProperty result_type;
- VertexProperty operator()(const vertex_name_type& name)
- {
+ VertexProperty operator()(const vertex_name_type& name)
+ {
boost::throw_exception(std::runtime_error("add_vertex: "
"unable to create a vertex from its name"));
}
@@ -159,9 +159,7 @@
* Named graph-specific metafunctions *
*******************************************************************/
namespace detail {
- /**
- * INTERNAL ONLY
- *
+ /** @internal
* Extracts the type of a bundled vertex property from a vertex
* property. The primary template matches when we have hit the end
* of the @c property<> list.
@@ -172,18 +170,14 @@
typedef VertexProperty type;
};
- /**
- *
- * INTERNAL ONLY
- *
+ /** @internal
* Recursively extract the bundled vertex property from a vertex
* property.
*/
template<typename Tag, typename T, typename Base>
struct extract_bundled_vertex<property<Tag, T, Base> >
: extract_bundled_vertex<Base>
- {
- };
+ { };
/**
* We have found the bundled vertex property type, marked with
@@ -253,11 +247,11 @@
private:
/// Key extractor for use with the multi_index_container
- struct extract_name_from_vertex
+ struct extract_name_from_vertex
{
typedef vertex_name_type result_type;
- extract_name_from_vertex(Graph& graph, const extract_name_type& extract)
+ extract_name_from_vertex(Graph& graph, const extract_name_type& extract)
: graph(graph), extract(extract) { }
const result_type& operator()(Vertex vertex) const
@@ -274,7 +268,7 @@
typedef multi_index::multi_index_container<
Vertex,
multi_index::indexed_by<
- multi_index::hashed_unique<multi_index::tag<vertex_name_t>,
+ multi_index::hashed_unique<multi_index::tag<vertex_name_t>,
extract_name_from_vertex> >
> named_vertices_type;
@@ -297,7 +291,7 @@
/// vertex. The name of the vertex will be removed from the mapping.
void removing_vertex(Vertex vertex);
- /// Notify the named_graph that we are clearing the graph.
+ /// Notify the named_graph that we are clearing the graph.
/// This will clear out all of the name->vertex mappings
void clearing_graph();
@@ -306,17 +300,17 @@
const Graph& derived() const { return static_cast<const Graph&>(*this); }
/// Extract the name from a vertex property instance
- typename extract_name_type::result_type
+ typename extract_name_type::result_type
extract_name(const bundled_vertex_property_type& property);
/// Search for a vertex that has the given property (based on its
/// name)
- optional<vertex_descriptor>
+ optional<vertex_descriptor>
vertex_by_property(const bundled_vertex_property_type& property);
/// Mapping from names to vertices
named_vertices_type named_vertices;
-
+
/// Constructs a vertex from the name of that vertex
vertex_constructor_type vertex_constructor;
};
@@ -362,14 +356,14 @@
}
template<BGL_NAMED_GRAPH_PARAMS>
-typename BGL_NAMED_GRAPH::extract_name_type::result_type
+typename BGL_NAMED_GRAPH::extract_name_type::result_type
BGL_NAMED_GRAPH::extract_name(const bundled_vertex_property_type& property)
{
return named_vertices.key_extractor().extract(property);
}
template<BGL_NAMED_GRAPH_PARAMS>
-optional<typename BGL_NAMED_GRAPH::vertex_descriptor>
+optional<typename BGL_NAMED_GRAPH::vertex_descriptor>
BGL_NAMED_GRAPH::
vertex_by_property(const bundled_vertex_property_type& property)
{
@@ -378,7 +372,7 @@
/// Retrieve the vertex associated with the given name
template<BGL_NAMED_GRAPH_PARAMS>
-optional<Vertex>
+optional<Vertex>
find_vertex(typename BGL_NAMED_GRAPH::vertex_name_type const& name,
const BGL_NAMED_GRAPH& g)
{
@@ -386,13 +380,13 @@
vertices_by_name_type;
// Retrieve the set of vertices indexed by name
- vertices_by_name_type const& vertices_by_name
+ vertices_by_name_type const& vertices_by_name
= g.named_vertices.template get<vertex_name_t>();
/// Look for a vertex with the given name
typename vertices_by_name_type::const_iterator iter
= vertices_by_name.find(name);
-
+
if (iter == vertices_by_name.end())
return optional<Vertex>(); // vertex not found
else
@@ -421,8 +415,8 @@
typename BGL_NAMED_GRAPH::vertex_name_type const& v_name,
BGL_NAMED_GRAPH& g)
{
- return add_edge(add_vertex(u_name, g.derived()),
- add_vertex(v_name, g.derived()),
+ return add_edge(add_vertex(u_name, g.derived()),
+ add_vertex(v_name, g.derived()),
g.derived());
}
@@ -433,8 +427,8 @@
typename BGL_NAMED_GRAPH::vertex_name_type const& v_name,
BGL_NAMED_GRAPH& g)
{
- return add_edge(u,
- add_vertex(v_name, g.derived()),
+ return add_edge(u,
+ add_vertex(v_name, g.derived()),
g.derived());
}
@@ -446,7 +440,7 @@
BGL_NAMED_GRAPH& g)
{
return add_edge(add_vertex(u_name, g.derived()),
- v,
+ v,
g.derived());
}
@@ -461,13 +455,13 @@
/**
* A graph mixin that can provide a mapping from names to vertices,
* and use that mapping to simplify creation and manipulation of
- * graphs.
+ * graphs.
*/
template<typename Graph, typename Vertex, typename VertexProperty,
- typename ExtractName
+ typename ExtractName
= typename internal_vertex_name<VertexProperty>::type>
-struct maybe_named_graph : public named_graph<Graph, Vertex, VertexProperty>
-{
+struct maybe_named_graph : public named_graph<Graph, Vertex, VertexProperty>
+{
};
/**
@@ -477,8 +471,8 @@
* when the @c VertexProperty does not have an internal vertex name.
*/
template<typename Graph, typename Vertex, typename VertexProperty>
-struct maybe_named_graph<Graph, Vertex, VertexProperty, void>
-{
+struct maybe_named_graph<Graph, Vertex, VertexProperty, void>
+{
/// The type of the "bundled" property, from which the name can be
/// extracted.
typedef typename detail::extract_bundled_vertex<VertexProperty>::type
@@ -498,7 +492,7 @@
/// Search for a vertex that has the given property (based on its
/// name). This always returns an empty optional<>
- optional<Vertex>
+ optional<Vertex>
vertex_by_property(const bundled_vertex_property_type&)
{
return optional<Vertex>();
@@ -506,10 +500,10 @@
};
#else
template<typename Graph, typename Vertex, typename VertexProperty,
- typename ExtractName
+ typename ExtractName
= typename internal_vertex_name<VertexProperty>::type>
-struct maybe_named_graph
-{
+struct maybe_named_graph
+{
/// The type of the "bundled" property, from which the name can be
/// extracted.
typedef typename detail::extract_bundled_vertex<VertexProperty>::type
@@ -530,7 +524,7 @@
/// Search for a vertex that has the given property (based on its
/// name). This always returns an empty optional<>
template<typename Property>
- optional<Vertex>
+ optional<Vertex>
vertex_by_property(const bundled_vertex_property_type&)
{
return optional<Vertex>();
Modified: branches/release/boost/graph/neighbor_bfs.hpp
==============================================================================
--- branches/release/boost/graph/neighbor_bfs.hpp (original)
+++ branches/release/boost/graph/neighbor_bfs.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -17,6 +17,7 @@
(for directed graphs only. use normal BFS for undirected graphs)
*/
#include <boost/config.hpp>
+#include <boost/ref.hpp>
#include <vector>
#include <boost/pending/queue.hpp>
#include <boost/graph/graph_traits.hpp>
@@ -211,7 +212,6 @@
typedef typename Traits::vertex_descriptor Vertex;
typedef boost::queue<Vertex> queue_t;
queue_t Q;
- detail::wrap_ref<queue_t> Qref(Q);
// Initialization
typedef typename property_traits<ColorMap>::value_type ColorValue;
typedef color_traits<ColorValue> Color;
@@ -222,7 +222,7 @@
}
neighbor_bfs_impl
(g, s,
- choose_param(get_param(params, buffer_param_t()), Qref).ref,
+ choose_param(get_param(params, buffer_param_t()), boost::ref(Q)).get(),
vis, color);
}
@@ -306,11 +306,10 @@
// Buffer default
typedef boost::queue<typename Traits::vertex_descriptor> queue_t;
queue_t Q;
- detail::wrap_ref<queue_t> Qref(Q);
detail::neighbor_bfs_impl
(g, s,
- choose_param(get_param(params, buffer_param_t()), Qref).ref,
+ choose_param(get_param(params, buffer_param_t()), boost::ref(Q)).get(),
choose_param(get_param(params, graph_visitor),
make_neighbor_bfs_visitor(null_visitor())),
choose_pmap(get_param(params, vertex_color), g, vertex_color)
Modified: branches/release/boost/graph/page_rank.hpp
==============================================================================
--- branches/release/boost/graph/page_rank.hpp (original)
+++ branches/release/boost/graph/page_rank.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,10 +11,11 @@
#ifndef BOOST_GRAPH_PAGE_RANK_HPP
#define BOOST_GRAPH_PAGE_RANK_HPP
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/iteration_macros.hpp>
+#include <boost/graph/overloading.hpp>
#include <vector>
namespace boost { namespace graph {
@@ -72,7 +73,8 @@
page_rank(const Graph& g, RankMap rank_map, Done done,
typename property_traits<RankMap>::value_type damping,
typename graph_traits<Graph>::vertices_size_type n,
- RankMap2 rank_map2)
+ RankMap2 rank_map2
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, vertex_list_graph_tag))
{
typedef typename property_traits<RankMap>::value_type rank_type;
@@ -131,7 +133,9 @@
// applies when we have a bidirectional graph.
template<typename MutableGraph>
void
-remove_dangling_links(MutableGraph& g)
+remove_dangling_links(MutableGraph& g
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(MutableGraph,
+ vertex_list_graph_tag))
{
typename graph_traits<MutableGraph>::vertices_size_type old_n;
do {
@@ -150,4 +154,8 @@
} } // end namespace boost::graph
+#ifdef BOOST_GRAPH_USE_MPI
+# include <boost/graph/distributed/page_rank.hpp>
+#endif
+
#endif // BOOST_GRAPH_PAGE_RANK_HPP
Modified: branches/release/boost/graph/planar_canonical_ordering.hpp
==============================================================================
--- branches/release/boost/graph/planar_canonical_ordering.hpp (original)
+++ branches/release/boost/graph/planar_canonical_ordering.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -14,7 +14,7 @@
#include <boost/config.hpp>
#include <boost/utility.hpp> //for next and prior
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost
Modified: branches/release/boost/graph/planar_detail/add_edge_visitors.hpp
==============================================================================
--- branches/release/boost/graph/planar_detail/add_edge_visitors.hpp (original)
+++ branches/release/boost/graph/planar_detail/add_edge_visitors.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -8,7 +8,7 @@
#ifndef __ADD_EDGE_VISITORS_HPP__
#define __ADD_EDGE_VISITORS_HPP__
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost
{
Modified: branches/release/boost/graph/planar_detail/boyer_myrvold_impl.hpp
==============================================================================
--- branches/release/boost/graph/planar_detail/boyer_myrvold_impl.hpp (original)
+++ branches/release/boost/graph/planar_detail/boyer_myrvold_impl.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -14,7 +14,7 @@
#include <boost/config.hpp> //for std::min macros
#include <boost/shared_ptr.hpp>
#include <boost/tuple/tuple.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/depth_first_search.hpp>
#include <boost/graph/planar_detail/face_handles.hpp>
Modified: branches/release/boost/graph/planar_detail/bucket_sort.hpp
==============================================================================
--- branches/release/boost/graph/planar_detail/bucket_sort.hpp (original)
+++ branches/release/boost/graph/planar_detail/bucket_sort.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -10,7 +10,7 @@
#include <vector>
#include <algorithm>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
Modified: branches/release/boost/graph/plod_generator.hpp
==============================================================================
--- branches/release/boost/graph/plod_generator.hpp (original)
+++ branches/release/boost/graph/plod_generator.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,4 +1,4 @@
-// Copyright 2004 The Trustees of Indiana University.
+// Copyright 2004-2006 The Trustees of Indiana University.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -17,27 +17,112 @@
#include <vector>
#include <map>
#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/mpl/if.hpp>
namespace boost {
+ template<typename RandomGenerator>
+ class out_directed_plod_iterator
+ {
+ public:
+ typedef std::forward_iterator_tag iterator_category;
+ typedef std::pair<std::size_t, std::size_t> value_type;
+ typedef const value_type& reference;
+ typedef const value_type* pointer;
+ typedef std::ptrdiff_t difference_type;
+
+ out_directed_plod_iterator() : gen(0), at_end(true) { }
+
+ out_directed_plod_iterator(RandomGenerator& gen, std::size_t n,
+ double alpha, double beta,
+ bool allow_self_loops)
+ : gen(&gen), n(n), alpha(alpha), beta(beta),
+ allow_self_loops(allow_self_loops), at_end(false), degree(0),
+ current(0, 0)
+ {
+ using std::pow;
- template<typename RandomGenerator, typename Graph>
- class plod_iterator
+ uniform_int<std::size_t> x(0, n-1);
+ std::size_t xv = x(gen);
+ degree = (xv == 0? 0 : std::size_t(beta * pow(xv, -alpha)));
+ }
+
+ reference operator*() const { return current; }
+ pointer operator->() const { return ¤t; }
+
+ out_directed_plod_iterator& operator++()
+ {
+ using std::pow;
+
+ uniform_int<std::size_t> x(0, n-1);
+
+ // Continue stepping through source nodes until the
+ // (out)degree is > 0
+ while (degree == 0) {
+ // Step to the next source node. If we've gone past the
+ // number of nodes we're responsible for, we're done.
+ if (++current.first >= n) {
+ at_end = true;
+ return *this;
+ }
+
+ std::size_t xv = x(*gen);
+ degree = (xv == 0? 0 : std::size_t(beta * pow(xv, -alpha)));
+ }
+
+ do {
+ current.second = x(*gen);
+ } while (current.first == current.second && !allow_self_loops);
+ --degree;
+
+ return *this;
+ }
+
+ out_directed_plod_iterator operator++(int)
+ {
+ out_directed_plod_iterator temp(*this);
+ ++(*this);
+ return temp;
+ }
+
+ bool operator==(const out_directed_plod_iterator& other) const
+ {
+ return at_end == other.at_end;
+ }
+
+ bool operator!=(const out_directed_plod_iterator& other) const
+ {
+ return !(*this == other);
+ }
+
+ private:
+ RandomGenerator* gen;
+ std::size_t n;
+ double alpha;
+ double beta;
+ bool allow_self_loops;
+ bool at_end;
+ std::size_t degree;
+ value_type current;
+ };
+
+ template<typename RandomGenerator>
+ class undirected_plod_iterator
{
typedef std::vector<std::pair<std::size_t, std::size_t> > out_degrees_t;
- typedef typename graph_traits<Graph>::directed_category directed_category;
public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair<std::size_t, std::size_t> value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef void difference_type;
+ typedef std::input_iterator_tag iterator_category;
+ typedef std::pair<std::size_t, std::size_t> value_type;
+ typedef const value_type& reference;
+ typedef const value_type* pointer;
+ typedef std::ptrdiff_t difference_type;
- plod_iterator()
+ undirected_plod_iterator()
: gen(0), out_degrees(), degrees_left(0), allow_self_loops(false) { }
- plod_iterator(RandomGenerator& gen, std::size_t n,
- double alpha, double beta, bool allow_self_loops = false)
+ undirected_plod_iterator(RandomGenerator& gen, std::size_t n,
+ double alpha, double beta,
+ bool allow_self_loops = false)
: gen(&gen), n(n), out_degrees(new out_degrees_t),
degrees_left(0), allow_self_loops(allow_self_loops)
{
@@ -46,60 +131,42 @@
uniform_int<std::size_t> x(0, n-1);
for (std::size_t i = 0; i != n; ++i) {
std::size_t xv = x(gen);
- std::size_t degree = (xv == 0? 0 : std::size_t(beta * pow(xv, -alpha)));
- if (degree != 0) {
- out_degrees->push_back(std::make_pair(i, degree));
- }
+ std::size_t degree = (xv == 0? 0 : std::size_t(beta * pow(xv, -alpha)));
+ if (degree == 0) degree = 1;
+ else if (degree >= n) degree = n-1;
+ out_degrees->push_back(std::make_pair(i, degree));
degrees_left += degree;
}
- next(directed_category());
+ next();
}
reference operator*() const { return current; }
pointer operator->() const { return ¤t; }
-
- plod_iterator& operator++()
+
+ undirected_plod_iterator& operator++()
{
- next(directed_category());
+ next();
return *this;
}
- plod_iterator operator++(int)
+ undirected_plod_iterator operator++(int)
{
- plod_iterator temp(*this);
+ undirected_plod_iterator temp(*this);
++(*this);
return temp;
}
- bool operator==(const plod_iterator& other) const
+ bool operator==(const undirected_plod_iterator& other) const
{
return degrees_left == other.degrees_left;
}
- bool operator!=(const plod_iterator& other) const
+ bool operator!=(const undirected_plod_iterator& other) const
{ return !(*this == other); }
private:
- void next(directed_tag)
- {
- uniform_int<std::size_t> x(0, out_degrees->size()-1);
- std::size_t source;
- do {
- source = x(*gen);
- } while ((*out_degrees)[source].second == 0);
- current.first = (*out_degrees)[source].first;
- do {
- current.second = x(*gen);
- } while (current.first == current.second && !allow_self_loops);
- --degrees_left;
- if (--(*out_degrees)[source].second == 0) {
- (*out_degrees)[source] = out_degrees->back();
- out_degrees->pop_back();
- }
- }
-
- void next(undirected_tag)
+ void next()
{
std::size_t source, target;
while (true) {
@@ -107,7 +174,7 @@
new edges, so we just add some random edge and set the
degrees left = 0 to signal termination. */
if (out_degrees->size() < 2) {
- uniform_int<std::size_t> x(0, n);
+ uniform_int<std::size_t> x(0, n-1);
current.first = x(*gen);
do {
current.second = x(*gen);
@@ -156,6 +223,31 @@
value_type current;
};
+
+ template<typename RandomGenerator, typename Graph>
+ class plod_iterator
+ : public mpl::if_<is_convertible<
+ typename graph_traits<Graph>::directed_category,
+ directed_tag>,
+ out_directed_plod_iterator<RandomGenerator>,
+ undirected_plod_iterator<RandomGenerator> >::type
+ {
+ typedef typename mpl::if_<
+ is_convertible<
+ typename graph_traits<Graph>::directed_category,
+ directed_tag>,
+ out_directed_plod_iterator<RandomGenerator>,
+ undirected_plod_iterator<RandomGenerator> >::type
+ inherited;
+
+ public:
+ plod_iterator() : inherited() { }
+
+ plod_iterator(RandomGenerator& gen, std::size_t n,
+ double alpha, double beta, bool allow_self_loops = false)
+ : inherited(gen, n, alpha, beta, allow_self_loops) { }
+ };
+
} // end namespace boost
#endif // BOOST_GRAPH_PLOD_GENERATOR_HPP
Modified: branches/release/boost/graph/properties.hpp
==============================================================================
--- branches/release/boost/graph/properties.hpp (original)
+++ branches/release/boost/graph/properties.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -6,16 +6,25 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//=======================================================================
+
#ifndef BOOST_GRAPH_PROPERTIES_HPP
#define BOOST_GRAPH_PROPERTIES_HPP
#include <boost/config.hpp>
#include <cassert>
#include <boost/pending/property.hpp>
-#include <boost/property_map.hpp>
+
+// Include the property map library and extensions in the BGL.
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/property_maps/constant_property_map.hpp>
+#include <boost/graph/property_maps/null_property_map.hpp>
+
#include <boost/graph/graph_traits.hpp>
#include <boost/type_traits/is_convertible.hpp>
-
+#include <boost/limits.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/if.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
// Stay out of the way of the concept checking class
@@ -35,12 +44,12 @@
static default_color_type red() { return red_color; }
static default_color_type black() { return black_color; }
};
-
+
// These functions are now obsolete, replaced by color_traits.
inline default_color_type white(default_color_type) { return white_color; }
inline default_color_type gray(default_color_type) { return gray_color; }
inline default_color_type green(default_color_type) { return green_color; }
- inline default_color_type red(default_color_type) { return red_color; }
+ inline default_color_type red(default_color_type) { return red_color; }
inline default_color_type black(default_color_type) { return black_color; }
#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
@@ -90,28 +99,46 @@
BOOST_DEF_PROPERTY(vertex, name);
BOOST_DEF_PROPERTY(graph, name);
BOOST_DEF_PROPERTY(vertex, distance);
+ BOOST_DEF_PROPERTY(vertex, distance2);
BOOST_DEF_PROPERTY(vertex, color);
BOOST_DEF_PROPERTY(vertex, degree);
BOOST_DEF_PROPERTY(vertex, in_degree);
BOOST_DEF_PROPERTY(vertex, out_degree);
BOOST_DEF_PROPERTY(vertex, current_degree);
- BOOST_DEF_PROPERTY(vertex, priority);
+ BOOST_DEF_PROPERTY(vertex, priority);
BOOST_DEF_PROPERTY(vertex, discover_time);
BOOST_DEF_PROPERTY(vertex, finish_time);
BOOST_DEF_PROPERTY(vertex, predecessor);
BOOST_DEF_PROPERTY(vertex, rank);
BOOST_DEF_PROPERTY(vertex, centrality);
BOOST_DEF_PROPERTY(vertex, lowpoint);
+ BOOST_DEF_PROPERTY(vertex, potential);
+ BOOST_DEF_PROPERTY(vertex, update);
BOOST_DEF_PROPERTY(edge, reverse);
BOOST_DEF_PROPERTY(edge, capacity);
+ BOOST_DEF_PROPERTY(edge, flow);
BOOST_DEF_PROPERTY(edge, residual_capacity);
BOOST_DEF_PROPERTY(edge, centrality);
+ BOOST_DEF_PROPERTY(edge, discover_time);
+ BOOST_DEF_PROPERTY(edge, update);
+ BOOST_DEF_PROPERTY(edge, finished);
BOOST_DEF_PROPERTY(graph, visitor);
// These tags are used for property bundles
BOOST_DEF_PROPERTY(vertex, bundle);
BOOST_DEF_PROPERTY(edge, bundle);
+ // These tags are used to denote the owners and local descriptors
+ // for the vertices and edges of a distributed graph.
+ BOOST_DEF_PROPERTY(vertex, global);
+ BOOST_DEF_PROPERTY(vertex, owner);
+ BOOST_DEF_PROPERTY(vertex, local);
+ BOOST_DEF_PROPERTY(edge, global);
+ BOOST_DEF_PROPERTY(edge, owner);
+ BOOST_DEF_PROPERTY(edge, local);
+ BOOST_DEF_PROPERTY(vertex, local_index);
+ BOOST_DEF_PROPERTY(edge, local_index);
+
#undef BOOST_DEF_PROPERTY
namespace detail {
@@ -223,7 +250,7 @@
template <class Graph, class Property>
class graph_property {
public:
- typedef typename property_value<typename Graph::graph_property_type,
+ typedef typename property_value<typename Graph::graph_property_type,
Property>::type type;
};
@@ -239,9 +266,9 @@
};
template <typename Graph>
- class degree_property_map
+ class degree_property_map
: public put_get_helper<typename graph_traits<Graph>::degree_size_type,
- degree_property_map<Graph> >
+ degree_property_map<Graph> >
{
public:
typedef typename graph_traits<Graph>::vertex_descriptor key_type;
@@ -262,9 +289,9 @@
}
//========================================================================
- // Iterator Property Map Generating Functions contributed by
+ // Iterator Property Map Generating Functions contributed by
// Kevin Vanhorn. (see also the property map generating functions
- // in boost/property_map.hpp)
+ // in boost/property_map/property_map.hpp)
#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
// A helper function for creating a vertex property map out of a
@@ -281,8 +308,8 @@
make_iterator_vertex_map(RandomAccessIterator iter, const PropertyGraph& g)
{
return make_iterator_property_map(iter, get(vertex_index, g));
- }
-
+ }
+
// Use this next function when vertex_descriptor is known to be an
// integer type, with values ranging from 0 to num_vertices(g).
//
@@ -297,7 +324,7 @@
make_iterator_vertex_map(RandomAccessIterator iter)
{
return make_iterator_property_map(iter, identity_property_map());
- }
+ }
#endif
template <class PropertyGraph, class RandomAccessContainer>
@@ -312,7 +339,7 @@
{
assert(c.size() >= num_vertices(g));
return make_iterator_vertex_map(c.begin(), g);
- }
+ }
template <class RandomAccessContainer> inline
iterator_property_map<
@@ -329,17 +356,17 @@
#if defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
# define BOOST_GRAPH_NO_BUNDLED_PROPERTIES
#endif
-
+
#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
template<typename Graph, typename Descriptor, typename Bundle, typename T>
struct bundle_property_map
: put_get_helper<T&, bundle_property_map<Graph, Descriptor, Bundle, T> >
{
typedef Descriptor key_type;
- typedef T value_type;
+ typedef typename remove_const<T>::type value_type;
typedef T& reference;
typedef lvalue_property_map_tag category;
-
+
bundle_property_map() { }
bundle_property_map(Graph* g_, T Bundle::* pm_) : g(g_), pm(pm_) {}
@@ -351,11 +378,16 @@
namespace detail {
template<typename VertexBundle, typename EdgeBundle, typename Bundle>
- struct is_vertex_bundle : is_convertible<VertexBundle*, Bundle*> {};
+ struct is_vertex_bundle
+ : mpl::and_<is_convertible<Bundle*, VertexBundle*>,
+ mpl::and_<mpl::not_<is_void<VertexBundle> >,
+ mpl::not_<is_same<VertexBundle, no_property> > > >
+ { };
}
-
+
+ // Specialize the property map template to generate bundled property maps.
template <typename Graph, typename T, typename Bundle>
- struct property_map<Graph, T Bundle::*>
+ struct property_map<Graph, T Bundle::*>
{
private:
typedef graph_traits<Graph> traits;
@@ -369,7 +401,7 @@
vertex_bundled,
edge_bundled>::type
actual_bundle;
-
+
public:
typedef bundle_property_map<Graph, descriptor, actual_bundle, T> type;
typedef bundle_property_map<const Graph, descriptor, actual_bundle, const T>
@@ -377,6 +409,47 @@
};
#endif
+// These metafunctions help implement the process of determining the vertex
+// and edge properties of a graph.
+namespace graph_detail {
+ template <typename Retag>
+ struct retagged_property {
+ typedef typename Retag::type type;
+ };
+
+ template <typename Retag, typename With, typename Without>
+ struct retagged_bundle {
+ typedef typename mpl::if_<
+ is_same<typename Retag::retagged, no_property>,
+ Without,
+ With
+ >::type type;
+ };
+
+ template <typename Prop>
+ struct vertex_prop {
+ private:
+ typedef detail::retag_property_list<vertex_bundle_t, Prop> Retag;
+ public:
+ typedef typename retagged_property<Retag>::type type;
+ typedef typename retagged_bundle<
+ Retag, Prop, no_vertex_bundle
+ >::type bundle;
+ };
+
+ template <typename Prop>
+ struct edge_prop {
+// private:
+ typedef detail::retag_property_list<edge_bundle_t, Prop> Retag;
+ public:
+ typedef typename Retag::retagged retagged;
+ typedef typename retagged_property<Retag>::type type;
+ typedef typename retagged_bundle<
+ Retag, Prop, no_edge_bundle
+ >::type bundle;
+ };
+} // namespace graph_detail
+
} // namespace boost
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
@@ -385,5 +458,4 @@
# undef RandomAccessIterator
#endif
-
#endif /* BOOST_GRAPH_PROPERTIES_HPPA */
Modified: branches/release/boost/graph/property_iter_range.hpp
==============================================================================
--- branches/release/boost/graph/property_iter_range.hpp (original)
+++ branches/release/boost/graph/property_iter_range.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,5 +1,5 @@
-// (C) Copyright François Faure, iMAGIS-GRAVIR / UJF, 2001.
+// (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
@@ -12,13 +12,13 @@
// differentiate between const/mutable graphs and
// added a workaround to avoid partial specialization.
-// 02 May 2001 François Faure
+// 02 May 2001 Francois Faure
// Initial version.
#ifndef BOOST_GRAPH_PROPERTY_ITER_RANGE_HPP
#define BOOST_GRAPH_PROPERTY_ITER_RANGE_HPP
-#include <boost/property_map_iterator.hpp>
+#include <boost/property_map/property_map_iterator.hpp>
#include <boost/graph/properties.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/same_traits.hpp>
Modified: branches/release/boost/graph/random.hpp
==============================================================================
--- branches/release/boost/graph/random.hpp (original)
+++ branches/release/boost/graph/random.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -16,6 +16,7 @@
#include <boost/pending/property.hpp>
#include <boost/graph/properties.hpp>
+#include <boost/next_prior.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/copy.hpp>
@@ -41,8 +42,7 @@
#endif
typename graph_traits<Graph>::vertex_iterator
i = vertices(g).first;
- while (n-- > 0) ++i; // std::advance not VC++ portable
- return *i;
+ return *(boost::next(i, n));
} else
return *vertices(g).first;
}
@@ -62,8 +62,7 @@
#endif
typename graph_traits<Graph>::edge_iterator
i = edges(g).first;
- while (n-- > 0) ++i; // std::advance not VC++ portable
- return *i;
+ return *(boost::next(i, n));
} else
return *edges(g).first;
}
Modified: branches/release/boost/graph/random_layout.hpp
==============================================================================
--- branches/release/boost/graph/random_layout.hpp (original)
+++ branches/release/boost/graph/random_layout.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -15,32 +15,19 @@
#include <boost/random/uniform_real.hpp>
#include <boost/type_traits/is_integral.hpp>
#include <boost/mpl/if.hpp>
+#include <boost/graph/iteration_macros.hpp>
namespace boost {
-template<typename Graph, typename PositionMap, typename Dimension,
- typename RandomNumberGenerator>
+template<typename Topology,
+ typename Graph, typename PositionMap>
void
-random_graph_layout(const Graph& g, PositionMap position_map,
- Dimension minX, Dimension maxX,
- Dimension minY, Dimension maxY,
- RandomNumberGenerator& gen)
+random_graph_layout
+ (const Graph& g, PositionMap position_map,
+ const Topology& topology)
{
- typedef typename mpl::if_<is_integral<Dimension>,
- uniform_int<Dimension>,
- uniform_real<Dimension> >::type distrib_t;
- typedef typename mpl::if_<is_integral<Dimension>,
- RandomNumberGenerator&,
- uniform_01<RandomNumberGenerator, Dimension> >
- ::type gen_t;
-
- gen_t my_gen(gen);
- distrib_t x(minX, maxX);
- distrib_t y(minY, maxY);
- typename graph_traits<Graph>::vertex_iterator vi, vi_end;
- for(tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
- position_map[*vi].x = x(my_gen);
- position_map[*vi].y = y(my_gen);
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ put(position_map, v, topology.random_point());
}
}
Modified: branches/release/boost/graph/read_dimacs.hpp
==============================================================================
--- branches/release/boost/graph/read_dimacs.hpp (original)
+++ branches/release/boost/graph/read_dimacs.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -16,8 +16,10 @@
#include <vector>
#include <iostream>
+#include <string>
#include <cstdio>
#include <cstring>
+#include <cstdlib>
#include <boost/graph/graph_traits.hpp>
@@ -53,7 +55,7 @@
no_alines=0; /* no of arc-lines */
std::string in_line; /* for reading input line */
- char pr_type[3]; /* for reading type of the problem */
+ char pr_type[4]; /* for reading type of the problem */
char nd; /* source (s) or sink (t) */
int k, /* temporary */
@@ -134,13 +136,13 @@
if (
/* reading problem line: type of problem, no of nodes, no of arcs */
- sscanf ( in_line.c_str(), "%*c %3s %ld %ld", pr_type, &n, &m )
+ std::sscanf ( in_line.c_str(), "%*c %3s %ld %ld", pr_type, &n, &m )
!= P_FIELDS
)
/*wrong number of parameters in the problem line*/
{ err_no = EN2; goto error; }
- if ( strcmp ( pr_type, PROBLEM_TYPE ) )
+ if ( std::strcmp ( pr_type, PROBLEM_TYPE ) )
/*wrong problem type*/
{ err_no = EN3; goto error; }
@@ -160,7 +162,7 @@
{ err_no = EN8; goto error; }
/* reading source or sink */
- k = sscanf ( in_line.c_str(),"%*c %ld %c", &i, &nd );
+ k = std::sscanf ( in_line.c_str(),"%*c %ld %c", &i, &nd );
--i; // index from 0
if ( k < NODE_FIELDS )
/* node line is incorrect */
@@ -208,8 +210,8 @@
if (
/* reading an arc description */
- sscanf ( in_line.c_str(),"%*c %ld %ld %ld",
- &tail, &head, &cap )
+ std::sscanf ( in_line.c_str(),"%*c %ld %ld %ld",
+ &tail, &head, &cap )
!= ARC_FIELDS
)
/* arc description is not correct */
@@ -269,10 +271,10 @@
/* ---------------------------------- */
error: /* error found reading input */
- printf ( "\nline %ld of input - %s\n",
- no_lines, err_message[err_no] );
+ std::printf ( "\nline %ld of input - %s\n",
+ no_lines, err_message[err_no] );
- exit (1);
+ std::exit (1);
return (0); /* to avoid warning */
}
/* -------------------- end of parser -------------------*/
Modified: branches/release/boost/graph/relax.hpp
==============================================================================
--- branches/release/boost/graph/relax.hpp (original)
+++ branches/release/boost/graph/relax.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,7 +12,7 @@
#include <functional>
#include <boost/limits.hpp> // for numeric limits
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost {
Modified: branches/release/boost/graph/sequential_vertex_coloring.hpp
==============================================================================
--- branches/release/boost/graph/sequential_vertex_coloring.hpp (original)
+++ branches/release/boost/graph/sequential_vertex_coloring.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -13,7 +13,7 @@
#include <vector>
#include <boost/graph/graph_traits.hpp>
#include <boost/tuple/tuple.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/limits.hpp>
#ifdef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
Modified: branches/release/boost/graph/sloan_ordering.hpp
==============================================================================
--- branches/release/boost/graph/sloan_ordering.hpp (original)
+++ branches/release/boost/graph/sloan_ordering.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -25,7 +25,7 @@
#include <boost/graph/breadth_first_search.hpp>
#include <boost/graph/properties.hpp>
#include <boost/pending/indirect_cmp.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/visitors.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/cuthill_mckee_ordering.hpp>
Modified: branches/release/boost/graph/stanford_graph.hpp
==============================================================================
--- branches/release/boost/graph/stanford_graph.hpp (original)
+++ branches/release/boost/graph/stanford_graph.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,7 +12,7 @@
#include <boost/config.hpp>
#include <boost/iterator.hpp>
#include <boost/operators.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/properties.hpp>
Modified: branches/release/boost/graph/strong_components.hpp
==============================================================================
--- branches/release/boost/graph/strong_components.hpp (original)
+++ branches/release/boost/graph/strong_components.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -17,6 +17,7 @@
#include <boost/graph/depth_first_search.hpp>
#include <boost/type_traits/conversion_traits.hpp>
#include <boost/static_assert.hpp>
+#include <boost/graph/overloading.hpp>
namespace boost {
@@ -219,7 +220,8 @@
class P, class T, class R>
inline typename property_traits<ComponentMap>::value_type
strong_components(const Graph& g, ComponentMap comp,
- const bgl_named_params<P, T, R>& params)
+ const bgl_named_params<P, T, R>& params
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, vertex_list_graph_tag))
{
typedef typename graph_traits<Graph>::directed_category DirCat;
BOOST_STATIC_ASSERT((is_convertible<DirCat*, directed_tag*>::value == true));
@@ -229,7 +231,8 @@
template <class Graph, class ComponentMap>
inline typename property_traits<ComponentMap>::value_type
- strong_components(const Graph& g, ComponentMap comp)
+ strong_components(const Graph& g, ComponentMap comp
+ BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, vertex_list_graph_tag))
{
typedef typename graph_traits<Graph>::directed_category DirCat;
BOOST_STATIC_ASSERT((is_convertible<DirCat*, directed_tag*>::value == true));
@@ -331,4 +334,8 @@
} // namespace boost
+#ifdef BOOST_GRAPH_USE_MPI
+# include <boost/graph/distributed/strong_components.hpp>
+#endif
+
#endif // BOOST_GRAPH_STRONG_COMPONENTS_HPP
Modified: branches/release/boost/graph/subgraph.hpp
==============================================================================
--- branches/release/boost/graph/subgraph.hpp (original)
+++ branches/release/boost/graph/subgraph.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -18,6 +18,7 @@
#include <map>
#include <cassert>
#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_mutability_traits.hpp>
#include <boost/graph/properties.hpp>
#include <boost/iterator/indirect_iterator.hpp>
@@ -26,38 +27,63 @@
namespace boost {
- struct subgraph_tag { };
+struct subgraph_tag { };
- // Invariants of an induced subgraph:
- // - If vertex u is in subgraph g, then u must be in g.parent().
- // - If edge e is in subgraph g, then e must be in g.parent().
- // - If edge e=(u,v) is in the root graph, then edge e
- // is also in any subgraph that contains both vertex u and v.
-
- // The Graph template parameter must have a vertex_index
- // and edge_index internal property. It is assumed that
- // the vertex indices are assigned automatically by the
- // graph during a call to add_vertex(). It is not
- // assumed that the edge vertices are assigned automatically,
- // they are explicitly assigned here.
+/** @name Property Lookup
+ * The local_property and global_property functions are used to create
+ * structures that determine the lookup strategy for properties in subgraphs.
+ * Note that the nested kind member is used to help interoperate with actual
+ * Property types.
+ */
+//@{
+template <typename T>
+struct local_property
+{
+ typedef T kind;
+ local_property(T x) : value(x) { }
+ T value;
+};
+
+template <typename T>
+inline local_property<T> local(T x)
+{ return local_property<T>(x); }
+
+template <typename T>
+struct global_property
+{
+ typedef T kind;
+ global_property(T x) : value(x) { }
+ T value;
+};
+
+template <typename T>
+inline global_property<T> global(T x)
+{ return global_property<T>(x); }
+//@}
+
+// Invariants of an induced subgraph:
+// - If vertex u is in subgraph g, then u must be in g.parent().
+// - If edge e is in subgraph g, then e must be in g.parent().
+// - If edge e=(u,v) is in the root graph, then edge e
+// is also in any subgraph that contains both vertex u and v.
+
+// The Graph template parameter must have a vertex_index and edge_index
+// internal property. It is assumed that the vertex indices are assigned
+// automatically by the graph during a call to add_vertex(). It is not
+// assumed that the edge vertices are assigned automatically, they are
+// explicitly assigned here.
- template <typename Graph>
- class subgraph {
+template <typename Graph>
+class subgraph {
typedef graph_traits<Graph> Traits;
typedef std::list<subgraph<Graph>*> ChildrenList;
- public:
- // Graph requirements
- typedef typename Traits::vertex_descriptor vertex_descriptor;
- typedef typename Traits::edge_descriptor edge_descriptor;
- typedef typename Traits::directed_category directed_category;
- typedef typename Traits::edge_parallel_category edge_parallel_category;
- typedef typename Traits::traversal_category traversal_category;
-
- static vertex_descriptor null_vertex()
- {
- return Traits::null_vertex();
- }
-
+public:
+// Graph requirements
+typedef typename Traits::vertex_descriptor vertex_descriptor;
+typedef typename Traits::edge_descriptor edge_descriptor;
+typedef typename Traits::directed_category directed_category;
+typedef typename Traits::edge_parallel_category edge_parallel_category;
+typedef typename Traits::traversal_category traversal_category;
// IncidenceGraph requirements
typedef typename Traits::out_edge_iterator out_edge_iterator;
@@ -78,121 +104,115 @@
typedef typename Graph::edge_property_type edge_property_type;
typedef typename Graph::vertex_property_type vertex_property_type;
+ typedef typename Graph::vertex_bundled vertex_bundled;
+ typedef typename Graph::edge_bundled edge_bundled;
typedef subgraph_tag graph_tag;
typedef Graph graph_type;
typedef typename Graph::graph_property_type graph_property_type;
- // Constructors
-
// Create the main graph, the root of the subgraph tree
subgraph()
- : m_parent(0), m_edge_counter(0)
+ : m_parent(0), m_edge_counter(0)
{ }
+
subgraph(const graph_property_type& p)
- : m_graph(p), m_parent(0), m_edge_counter(0)
+ : m_graph(p), m_parent(0), m_edge_counter(0)
{ }
- subgraph(vertices_size_type n,
- const graph_property_type& p = graph_property_type())
- : m_graph(n, p), m_parent(0), m_edge_counter(0), m_global_vertex(n)
- {
- typename Graph::vertex_iterator v, v_end;
- vertices_size_type i = 0;
- for (tie(v, v_end) = vertices(m_graph); v != v_end; ++v)
- m_global_vertex[i++] = *v;
+
+ subgraph(vertices_size_type n, const graph_property_type& p = graph_property_type())
+ : m_graph(n, p), m_parent(0), m_edge_counter(0), m_global_vertex(n)
+ {
+ typename Graph::vertex_iterator v, v_end;
+ vertices_size_type i = 0;
+ for(tie(v, v_end) = vertices(m_graph); v != v_end; ++v)
+ m_global_vertex[i++] = *v;
}
// copy constructor
subgraph(const subgraph& x)
- : m_graph(x.m_graph), m_parent(x.m_parent),
- m_edge_counter(x.m_edge_counter),
- m_global_vertex(x.m_global_vertex),
- m_global_edge(x.m_global_edge)
- {
- // Do a deep copy
- for (typename ChildrenList::const_iterator i = x.m_children.begin();
- i != x.m_children.end(); ++i)
- m_children.push_back(new subgraph<Graph>( **i ));
+ : m_graph(x.m_graph), m_parent(x.m_parent), m_edge_counter(x.m_edge_counter)
+ , m_global_vertex(x.m_global_vertex), m_global_edge(x.m_global_edge)
+ {
+ // Do a deep copy (recursive).
+ for(typename ChildrenList::const_iterator i = x.m_children.begin();
+ i != x.m_children.end(); ++i)
+ {
+ m_children.push_back(new subgraph<Graph>( **i ));
+ }
}
~subgraph() {
- for (typename ChildrenList::iterator i = m_children.begin();
- i != m_children.end(); ++i)
- delete *i;
+ for(typename ChildrenList::iterator i = m_children.begin();
+ i != m_children.end(); ++i)
+ {
+ delete *i;
+ }
}
+ // Return a null vertex descriptor for the graph.
+ static vertex_descriptor null_vertex()
+ { return Traits::null_vertex(); }
+
// Create a subgraph
subgraph<Graph>& create_subgraph() {
- m_children.push_back(new subgraph<Graph>());
- m_children.back()->m_parent = this;
- return *m_children.back();
+ m_children.push_back(new subgraph<Graph>());
+ m_children.back()->m_parent = this;
+ return *m_children.back();
}
// Create a subgraph with the specified vertex set.
template <typename VertexIterator>
- subgraph<Graph>& create_subgraph(VertexIterator first,
- VertexIterator last)
- {
- m_children.push_back(new subgraph<Graph>());
- m_children.back()->m_parent = this;
- for (; first != last; ++first)
- add_vertex(*first, *m_children.back());
- return *m_children.back();
+ subgraph<Graph>& create_subgraph(VertexIterator first, VertexIterator last) {
+ m_children.push_back(new subgraph<Graph>());
+ m_children.back()->m_parent = this;
+ for(; first != last; ++first) {
+ add_vertex(*first, *m_children.back());
+ }
+ return *m_children.back();
}
// local <-> global descriptor conversion functions
vertex_descriptor local_to_global(vertex_descriptor u_local) const
- {
- return m_global_vertex[u_local];
- }
- vertex_descriptor global_to_local(vertex_descriptor u_global) const
- {
- vertex_descriptor u_local; bool in_subgraph;
- tie(u_local, in_subgraph) = this->find_vertex(u_global);
- assert(in_subgraph == true);
- return u_local;
+ { return m_global_vertex[u_local]; }
+
+ vertex_descriptor global_to_local(vertex_descriptor u_global) const {
+ vertex_descriptor u_local; bool in_subgraph;
+ tie(u_local, in_subgraph) = this->find_vertex(u_global);
+ assert(in_subgraph == true);
+ return u_local;
}
+
edge_descriptor local_to_global(edge_descriptor e_local) const
- {
- return m_global_edge[get(get(edge_index, m_graph), e_local)];
- }
+ { return m_global_edge[get(get(edge_index, m_graph), e_local)]; }
+
edge_descriptor global_to_local(edge_descriptor e_global) const
- {
- return
- (*m_local_edge.find(get(get(edge_index, root().m_graph), e_global))).second;
- }
+ { return (*m_local_edge.find(get(get(edge_index, root().m_graph), e_global))).second; }
// Is vertex u (of the root graph) contained in this subgraph?
// If so, return the matching local vertex.
std::pair<vertex_descriptor, bool>
- find_vertex(vertex_descriptor u_global) const
- {
- typename std::map<vertex_descriptor, vertex_descriptor>::const_iterator
- i = m_local_vertex.find(u_global);
- bool valid = i != m_local_vertex.end();
- return std::make_pair((valid ? (*i).second : null_vertex()), valid);
+ find_vertex(vertex_descriptor u_global) const {
+ typename std::map<vertex_descriptor, vertex_descriptor>::const_iterator
+ i = m_local_vertex.find(u_global);
+ bool valid = i != m_local_vertex.end();
+ return std::make_pair((valid ? (*i).second : null_vertex()), valid);
}
// Return the parent graph.
subgraph& parent() { return *m_parent; }
const subgraph& parent() const { return *m_parent; }
+ // Return true if this is the root subgraph
bool is_root() const { return m_parent == 0; }
// Return the root graph of the subgraph tree.
- subgraph& root() {
- if (this->is_root())
- return *this;
- else
- return m_parent->root();
- }
- const subgraph& root() const {
- if (this->is_root())
- return *this;
- else
- return m_parent->root();
- }
+ subgraph& root()
+ { return is_root() ? *this : m_parent->root(); }
+
+ const subgraph& root() const
+ { return is_root() ? *this : m_parent->root(); }
// Return the children subgraphs of this graph/subgraph.
// Use a list of pointers because the VC++ std::list doesn't like
@@ -211,16 +231,12 @@
>
const_children_iterator;
- std::pair<const_children_iterator, const_children_iterator>
- children() const
- {
+ std::pair<const_children_iterator, const_children_iterator> children() const {
return std::make_pair(const_children_iterator(m_children.begin()),
const_children_iterator(m_children.end()));
}
- std::pair<children_iterator, children_iterator>
- children()
- {
+ std::pair<children_iterator, children_iterator> children() {
return std::make_pair(children_iterator(m_children.begin()),
children_iterator(m_children.end()));
}
@@ -228,70 +244,105 @@
std::size_t num_children() const { return m_children.size(); }
#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
- // Bundled properties support
- template<typename Descriptor>
+ // Defualt property access delegates the lookup to global properties.
+ template <typename Descriptor>
typename graph::detail::bundled_result<Graph, Descriptor>::type&
operator[](Descriptor x)
- {
- if (m_parent == 0) return m_graph[x];
- else return root().m_graph[local_to_global(x)];
- }
+ { return is_root() ? m_graph[x] : root().m_graph[local_to_global(x)]; }
- template<typename Descriptor>
+ template <typename Descriptor>
typename graph::detail::bundled_result<Graph, Descriptor>::type const&
operator[](Descriptor x) const
- {
- if (m_parent == 0) return m_graph[x];
- else return root().m_graph[local_to_global(x)];
- }
+ { return is_root() ? m_graph[x] : root().m_graph[local_to_global(x)]; }
+
+ // Local property access returns the local property of the given descripor.
+ template <typename Descriptor>
+ typename graph::detail::bundled_result<Graph, Descriptor>::type&
+ operator[](local_property<Descriptor> x)
+ { return m_graph[x.value]; }
+
+ template <typename Descriptor>
+ typename graph::detail::bundled_result<Graph, Descriptor>::type const&
+ operator[](local_property<Descriptor> x) const
+ { return m_graph[x.value]; }
+
+ // Global property access returns the global property associated with the
+ // given descriptor. This is an alias for the default bundled property
+ // access operations.
+ template <typename Descriptor>
+ typename graph::detail::bundled_result<Graph, Descriptor>::type&
+ operator[](global_property<Descriptor> x)
+ { return (*this)[x.value]; }
+
+ template <typename Descriptor>
+ typename graph::detail::bundled_result<Graph, Descriptor>::type const&
+ operator[](global_property<Descriptor> x) const
+ { return (*this)[x.value]; }
+
#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
// private:
typedef typename property_map<Graph, edge_index_t>::type EdgeIndexMap;
typedef typename property_traits<EdgeIndexMap>::value_type edge_index_type;
- BOOST_STATIC_ASSERT((!is_same<edge_index_type,
+ BOOST_STATIC_ASSERT((!is_same<edge_index_type,
boost::detail::error_property_not_found>::value));
+private:
+ typedef std::vector<vertex_descriptor> GlobalVertexList;
+ typedef std::vector<edge_descriptor> GlobalEdgeList;
+ typedef std::map<vertex_descriptor, vertex_descriptor> LocalVertexMap;
+ typedef std::map<edge_index_type, edge_descriptor> LocalEdgeMap;
+ // TODO: Should the LocalVertexMap be: map<index_type, descriptor>?
+ // TODO: Can we relax the indexing requirement if both descriptors are
+ // LessThanComparable?
+ // TODO: Should we really be using unorderd_map for improved lookup times?
+
+public: // Probably shouldn't be public....
Graph m_graph;
subgraph<Graph>* m_parent;
edge_index_type m_edge_counter; // for generating unique edge indices
ChildrenList m_children;
- std::vector<vertex_descriptor> m_global_vertex; // local -> global
- std::map<vertex_descriptor, vertex_descriptor> m_local_vertex; // global -> local
- std::vector<edge_descriptor> m_global_edge; // local -> global
- std::map<edge_index_type, edge_descriptor> m_local_edge; // global -> local
-
- edge_descriptor
- local_add_edge(vertex_descriptor u_local, vertex_descriptor v_local,
- edge_descriptor e_global)
- {
- edge_descriptor e_local;
- bool inserted;
- tie(e_local, inserted) = add_edge(u_local, v_local, m_graph);
- put(edge_index, m_graph, e_local, m_edge_counter++);
- m_global_edge.push_back(e_global);
- m_local_edge[get(get(edge_index, this->root()), e_global)] = e_local;
- return e_local;
+ GlobalVertexList m_global_vertex; // local -> global
+ LocalVertexMap m_local_vertex; // global -> local
+ GlobalEdgeList m_global_edge; // local -> global
+ LocalEdgeMap m_local_edge; // global -> local
+
+ edge_descriptor local_add_edge(vertex_descriptor u_local,
+ vertex_descriptor v_local,
+ edge_descriptor e_global)
+ {
+ edge_descriptor e_local;
+ bool inserted;
+ tie(e_local, inserted) = add_edge(u_local, v_local, m_graph);
+ put(edge_index, m_graph, e_local, m_edge_counter++);
+ m_global_edge.push_back(e_global);
+ m_local_edge[get(get(edge_index, this->root()), e_global)] = e_local;
+ return e_local;
}
-
- };
+};
#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
- template<typename Graph>
- struct vertex_bundle_type<subgraph<Graph> > : vertex_bundle_type<Graph> { };
-
- template<typename Graph>
- struct edge_bundle_type<subgraph<Graph> > : edge_bundle_type<Graph> { };
+// TODO: I don't think these are required since the default metafunction
+// returns Graph::vertex_bundled.
+template <typename Graph>
+struct vertex_bundle_type<subgraph<Graph> >
+ : vertex_bundle_type<Graph>
+{ };
+
+template<typename Graph>
+struct edge_bundle_type<subgraph<Graph> >
+ : edge_bundle_type<Graph>
+{ };
#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
- //===========================================================================
- // Functions special to the Subgraph Class
+//===========================================================================
+// Functions special to the Subgraph Class
- template <typename G>
- typename subgraph<G>::vertex_descriptor
- add_vertex(typename subgraph<G>::vertex_descriptor u_global,
- subgraph<G>& g)
- {
+template <typename G>
+typename subgraph<G>::vertex_descriptor
+add_vertex(typename subgraph<G>::vertex_descriptor u_global,
+ subgraph<G>& g)
+{
assert(!g.is_root());
typename subgraph<G>::vertex_descriptor u_local, v_global, uu_global;
typename subgraph<G>::edge_descriptor e_global;
@@ -304,167 +355,163 @@
// remember edge global and local maps
{
- typename subgraph<G>::out_edge_iterator ei, ei_end;
- for (tie(ei, ei_end) = out_edges(u_global, r);
- ei != ei_end; ++ei) {
- e_global = *ei;
- v_global = target(e_global, r);
- if (g.find_vertex(v_global).second == true)
- g.local_add_edge(u_local, g.global_to_local(v_global), e_global);
- }
+ typename subgraph<G>::out_edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = out_edges(u_global, r);
+ ei != ei_end; ++ei) {
+ e_global = *ei;
+ v_global = target(e_global, r);
+ if (g.find_vertex(v_global).second == true)
+ g.local_add_edge(u_local, g.global_to_local(v_global), e_global);
+ }
}
if (is_directed(g)) { // not necessary for undirected graph
- typename subgraph<G>::vertex_iterator vi, vi_end;
- typename subgraph<G>::out_edge_iterator ei, ei_end;
- for (tie(vi, vi_end) = vertices(r); vi != vi_end; ++vi) {
- v_global = *vi;
- if (g.find_vertex(v_global).second)
- for (tie(ei, ei_end) = out_edges(*vi, r); ei != ei_end; ++ei) {
- e_global = *ei;
- uu_global = target(e_global, r);
- if (uu_global == u_global && g.find_vertex(v_global).second)
- g.local_add_edge(g.global_to_local(v_global), u_local, e_global);
- }
- }
+ typename subgraph<G>::vertex_iterator vi, vi_end;
+ typename subgraph<G>::out_edge_iterator ei, ei_end;
+ for(tie(vi, vi_end) = vertices(r); vi != vi_end; ++vi) {
+ v_global = *vi;
+ if(g.find_vertex(v_global).second)
+ for(tie(ei, ei_end) = out_edges(*vi, r); ei != ei_end; ++ei) {
+ e_global = *ei;
+ uu_global = target(e_global, r);
+ if(uu_global == u_global && g.find_vertex(v_global).second) {
+ g.local_add_edge(g.global_to_local(v_global), u_local, e_global);
+ }
+ }
+ }
}
return u_local;
- }
+}
- //===========================================================================
- // Functions required by the IncidenceGraph concept
+// NOTE: Descriptors are local unless otherwise noted.
- template <typename G>
- std::pair<typename graph_traits<G>::out_edge_iterator,
- typename graph_traits<G>::out_edge_iterator>
- out_edges(typename graph_traits<G>::vertex_descriptor u_local,
- const subgraph<G>& g)
- { return out_edges(u_local, g.m_graph); }
-
- template <typename G>
- typename graph_traits<G>::degree_size_type
- out_degree(typename graph_traits<G>::vertex_descriptor u_local,
- const subgraph<G>& g)
- { return out_degree(u_local, g.m_graph); }
-
- template <typename G>
- typename graph_traits<G>::vertex_descriptor
- source(typename graph_traits<G>::edge_descriptor e_local,
- const subgraph<G>& g)
- { return source(e_local, g.m_graph); }
-
- template <typename G>
- typename graph_traits<G>::vertex_descriptor
- target(typename graph_traits<G>::edge_descriptor e_local,
- const subgraph<G>& g)
- { return target(e_local, g.m_graph); }
-
- //===========================================================================
- // Functions required by the BidirectionalGraph concept
-
- template <typename G>
- std::pair<typename graph_traits<G>::in_edge_iterator,
- typename graph_traits<G>::in_edge_iterator>
- in_edges(typename graph_traits<G>::vertex_descriptor u_local,
- const subgraph<G>& g)
- { return in_edges(u_local, g.m_graph); }
-
- template <typename G>
- typename graph_traits<G>::degree_size_type
- in_degree(typename graph_traits<G>::vertex_descriptor u_local,
- const subgraph<G>& g)
- { return in_degree(u_local, g.m_graph); }
-
- template <typename G>
- typename graph_traits<G>::degree_size_type
- degree(typename graph_traits<G>::vertex_descriptor u_local,
- const subgraph<G>& g)
- { return degree(u_local, g.m_graph); }
-
- //===========================================================================
- // Functions required by the AdjacencyGraph concept
-
- template <typename G>
- std::pair<typename subgraph<G>::adjacency_iterator,
- typename subgraph<G>::adjacency_iterator>
- adjacent_vertices(typename subgraph<G>::vertex_descriptor u_local,
- const subgraph<G>& g)
- { return adjacent_vertices(u_local, g.m_graph); }
-
- //===========================================================================
- // Functions required by the VertexListGraph concept
-
- template <typename G>
- std::pair<typename subgraph<G>::vertex_iterator,
- typename subgraph<G>::vertex_iterator>
- vertices(const subgraph<G>& g)
- { return vertices(g.m_graph); }
-
- template <typename G>
- typename subgraph<G>::vertices_size_type
- num_vertices(const subgraph<G>& g)
- { return num_vertices(g.m_graph); }
-
- //===========================================================================
- // Functions required by the EdgeListGraph concept
-
- template <typename G>
- std::pair<typename subgraph<G>::edge_iterator,
- typename subgraph<G>::edge_iterator>
- edges(const subgraph<G>& g)
- { return edges(g.m_graph); }
-
- template <typename G>
- typename subgraph<G>::edges_size_type
- num_edges(const subgraph<G>& g)
- { return num_edges(g.m_graph); }
-
- //===========================================================================
- // Functions required by the AdjacencyMatrix concept
-
- template <typename G>
- std::pair<typename subgraph<G>::edge_descriptor, bool>
- edge(typename subgraph<G>::vertex_descriptor u_local,
- typename subgraph<G>::vertex_descriptor v_local,
- const subgraph<G>& g)
- {
- return edge(u_local, v_local, g.m_graph);
- }
+//===========================================================================
+// Functions required by the IncidenceGraph concept
- //===========================================================================
- // Functions required by the MutableGraph concept
+template <typename G>
+std::pair<typename graph_traits<G>::out_edge_iterator,
+ typename graph_traits<G>::out_edge_iterator>
+out_edges(typename graph_traits<G>::vertex_descriptor v, const subgraph<G>& g)
+{ return out_edges(v, g.m_graph); }
+
+template <typename G>
+typename graph_traits<G>::degree_size_type
+out_degree(typename graph_traits<G>::vertex_descriptor v, const subgraph<G>& g)
+{ return out_degree(v, g.m_graph); }
+
+template <typename G>
+typename graph_traits<G>::vertex_descriptor
+source(typename graph_traits<G>::edge_descriptor e, const subgraph<G>& g)
+{ return source(e, g.m_graph); }
+
+template <typename G>
+typename graph_traits<G>::vertex_descriptor
+target(typename graph_traits<G>::edge_descriptor e, const subgraph<G>& g)
+{ return target(e, g.m_graph); }
+
+//===========================================================================
+// Functions required by the BidirectionalGraph concept
+
+template <typename G>
+std::pair<typename graph_traits<G>::in_edge_iterator,
+ typename graph_traits<G>::in_edge_iterator>
+in_edges(typename graph_traits<G>::vertex_descriptor v, const subgraph<G>& g)
+{ return in_edges(v, g.m_graph); }
+
+template <typename G>
+typename graph_traits<G>::degree_size_type
+in_degree(typename graph_traits<G>::vertex_descriptor v, const subgraph<G>& g)
+{ return in_degree(v, g.m_graph); }
+
+template <typename G>
+typename graph_traits<G>::degree_size_type
+degree(typename graph_traits<G>::vertex_descriptor v, const subgraph<G>& g)
+{ return degree(v, g.m_graph); }
+
+//===========================================================================
+// Functions required by the AdjacencyGraph concept
+
+template <typename G>
+std::pair<typename subgraph<G>::adjacency_iterator,
+ typename subgraph<G>::adjacency_iterator>
+adjacent_vertices(typename subgraph<G>::vertex_descriptor v, const subgraph<G>& g)
+{ return adjacent_vertices(v, g.m_graph); }
+
+//===========================================================================
+// Functions required by the VertexListGraph concept
+
+template <typename G>
+std::pair<typename subgraph<G>::vertex_iterator,
+ typename subgraph<G>::vertex_iterator>
+vertices(const subgraph<G>& g)
+{ return vertices(g.m_graph); }
+
+template <typename G>
+typename subgraph<G>::vertices_size_type
+num_vertices(const subgraph<G>& g)
+{ return num_vertices(g.m_graph); }
+
+//===========================================================================
+// Functions required by the EdgeListGraph concept
+
+template <typename G>
+std::pair<typename subgraph<G>::edge_iterator,
+ typename subgraph<G>::edge_iterator>
+edges(const subgraph<G>& g)
+{ return edges(g.m_graph); }
+
+template <typename G>
+typename subgraph<G>::edges_size_type
+num_edges(const subgraph<G>& g)
+{ return num_edges(g.m_graph); }
+
+//===========================================================================
+// Functions required by the AdjacencyMatrix concept
+
+template <typename G>
+std::pair<typename subgraph<G>::edge_descriptor, bool>
+edge(typename subgraph<G>::vertex_descriptor u,
+ typename subgraph<G>::vertex_descriptor v,
+ const subgraph<G>& g)
+{ return edge(u, v, g.m_graph); }
- namespace detail {
+//===========================================================================
+// Functions required by the MutableGraph concept
+
+namespace detail {
template <typename Vertex, typename Edge, typename Graph>
- void add_edge_recur_down
- (Vertex u_global, Vertex v_global, Edge e_global, subgraph<Graph>& g);
+ void add_edge_recur_down(Vertex u_global, Vertex v_global, Edge e_global,
+ subgraph<Graph>& g);
template <typename Vertex, typename Edge, typename Children, typename G>
void children_add_edge(Vertex u_global, Vertex v_global, Edge e_global,
Children& c, subgraph<G>* orig)
{
- for (typename Children::iterator i = c.begin(); i != c.end(); ++i)
- if ((*i)->find_vertex(u_global).second
- && (*i)->find_vertex(v_global).second)
- add_edge_recur_down(u_global, v_global, e_global, **i, orig);
+ for(typename Children::iterator i = c.begin(); i != c.end(); ++i) {
+ if ((*i)->find_vertex(u_global).second &&
+ (*i)->find_vertex(v_global).second)
+ {
+ add_edge_recur_down(u_global, v_global, e_global, **i, orig);
+ }
+ }
}
template <typename Vertex, typename Edge, typename Graph>
- void add_edge_recur_down
- (Vertex u_global, Vertex v_global, Edge e_global, subgraph<Graph>& g,
- subgraph<Graph>* orig)
+ void add_edge_recur_down(Vertex u_global, Vertex v_global, Edge e_global,
+ subgraph<Graph>& g, subgraph<Graph>* orig)
{
- if (&g != orig ) {
- // add local edge only if u_global and v_global are in subgraph g
- Vertex u_local, v_local;
- bool u_in_subgraph, v_in_subgraph;
- tie(u_local, u_in_subgraph) = g.find_vertex(u_global);
- tie(v_local, v_in_subgraph) = g.find_vertex(v_global);
- if (u_in_subgraph && v_in_subgraph)
- g.local_add_edge(u_local, v_local, e_global);
- }
- children_add_edge(u_global, v_global, e_global, g.m_children, orig);
+ if(&g != orig ) {
+ // add local edge only if u_global and v_global are in subgraph g
+ Vertex u_local, v_local;
+ bool u_in_subgraph, v_in_subgraph;
+ tie(u_local, u_in_subgraph) = g.find_vertex(u_global);
+ tie(v_local, v_in_subgraph) = g.find_vertex(v_global);
+ if(u_in_subgraph && v_in_subgraph) {
+ g.local_add_edge(u_local, v_local, e_global);
+ }
+ }
+ children_add_edge(u_global, v_global, e_global, g.m_children, orig);
}
template <typename Vertex, typename Graph>
@@ -473,58 +520,57 @@
const typename Graph::edge_property_type& ep,
subgraph<Graph>& g, subgraph<Graph>* orig)
{
- if (g.is_root()) {
- typename subgraph<Graph>::edge_descriptor e_global;
+ if(g.is_root()) {
+ typename subgraph<Graph>::edge_descriptor e_global;
+ bool inserted;
+ tie(e_global, inserted) = add_edge(u_global, v_global, ep, g.m_graph);
+ put(edge_index, g.m_graph, e_global, g.m_edge_counter++);
+ g.m_global_edge.push_back(e_global);
+ children_add_edge(u_global, v_global, e_global, g.m_children, orig);
+ return std::make_pair(e_global, inserted);
+ } else {
+ return add_edge_recur_up(u_global, v_global, ep, *g.m_parent, orig);
+ }
+ }
+
+} // namespace detail
+
+// Add an edge to the subgraph g, specified by the local vertex descriptors u
+// and v. In addition, the edge will be added to any (all) other subgraphs that
+// contain vertex descriptors u and v.
+
+template <typename G>
+std::pair<typename subgraph<G>::edge_descriptor, bool>
+add_edge(typename subgraph<G>::vertex_descriptor u,
+ typename subgraph<G>::vertex_descriptor v,
+ const typename G::edge_property_type& ep,
+ subgraph<G>& g)
+{
+ if (g.is_root()) {
+ // u and v are really global
+ return detail::add_edge_recur_up(u, v, ep, g, &g);
+ } else {
+ typename subgraph<G>::edge_descriptor e_local, e_global;
bool inserted;
- tie(e_global, inserted) = add_edge(u_global, v_global, ep, g.m_graph);
- put(edge_index, g.m_graph, e_global, g.m_edge_counter++);
- g.m_global_edge.push_back(e_global);
- children_add_edge(u_global, v_global, e_global, g.m_children, orig);
- return std::make_pair(e_global, inserted);
- } else
- return add_edge_recur_up(u_global, v_global, ep, *g.m_parent, orig);
- }
-
- } // namespace detail
-
- // Add an edge to the subgraph g, specified by the local vertex
- // descriptors u and v. In addition, the edge will be added to any
- // other subgraphs which contain vertex descriptors u and v.
-
- template <typename G>
- std::pair<typename subgraph<G>::edge_descriptor, bool>
- add_edge(typename subgraph<G>::vertex_descriptor u_local,
- typename subgraph<G>::vertex_descriptor v_local,
- const typename G::edge_property_type& ep,
- subgraph<G>& g)
- {
- if (g.is_root()) // u_local and v_local are really global
- return detail::add_edge_recur_up(u_local, v_local, ep, g, &g);
- else {
- typename subgraph<G>::edge_descriptor e_local, e_global;
- bool inserted;
- tie(e_global, inserted) = detail::add_edge_recur_up
- (g.local_to_global(u_local), g.local_to_global(v_local), ep, g, &g);
- e_local = g.local_add_edge(u_local, v_local, e_global);
- return std::make_pair(e_local, inserted);
- }
- }
-
- template <typename G>
- std::pair<typename subgraph<G>::edge_descriptor, bool>
- add_edge(typename subgraph<G>::vertex_descriptor u,
- typename subgraph<G>::vertex_descriptor v,
- subgraph<G>& g)
- {
- typename G::edge_property_type ep;
- return add_edge(u, v, ep, g);
- }
-
- namespace detail {
+ tie(e_global, inserted) =
+ detail::add_edge_recur_up(g.local_to_global(u),
+ g.local_to_global(v),
+ ep, g, &g);
+ e_local = g.local_add_edge(u, v, e_global);
+ return std::make_pair(e_local, inserted);
+ }
+}
+
+template <typename G>
+std::pair<typename subgraph<G>::edge_descriptor, bool>
+add_edge(typename subgraph<G>::vertex_descriptor u,
+ typename subgraph<G>::vertex_descriptor v,
+ subgraph<G>& g)
+{ return add_edge(u, v, typename G::edge_property_type(), g); }
+namespace detail {
//-------------------------------------------------------------------------
// implementation of remove_edge(u,v,g)
-
template <typename Vertex, typename Graph>
void remove_edge_recur_down(Vertex u_global, Vertex v_global,
subgraph<Graph>& g);
@@ -533,339 +579,642 @@
void children_remove_edge(Vertex u_global, Vertex v_global,
Children& c)
{
- for (typename Children::iterator i = c.begin(); i != c.end(); ++i)
- if ((*i)->find_vertex(u_global).second
- && (*i)->find_vertex(v_global).second)
- remove_edge_recur_down(u_global, v_global, **i);
+ for(typename Children::iterator i = c.begin(); i != c.end(); ++i) {
+ if((*i)->find_vertex(u_global).second &&
+ (*i)->find_vertex(v_global).second)
+ {
+ remove_edge_recur_down(u_global, v_global, **i);
+ }
+ }
}
template <typename Vertex, typename Graph>
void remove_edge_recur_down(Vertex u_global, Vertex v_global,
subgraph<Graph>& g)
{
- Vertex u_local, v_local;
- u_local = g.m_local_vertex[u_global];
- v_local = g.m_local_vertex[v_global];
- remove_edge(u_local, v_local, g.m_graph);
- children_remove_edge(u_global, v_global, g.m_children);
+ Vertex u_local, v_local;
+ u_local = g.m_local_vertex[u_global];
+ v_local = g.m_local_vertex[v_global];
+ remove_edge(u_local, v_local, g.m_graph);
+ children_remove_edge(u_global, v_global, g.m_children);
}
template <typename Vertex, typename Graph>
void remove_edge_recur_up(Vertex u_global, Vertex v_global,
subgraph<Graph>& g)
{
- if (g.is_root()) {
- remove_edge(u_global, v_global, g.m_graph);
- children_remove_edge(u_global, v_global, g.m_children);
- } else
- remove_edge_recur_up(u_global, v_global, *g.m_parent);
+ if(g.is_root()) {
+ remove_edge(u_global, v_global, g.m_graph);
+ children_remove_edge(u_global, v_global, g.m_children);
+ } else {
+ remove_edge_recur_up(u_global, v_global, *g.m_parent);
+ }
}
//-------------------------------------------------------------------------
// implementation of remove_edge(e,g)
-
template <typename Edge, typename Graph>
void remove_edge_recur_down(Edge e_global, subgraph<Graph>& g);
template <typename Edge, typename Children>
void children_remove_edge(Edge e_global, Children& c)
{
- for (typename Children::iterator i = c.begin(); i != c.end(); ++i)
- if ((*i)->find_vertex(source(e_global, **i)).second
- && (*i)->find_vertex(target(e_global, **i)).second)
- remove_edge_recur_down(source(e_global, **i),
- target(e_global, **i), **i);
+ for(typename Children::iterator i = c.begin(); i != c.end(); ++i) {
+ if((*i)->find_vertex(source(e_global, **i)).second &&
+ (*i)->find_vertex(target(e_global, **i)).second)
+ {
+ remove_edge_recur_down(source(e_global, **i),
+ target(e_global, **i),
+ **i);
+ }
+ }
}
template <typename Edge, typename Graph>
void remove_edge_recur_down(Edge e_global, subgraph<Graph>& g)
{
- remove_edge(g.global_to_local(e_global), g.m_graph);
- children_remove_edge(e_global, g.m_children);
+ remove_edge(g.global_to_local(e_global), g.m_graph);
+ children_remove_edge(e_global, g.m_children);
}
template <typename Edge, typename Graph>
void remove_edge_recur_up(Edge e_global, subgraph<Graph>& g)
{
- if (g.is_root()) {
- remove_edge(e_global, g.m_graph);
- children_remove_edge(e_global, g.m_children);
- } else
- remove_edge_recur_up(e_global, *g.m_parent);
+ if (g.is_root()) {
+ remove_edge(e_global, g.m_graph);
+ children_remove_edge(e_global, g.m_children);
+ } else {
+ remove_edge_recur_up(e_global, *g.m_parent);
+ }
+ }
+
+} // namespace detail
+
+template <typename G>
+void
+remove_edge(typename subgraph<G>::vertex_descriptor u,
+ typename subgraph<G>::vertex_descriptor v,
+ subgraph<G>& g)
+{
+ if(g.is_root()) {
+ detail::remove_edge_recur_up(u, v, g);
+ } else {
+ detail::remove_edge_recur_up(g.local_to_global(u),
+ g.local_to_global(v), g);
}
+}
- } // namespace detail
-
- template <typename G>
- void
- remove_edge(typename subgraph<G>::vertex_descriptor u_local,
- typename subgraph<G>::vertex_descriptor v_local,
- subgraph<G>& g)
- {
- if (g.is_root())
- detail::remove_edge_recur_up(u_local, v_local, g);
- else
- detail::remove_edge_recur_up(g.local_to_global(u_local),
- g.local_to_global(v_local), g);
- }
-
- template <typename G>
- void
- remove_edge(typename subgraph<G>::edge_descriptor e_local,
- subgraph<G>& g)
- {
- if (g.is_root())
- detail::remove_edge_recur_up(e_local, g);
- else
- detail::remove_edge_recur_up(g.local_to_global(e_local), g);
- }
-
- template <typename Predicate, typename G>
- void
- remove_edge_if(Predicate p, subgraph<G>& g)
- {
- // This is wrong...
- remove_edge_if(p, g.m_graph);
- }
-
- template <typename G>
- void
- clear_vertex(typename subgraph<G>::vertex_descriptor v_local,
- subgraph<G>& g)
- {
- // this is wrong...
- clear_vertex(v_local, g.m_graph);
- }
+template <typename G>
+void
+remove_edge(typename subgraph<G>::edge_descriptor e, subgraph<G>& g)
+{
+ if(g.is_root()) {
+ detail::remove_edge_recur_up(e, g);
+ } else {
+ detail::remove_edge_recur_up(g.local_to_global(e), g);
+ }
+}
- namespace detail {
+// TODO: This is wrong...
+template <typename Predicate, typename G>
+void
+remove_edge_if(Predicate p, subgraph<G>& g)
+{ remove_edge_if(p, g.m_graph); }
+
+// TODO: Ths is wrong
+template <typename G>
+void
+clear_vertex(typename subgraph<G>::vertex_descriptor v, subgraph<G>& g)
+{ clear_vertex(v, g.m_graph); }
+namespace detail {
template <typename G>
typename subgraph<G>::vertex_descriptor
add_vertex_recur_up(subgraph<G>& g)
{
- typename subgraph<G>::vertex_descriptor u_local, u_global;
- if (g.is_root()) {
+ typename subgraph<G>::vertex_descriptor u_local, u_global;
+ if (g.is_root()) {
+ u_global = add_vertex(g.m_graph);
+ g.m_global_vertex.push_back(u_global);
+ } else {
+ u_global = add_vertex_recur_up(*g.m_parent);
+ u_local = add_vertex(g.m_graph);
+ g.m_global_vertex.push_back(u_global);
+ g.m_local_vertex[u_global] = u_local;
+ }
+ return u_global;
+ }
+} // namespace detail
+
+template <typename G>
+typename subgraph<G>::vertex_descriptor
+add_vertex(subgraph<G>& g)
+{
+ typename subgraph<G>::vertex_descriptor u_local, u_global;
+ if(g.is_root()) {
u_global = add_vertex(g.m_graph);
g.m_global_vertex.push_back(u_global);
- } else {
- u_global = add_vertex_recur_up(*g.m_parent);
+ u_local = u_global;
+ } else {
+ u_global = detail::add_vertex_recur_up(g.parent());
u_local = add_vertex(g.m_graph);
g.m_global_vertex.push_back(u_global);
g.m_local_vertex[u_global] = u_local;
- }
- return u_global;
- }
-
- } // namespace detail
-
- template <typename G>
- typename subgraph<G>::vertex_descriptor
- add_vertex(subgraph<G>& g)
- {
- typename subgraph<G>::vertex_descriptor u_local, u_global;
- if (g.is_root()) {
- u_global = add_vertex(g.m_graph);
- g.m_global_vertex.push_back(u_global);
- u_local = u_global;
- } else {
- u_global = detail::add_vertex_recur_up(g.parent());
- u_local = add_vertex(g.m_graph);
- g.m_global_vertex.push_back(u_global);
- g.m_local_vertex[u_global] = u_local;
}
return u_local;
- }
-
- template <typename G>
- void remove_vertex(typename subgraph<G>::vertex_descriptor u,
- subgraph<G>& g)
- {
- // UNDER CONSTRUCTION
- assert(false);
- }
-
+}
- //===========================================================================
- // Functions required by the PropertyGraph concept
- template <typename GraphPtr, typename PropertyMap, typename Tag>
- class subgraph_global_property_map
+// TODO: Under Construction
+template <typename G>
+void remove_vertex(typename subgraph<G>::vertex_descriptor u, subgraph<G>& g)
+{ assert(false); }
+
+//===========================================================================
+// Functions required by the PropertyGraph concept
+
+/**
+ * The global property map returns the global properties associated with local
+ * descriptors.
+ */
+template <typename GraphPtr, typename PropertyMap, typename Tag>
+class subgraph_global_property_map
: public put_get_helper<
typename property_traits<PropertyMap>::reference,
- subgraph_global_property_map<GraphPtr, PropertyMap, Tag> >
- {
+ subgraph_global_property_map<GraphPtr, PropertyMap, Tag>
+ >
+{
typedef property_traits<PropertyMap> Traits;
- public:
+public:
typedef typename Traits::category category;
typedef typename Traits::value_type value_type;
typedef typename Traits::key_type key_type;
typedef typename Traits::reference reference;
- subgraph_global_property_map() { }
+ subgraph_global_property_map()
+ { }
subgraph_global_property_map(GraphPtr g)
- : m_g(g) { }
+ : m_g(g)
+ { }
- inline reference operator[](key_type e_local) const {
- PropertyMap pmap = get(Tag(), m_g->root().m_graph);
- if (m_g->m_parent == 0)
- return pmap[e_local];
- else
- return pmap[m_g->local_to_global(e_local)];
+ reference operator[](key_type e) const {
+ PropertyMap pmap = get(Tag(), m_g->root().m_graph);
+ return m_g->is_root()
+ ? pmap[e]
+ : pmap[m_g->local_to_global(e)];
}
+
GraphPtr m_g;
- };
+};
- template <typename GraphPtr, typename PropertyMap, typename Tag>
- class subgraph_local_property_map
+/**
+ * The local property map returns the local property associated with the local
+ * descriptors.
+ */
+template <typename GraphPtr, typename PropertyMap, typename Tag>
+class subgraph_local_property_map
: public put_get_helper<
typename property_traits<PropertyMap>::reference,
- subgraph_local_property_map<GraphPtr, PropertyMap, Tag> >
- {
+ subgraph_local_property_map<GraphPtr, PropertyMap, Tag>
+ >
+{
typedef property_traits<PropertyMap> Traits;
- public:
+public:
typedef typename Traits::category category;
typedef typename Traits::value_type value_type;
typedef typename Traits::key_type key_type;
typedef typename Traits::reference reference;
- subgraph_local_property_map() { }
+ typedef Tag tag;
+ typedef PropertyMap pmap;
+
+ subgraph_local_property_map()
+ { }
subgraph_local_property_map(GraphPtr g)
- : m_g(g) { }
+ : m_g(g)
+ { }
- inline reference operator[](key_type e_local) const {
- PropertyMap pmap = get(Tag(), *m_g);
- return pmap[e_local];
+ reference operator[](key_type e) const {
+ // Get property map on the underlying graph.
+ PropertyMap pmap = get(Tag(), m_g->m_graph);
+ return pmap[e];
}
+
GraphPtr m_g;
- };
+};
+
+namespace detail {
+ // Extract the actual tags from local or global property maps so we don't
+ // try to find non-properties.
+ template <typename P> struct extract_lg_tag { typedef P type; };
+ template <typename P> struct extract_lg_tag< local_property<P> > {
+ typedef P type;
+ };
+ template <typename P> struct extract_lg_tag< global_property<P> > {
+ typedef P type;
+ };
- namespace detail {
+ // NOTE: Mysterious Property template parameter unused in both metafunction
+ // classes.
+ struct subgraph_global_pmap {
+ template <class Tag, class SubGraph, class Property>
+ struct bind_ {
+ typedef typename SubGraph::graph_type Graph;
+ typedef SubGraph* SubGraphPtr;
+ typedef const SubGraph* const_SubGraphPtr;
+ typedef typename extract_lg_tag<Tag>::type TagType;
+ typedef typename property_map<Graph, TagType>::type PMap;
+ typedef typename property_map<Graph, TagType>::const_type const_PMap;
+ public:
+ typedef subgraph_global_property_map<SubGraphPtr, PMap, TagType> type;
+ typedef subgraph_global_property_map<const_SubGraphPtr, const_PMap, TagType>
+ const_type;
+ };
+ };
- struct subgraph_any_pmap {
- template <class Tag, class SubGraph, class Property>
- class bind_ {
- typedef typename SubGraph::graph_type Graph;
- typedef SubGraph* SubGraphPtr;
- typedef const SubGraph* const_SubGraphPtr;
- typedef typename property_map<Graph, Tag>::type PMap;
- typedef typename property_map<Graph, Tag>::const_type const_PMap;
- public:
- typedef subgraph_global_property_map<SubGraphPtr, PMap, Tag> type;
- typedef subgraph_global_property_map<const_SubGraphPtr, const_PMap, Tag>
- const_type;
- };
- };
- struct subgraph_id_pmap {
- template <class Tag, class SubGraph, class Property>
- struct bind_ {
- typedef typename SubGraph::graph_type Graph;
- typedef SubGraph* SubGraphPtr;
- typedef const SubGraph* const_SubGraphPtr;
- typedef typename property_map<Graph, Tag>::type PMap;
- typedef typename property_map<Graph, Tag>::const_type const_PMap;
- public:
- typedef subgraph_local_property_map<SubGraphPtr, PMap, Tag> type;
- typedef subgraph_local_property_map<const_SubGraphPtr, const_PMap, Tag>
- const_type;
- };
+ struct subgraph_local_pmap {
+ template <class Tag, class SubGraph, class Property>
+ struct bind_ {
+ typedef typename SubGraph::graph_type Graph;
+ typedef SubGraph* SubGraphPtr;
+ typedef const SubGraph* const_SubGraphPtr;
+ typedef typename extract_lg_tag<Tag>::type TagType;
+ typedef typename property_map<Graph, TagType>::type PMap;
+ typedef typename property_map<Graph, TagType>::const_type const_PMap;
+ public:
+ typedef subgraph_local_property_map<SubGraphPtr, PMap, TagType> type;
+ typedef subgraph_local_property_map<const_SubGraphPtr, const_PMap, TagType>
+ const_type;
+ };
};
+
+ // These metafunctions select the corresponding metafunctions above, and
+ // are used by the choose_pmap metafunction below to specialize the choice
+ // of local/global property map. By default, we defer to the global
+ // property.
template <class Tag>
struct subgraph_choose_pmap_helper {
- typedef subgraph_any_pmap type;
+ typedef subgraph_global_pmap type;
};
+ template <class Tag>
+ struct subgraph_choose_pmap_helper< local_property<Tag> > {
+ typedef subgraph_local_pmap type;
+ };
+ template <class Tag>
+ struct subgraph_choose_pmap_helper< global_property<Tag> > {
+ typedef subgraph_global_pmap type;
+ };
+
+ // As above, unless we're requesting vertex_index_t. Then it's always a
+ // local property map. This enables the correct translation of descriptors
+ // between local and global layers.
template <>
struct subgraph_choose_pmap_helper<vertex_index_t> {
- typedef subgraph_id_pmap type;
+ typedef subgraph_local_pmap type;
+ };
+ template <>
+ struct subgraph_choose_pmap_helper< local_property<vertex_index_t> > {
+ typedef subgraph_local_pmap type;
+ };
+ template <>
+ struct subgraph_choose_pmap_helper< global_property<vertex_index_t> > {
+ typedef subgraph_local_pmap type;
};
+
+ // Determine the kind of property. If SameType<Tag, vertex_index_t>, then
+ // the property lookup is always local. Otherwise, the lookup is global.
+ // NOTE: Property parameter is basically unused.
template <class Tag, class Graph, class Property>
struct subgraph_choose_pmap {
- typedef typename subgraph_choose_pmap_helper<Tag>::type Helper;
- typedef typename Helper::template bind_<Tag, Graph, Property> Bind;
- typedef typename Bind::type type;
- typedef typename Bind::const_type const_type;
+ typedef typename subgraph_choose_pmap_helper<Tag>::type Helper;
+ typedef typename Helper::template bind_<Tag, Graph, Property> Bind;
+ typedef typename Bind::type type;
+ typedef typename Bind::const_type const_type;
};
+
+ // Used by the vertex/edge property selectors to determine the kind(s) of
+ // property maps used by the property_map type generator.
struct subgraph_property_generator {
- template <class SubGraph, class Property, class Tag>
- struct bind_ {
- typedef subgraph_choose_pmap<Tag, SubGraph, Property> Choice;
- typedef typename Choice::type type;
- typedef typename Choice::const_type const_type;
- };
+ template <class SubGraph, class Property, class Tag>
+ struct bind_ {
+ typedef subgraph_choose_pmap<Tag, SubGraph, Property> Choice;
+ typedef typename Choice::type type;
+ typedef typename Choice::const_type const_type;
+ };
};
} // namespace detail
- template <>
- struct vertex_property_selector<subgraph_tag> {
+template <>
+struct vertex_property_selector<subgraph_tag> {
typedef detail::subgraph_property_generator type;
- };
+};
- template <>
- struct edge_property_selector<subgraph_tag> {
+template <>
+struct edge_property_selector<subgraph_tag> {
typedef detail::subgraph_property_generator type;
- };
+};
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+/** @internal
+ * This property map implements local or global bundled property access on
+ * an underlying graph. The LocalGlobal template template parameter must be
+ * one of the local_property or global_property templates.
+ */
+template <
+ typename Graph, typename Descriptor, typename Bundle, typename T,
+ template <typename> class LocalGlobal>
+struct subgraph_lg_bundle_property_map
+ : put_get_helper<
+ T&,
+ subgraph_lg_bundle_property_map<Graph, Descriptor, Bundle, T, LocalGlobal>
+ >
+{
+private:
+ typedef LocalGlobal<Descriptor> Wrap;
+public:
+ typedef Descriptor key_type;
+ typedef typename remove_const<T>::type value_type;
+ typedef T& reference;
+ typedef lvalue_property_map_tag category;
+
+ subgraph_lg_bundle_property_map()
+ { }
- template <typename G, typename Property>
- typename property_map< subgraph<G>, Property>::type
- get(Property, subgraph<G>& g)
- {
+ subgraph_lg_bundle_property_map(Graph* g, T Bundle::* p)
+ : m_g(g), m_prop(p)
+ { }
+
+ reference operator[](key_type k) const
+ { return (*m_g)[Wrap(k)].*m_prop; }
+
+private:
+ Graph* m_g;
+ T Bundle::* m_prop;
+};
+
+// Specialize the property map template to generate bundled property maps.
+// NOTE: I'm cheating (actually double-dipping) with the local/global subgraph
+// property templates. I'm not using them store descriptors, just specialize
+// the property map template for specific lookups.
+namespace graph_detail {
+ // Help decoding some of the types required for property map definitions.
+ template <typename Graph, typename T, typename Bundle>
+ struct bundled_subgraph_pmap_helper {
+ typedef subgraph<Graph> Subgraph;
+ typedef graph_traits<Subgraph> Traits;
+ typedef typename Subgraph::vertex_bundled VertBundled;
+ typedef typename Subgraph::edge_bundled EdgeBundled;
+
+ // Deduce the descriptor from the template params
+ typedef typename mpl::if_<
+ detail::is_vertex_bundle<VertBundled, EdgeBundled, Bundle>,
+ typename Traits::vertex_descriptor, typename Traits::edge_descriptor
+ >::type Desc;
+
+ // Deduce the bundled property type
+ typedef typename mpl::if_<
+ detail::is_vertex_bundle<VertBundled, EdgeBundled, Bundle>,
+ VertBundled, EdgeBundled
+ >::type Prop;
+ };
+} // namespace graph_detail
+
+template <typename Graph, typename T, typename Bundle>
+struct property_map<subgraph<Graph>, local_property<T Bundle::*> >
+ : graph_detail::bundled_subgraph_pmap_helper<Graph, T, Bundle>
+{
+private:
+ typedef graph_detail::bundled_subgraph_pmap_helper<Graph, T, Bundle> Base;
+ typedef typename Base::Subgraph Subgraph;
+ typedef typename Base::Desc Desc;
+ typedef typename Base::Prop Prop;
+public:
+ typedef subgraph_lg_bundle_property_map<
+ Subgraph, Desc, Prop, T, local_property
+ > type;
+ typedef subgraph_lg_bundle_property_map<
+ Subgraph const, Desc, Prop, T const, local_property
+ > const_type;
+};
+
+template <typename Graph, typename T, typename Bundle>
+struct property_map<subgraph<Graph>, global_property<T Bundle::*> >
+ : graph_detail::bundled_subgraph_pmap_helper<Graph, T, Bundle>
+{
+private:
+ typedef graph_detail::bundled_subgraph_pmap_helper<Graph, T, Bundle> Base;
+ typedef typename Base::Subgraph Subgraph;
+ typedef typename Base::Desc Desc;
+ typedef typename Base::Prop Prop;
+public:
+ typedef subgraph_lg_bundle_property_map<
+ Subgraph, Desc, Prop, T, global_property
+ > type;
+ typedef subgraph_lg_bundle_property_map<
+ Subgraph const, Desc, Prop, T const, global_property
+ > const_type;
+};
+#endif
+
+// ==================================================
+// get(p, g), get(p, g, k), and put(p, g, k, v)
+// ==================================================
+template <typename G, typename Property>
+typename property_map<subgraph<G>, Property>::type
+get(Property, subgraph<G>& g) {
typedef typename property_map< subgraph<G>, Property>::type PMap;
return PMap(&g);
- }
+}
- template <typename G, typename Property>
- typename property_map< subgraph<G>, Property>::const_type
- get(Property, const subgraph<G>& g)
- {
+template <typename G, typename Property>
+typename property_map<subgraph<G>, Property>::const_type
+get(Property, const subgraph<G>& g) {
typedef typename property_map< subgraph<G>, Property>::const_type PMap;
return PMap(&g);
- }
+}
- template <typename G, typename Property, typename Key>
- typename property_traits<
- typename property_map< subgraph<G>, Property>::const_type
- >::value_type
- get(Property, const subgraph<G>& g, const Key& k)
- {
+template <typename G, typename Property, typename Key>
+typename property_traits<
+ typename property_map<subgraph<G>, Property>::const_type
+>::value_type
+get(Property, const subgraph<G>& g, const Key& k) {
typedef typename property_map< subgraph<G>, Property>::const_type PMap;
PMap pmap(&g);
return pmap[k];
- }
+}
- template <typename G, typename Property, typename Key, typename Value>
- void
- put(Property, subgraph<G>& g, const Key& k, const Value& val)
- {
+template <typename G, typename Property, typename Key, typename Value>
+void put(Property, subgraph<G>& g, const Key& k, const Value& val) {
typedef typename property_map< subgraph<G>, Property>::type PMap;
PMap pmap(&g);
pmap[k] = val;
- }
+}
+
+// ==================================================
+// get(global(p), g)
+// NOTE: get(global(p), g, k) and put(global(p), g, k, v) not supported
+// ==================================================
+template <typename G, typename Property>
+typename property_map<subgraph<G>, global_property<Property> >::type
+get(global_property<Property>, subgraph<G>& g) {
+ typedef typename property_map<
+ subgraph<G>, global_property<Property>
+ >::type Map;
+ return Map(&g);
+}
+
+template <typename G, typename Property>
+typename property_map<subgraph<G>, global_property<Property> >::const_type
+get(global_property<Property>, const subgraph<G>& g) {
+ typedef typename property_map<
+ subgraph<G>, global_property<Property>
+ >::const_type Map;
+ return Map(&g);
+}
+
+// ==================================================
+// get(local(p), g)
+// NOTE: get(local(p), g, k) and put(local(p), g, k, v) not supported
+// ==================================================
+template <typename G, typename Property>
+typename property_map<subgraph<G>, local_property<Property> >::type
+get(local_property<Property>, subgraph<G>& g) {
+ typedef typename property_map<
+ subgraph<G>, local_property<Property>
+ >::type Map;
+ return Map(&g);
+}
+
+template <typename G, typename Property>
+typename property_map<subgraph<G>, local_property<Property> >::const_type
+get(local_property<Property>, const subgraph<G>& g) {
+ typedef typename property_map<
+ subgraph<G>, local_property<Property>
+ >::const_type Map;
+ return Map(&g);
+}
- template <typename G, typename Tag>
- inline
- typename graph_property<G, Tag>::type&
- get_property(subgraph<G>& g, Tag tag) {
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+// ==================================================
+// get(bundle(p), g)
+// ==================================================
+
+template<typename G, typename T, typename Bundle>
+inline typename property_map<subgraph<G>, T Bundle::*>::type
+get(T Bundle::* p, subgraph<G>& g) {
+ typedef typename property_map<subgraph<G>, T Bundle::*>::type Map;
+ return Map(&g, p);
+}
+
+template<typename G, typename T, typename Bundle>
+inline typename property_map<subgraph<G>, T Bundle::*>::const_type
+get(T Bundle::* p, subgraph<G> const& g) {
+ typedef typename property_map<subgraph<G>, T Bundle::*>::const_type Map;
+ return Map(&g, p);
+}
+
+template <typename Graph, typename Type, typename Bundle, typename Key>
+inline Type get(Type Bundle::* p, subgraph<Graph> const& g, Key const& k)
+{ return get(get(p, g), k); }
+
+template <typename Graph, typename Type, typename Bundle, typename Key,
+ typename Value>
+inline void put(Type Bundle::* p, Graph& g, Key const& k, Value const& v)
+{ put(get(p, g), k, v); }
+
+// =========================================================
+// Local bundled, get
+
+template<typename G, typename T, typename Bundle>
+inline typename property_map<
+ subgraph<G>, local_property<T Bundle::*>
+>::type
+get(local_property<T Bundle::*> p, subgraph<G>& g) {
+ typedef typename property_map<
+ subgraph<G>, local_property<T Bundle::*>
+ >::type Map;
+ return Map(&g, p.value);
+}
+
+template<typename G, typename T, typename Bundle>
+inline typename property_map<
+ subgraph<G>, local_property<T Bundle::*>
+>::const_type
+get(local_property<T Bundle::*> p, subgraph<G> const& g) {
+ typedef typename property_map<
+ subgraph<G>, local_property<T Bundle::*>
+ >::const_type Map;
+ return Map(&g, p.value);
+}
+
+template <typename Graph, typename Type, typename Bundle, typename Key>
+inline Type get(local_property<Type Bundle::*> p, subgraph<Graph> const& g,
+ Key const& k)
+{ return get(get(p, g), k); }
+
+// =========================================================
+// Global bundled, get
+
+template<typename G, typename T, typename Bundle>
+inline typename property_map<
+ subgraph<G>, global_property<T Bundle::*>
+>::type
+get(global_property<T Bundle::*> p, subgraph<G>& g) {
+ typedef typename property_map<
+ subgraph<G>, global_property<T Bundle::*>
+ >::type Map;
+ return Map(&g, p.value);
+}
+
+template<typename G, typename T, typename Bundle>
+inline typename property_map<
+ subgraph<G>, global_property<T Bundle::*>
+>::const_type
+get(global_property<T Bundle::*> p, subgraph<G> const& g) {
+ typedef typename property_map<
+ subgraph<G>, global_property<T Bundle::*>
+ >::const_type Map;
+ return Map(&g, p.value);
+}
+
+template <typename Graph, typename Type, typename Bundle, typename Key>
+inline Type get(global_property<Type Bundle::*> p, subgraph<Graph> const& g,
+ Key const& k)
+{ return get(get(p, g), k); }
+
+#endif
+
+template <typename G, typename Tag>
+inline typename graph_property<G, Tag>::type&
+get_property(subgraph<G>& g, Tag tag) {
return get_property(g.m_graph, tag);
- }
+}
- template <typename G, typename Tag>
- inline
- const typename graph_property<G, Tag>::type&
- get_property(const subgraph<G>& g, Tag tag) {
+template <typename G, typename Tag>
+inline const typename graph_property<G, Tag>::type&
+get_property(const subgraph<G>& g, Tag tag) {
return get_property(g.m_graph, tag);
- }
+}
- //===========================================================================
- // Miscellaneous Functions
+//===========================================================================
+// Miscellaneous Functions
- template <typename G>
- typename subgraph<G>::vertex_descriptor
- vertex(typename subgraph<G>::vertices_size_type n, const subgraph<G>& g)
- {
- return vertex(n, g.m_graph);
- }
+template <typename G>
+typename subgraph<G>::vertex_descriptor
+vertex(typename subgraph<G>::vertices_size_type n, const subgraph<G>& g)
+{ return vertex(n, g.m_graph); }
+
+//===========================================================================
+// Mutability Traits
+// Just pull the mutability traits form the underlying graph. Note that this
+// will probably fail (badly) for labeled graphs.
+template <typename G>
+struct graph_mutability_traits< subgraph<G> > {
+ typedef typename graph_mutability_traits<G>::category category;
+};
} // namespace boost
Modified: branches/release/boost/graph/topological_sort.hpp
==============================================================================
--- branches/release/boost/graph/topological_sort.hpp (original)
+++ branches/release/boost/graph/topological_sort.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,7 +12,7 @@
#define BOOST_GRAPH_TOPOLOGICAL_SORT_HPP
#include <boost/config.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/depth_first_search.hpp>
#include <boost/graph/visitors.hpp>
#include <boost/graph/exception.hpp>
Modified: branches/release/boost/graph/transitive_closure.hpp
==============================================================================
--- branches/release/boost/graph/transitive_closure.hpp (original)
+++ branches/release/boost/graph/transitive_closure.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -38,13 +38,13 @@
namespace detail
{
- template < typename Container, typename ST = std::size_t,
- typename VT = typename Container::value_type >
+ template < typename TheContainer, typename ST = std::size_t,
+ typename VT = typename TheContainer::value_type >
struct subscript_t:public std::unary_function < ST, VT >
{
typedef VT& result_type;
- subscript_t(Container & c):container(&c)
+ subscript_t(TheContainer & c):container(&c)
{
}
VT & operator() (const ST & i) const
@@ -52,11 +52,11 @@
return (*container)[i];
}
protected:
- Container * container;
+ TheContainer * container;
};
- template < typename Container >
- subscript_t < Container > subscript(Container & c) {
- return subscript_t < Container > (c);
+ template < typename TheContainer >
+ subscript_t < TheContainer > subscript(TheContainer & c) {
+ return subscript_t < TheContainer > (c);
}
} // namespace detail
Modified: branches/release/boost/graph/two_bit_color_map.hpp
==============================================================================
--- branches/release/boost/graph/two_bit_color_map.hpp (original)
+++ branches/release/boost/graph/two_bit_color_map.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -13,8 +13,9 @@
#ifndef BOOST_TWO_BIT_COLOR_MAP_HPP
#define BOOST_TWO_BIT_COLOR_MAP_HPP
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/shared_array.hpp>
+#include <algorithm>
namespace boost {
@@ -50,6 +51,8 @@
explicit two_bit_color_map(std::size_t n, const IndexMap& index = IndexMap())
: n(n), index(index), data(new unsigned char[(n + 3) / 4])
{
+ // Fill to white
+ std::fill(data.get(), data.get() + (n + 3) / 4, 0);
}
};
@@ -59,7 +62,7 @@
typename two_bit_color_map<IndexMap>::key_type key)
{
typename property_traits<IndexMap>::value_type i = get(pm.index, key);
- assert (i < pm.n);
+ assert ((std::size_t)i < pm.n);
return two_bit_color_type((pm.data.get()[i / 4] >> ((i % 4) * 2)) & 3);
}
@@ -70,7 +73,7 @@
two_bit_color_type value)
{
typename property_traits<IndexMap>::value_type i = get(pm.index, key);
- assert (i < pm.n);
+ assert ((std::size_t)i < pm.n);
assert (value >= 0 && value < 4);
std::size_t byte_num = i / 4;
std::size_t bit_position = ((i % 4) * 2);
@@ -88,3 +91,7 @@
} // end namespace boost
#endif // BOOST_TWO_BIT_COLOR_MAP_HPP
+
+#ifdef BOOST_GRAPH_USE_MPI
+# include <boost/graph/distributed/two_bit_color_map.hpp>
+#endif
Modified: branches/release/boost/graph/vector_as_graph.hpp
==============================================================================
--- branches/release/boost/graph/vector_as_graph.hpp (original)
+++ branches/release/boost/graph/vector_as_graph.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -21,7 +21,7 @@
#include <boost/iterator.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/pending/integer_range.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/properties.hpp>
#include <algorithm>
Modified: branches/release/boost/graph/visitors.hpp
==============================================================================
--- branches/release/boost/graph/visitors.hpp (original)
+++ branches/release/boost/graph/visitors.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -15,10 +15,11 @@
#include <iosfwd>
#include <boost/config.hpp>
-#include <boost/property_map.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/limits.hpp>
-#include <boost/graph/detail/is_same.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
// Stay out of the way of the concept checking class
@@ -82,9 +83,6 @@
struct on_edge_not_minimized {
enum { num = detail::on_edge_not_minimized_num }; };
- struct true_tag { enum { num = true }; };
- struct false_tag { enum { num = false }; };
-
//========================================================================
// base_visitor and null_visitor
@@ -107,21 +105,20 @@
namespace detail {
template <class Visitor, class T, class Graph>
- inline void
- invoke_dispatch(Visitor& v, T x, Graph& g, true_tag) {
+ inline void invoke_dispatch(Visitor& v, T x, Graph& g, mpl::true_) {
v(x, g);
}
+
template <class Visitor, class T, class Graph>
- inline void
- invoke_dispatch(Visitor&, T, Graph&, false_tag) { }
+ inline void invoke_dispatch(Visitor&, T, Graph&, mpl::false_)
+ { }
} // namespace detail
template <class Visitor, class Rest, class T, class Graph, class Tag>
inline void
invoke_visitors(std::pair<Visitor, Rest>& vlist, T x, Graph& g, Tag tag) {
typedef typename Visitor::event_filter Category;
- typedef typename graph_detail::is_same<Category, Tag>::is_same_tag
- IsSameTag;
+ typedef typename is_same<Category, Tag>::type IsSameTag;
detail::invoke_dispatch(vlist.first, x, g, IsSameTag());
invoke_visitors(vlist.second, x, g, tag);
}
@@ -130,8 +127,7 @@
inline void
invoke_visitors(base_visitor<Visitor>& vis, T x, Graph& g, Tag) {
typedef typename Visitor::event_filter Category;
- typedef typename graph_detail::is_same<Category, Tag>::is_same_tag
- IsSameTag;
+ typedef typename is_same<Category, Tag>::type IsSameTag;
Visitor& v = static_cast<Visitor&>(vis);
detail::invoke_dispatch(v, x, g, IsSameTag());
}
@@ -140,8 +136,7 @@
inline void
invoke_visitors(Visitor& v, T x, Graph& g, Tag) {
typedef typename Visitor::event_filter Category;
- typedef typename graph_detail::is_same<Category, Tag>::is_same_tag
- IsSameTag;
+ typedef typename is_same<Category, Tag>::type IsSameTag;
detail::invoke_dispatch(v, x, g, IsSameTag());
}
#endif
Modified: branches/release/boost/pending/fibonacci_heap.hpp
==============================================================================
--- branches/release/boost/pending/fibonacci_heap.hpp (original)
+++ branches/release/boost/pending/fibonacci_heap.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -14,7 +14,7 @@
#include <vector>
#include <functional>
#include <boost/config.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
//
// An adaptation of Knuth's Fibonacci heap implementation
Modified: branches/release/boost/pending/indirect_cmp.hpp
==============================================================================
--- branches/release/boost/pending/indirect_cmp.hpp (original)
+++ branches/release/boost/pending/indirect_cmp.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -14,7 +14,7 @@
#include <functional>
#include <boost/config.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost {
Modified: branches/release/boost/pending/mutable_queue.hpp
==============================================================================
--- branches/release/boost/pending/mutable_queue.hpp (original)
+++ branches/release/boost/pending/mutable_queue.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -14,7 +14,7 @@
#include <vector>
#include <algorithm>
#include <functional>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/pending/mutable_heap.hpp>
#include <boost/pending/is_heap.hpp>
#include <boost/graph/detail/array_binary_tree.hpp>
Modified: branches/release/boost/pending/property.hpp
==============================================================================
--- branches/release/boost/pending/property.hpp (original)
+++ branches/release/boost/pending/property.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,4 +1,4 @@
-// (C) Copyright Jeremy Siek 2004
+// (C) Copyright Jeremy Siek 2004
// 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)
@@ -10,7 +10,7 @@
namespace boost {
- struct no_property {
+ struct no_property {
typedef no_property tag_type;
typedef no_property next_type;
typedef no_property value_type;
@@ -47,14 +47,14 @@
};
template <class P>
- struct has_property {
+ struct has_property {
BOOST_STATIC_CONSTANT(bool, value = true);
typedef true_type type;
};
template <>
- struct has_property<no_property> {
- BOOST_STATIC_CONSTANT(bool, value = false);
- typedef false_type type;
+ struct has_property<no_property> {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ typedef false_type type;
};
} // namespace boost
@@ -72,7 +72,7 @@
typedef typename detail::build_property_tag_value_alist<PropertyList>::type AList;
typedef typename detail::ev_selector<AList>::type Extractor;
typedef typename Extractor::template bind_<AList,Tag>::type type;
-#endif
+#endif
};
template <class Tag2>
@@ -82,9 +82,9 @@
}
template <class Tag1, class Tag2, class T1, class Base>
- inline typename property_value<property<Tag1,T1,Base>, Tag2>::type&
+ inline typename property_value<property<Tag1,T1,Base>, Tag2>::type&
get_property_value(property<Tag1,T1,Base>& p, Tag2 tag2) {
- BOOST_STATIC_CONSTANT(bool,
+ BOOST_STATIC_CONSTANT(bool,
match = (detail::same_property<Tag1,Tag2>::value));
typedef property<Tag1,T1,Base> Prop;
typedef typename property_value<Prop, Tag2>::type T2;
@@ -94,9 +94,9 @@
}
template <class Tag1, class Tag2, class T1, class Base>
inline
- const typename property_value<property<Tag1,T1,Base>, Tag2>::type&
+ const typename property_value<property<Tag1,T1,Base>, Tag2>::type&
get_property_value(const property<Tag1,T1,Base>& p, Tag2 tag2) {
- BOOST_STATIC_CONSTANT(bool,
+ BOOST_STATIC_CONSTANT(bool,
match = (detail::same_property<Tag1,Tag2>::value));
typedef property<Tag1,T1,Base> Prop;
typedef typename property_value<Prop, Tag2>::type T2;
@@ -106,33 +106,68 @@
}
namespace detail {
+
+ /** This trait returns true if T is no_property. */
+ template <typename T>
+ struct is_no_property
+ : mpl::bool_<is_same<T, no_property>::value>
+ { };
+
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- template<typename FinalTag, typename FinalType>
- struct retag_property_list
- {
- typedef property<FinalTag, FinalType> type;
- typedef FinalType retagged;
- };
-
- template<typename FinalTag, typename Tag, typename T, typename Base>
- struct retag_property_list<FinalTag, property<Tag, T, Base> >
- {
- private:
- typedef retag_property_list<FinalTag, Base> next;
-
- public:
- typedef property<Tag, T, typename next::type> type;
- typedef typename next::retagged retagged;
- };
-
- template<typename FinalTag>
- struct retag_property_list<FinalTag, no_property>
- {
- typedef no_property type;
- typedef no_property retagged;
- };
+ /** @internal @name Retag Property List
+ * This metafunction is used internally to normalize a property if it is
+ * actually modeling a property. Specifically this is used in Boost.Graph
+ * to map user-provided classes into bundled properties.
+ */
+ //@{
+ // One base case of the recursive form (see below). This matches any
+ // retag request that does not include a property<...> or no_property as
+ // the FinalType. This is used for generating bundles in Boost.Graph.
+ template<typename FinalTag, typename FinalType>
+ struct retag_property_list
+ {
+ typedef property<FinalTag, FinalType> type;
+ typedef FinalType retagged;
+ };
+
+ // Recursively retag the nested property list.
+ template<typename FinalTag, typename Tag, typename T, typename Base>
+ struct retag_property_list<FinalTag, property<Tag, T, Base> >
+ {
+ private:
+ typedef retag_property_list<FinalTag, Base> next;
+
+ public:
+ typedef property<Tag, T, typename next::type> type;
+ typedef typename next::retagged retagged;
+ };
+
+ // This base case will correctly deduce the final property type if the
+ // retagged property is given in property form. This should not hide
+ // the base case below.
+ // NOTE: This addresses a problem of layering bundled properties in the BGL
+ // where multiple retaggings will fail to deduce the correct retagged
+ // type.
+ template<typename FinalTag, typename FinalType>
+ struct retag_property_list<FinalTag, property<FinalTag, FinalType> >
+ {
+ public:
+ typedef property<FinalTag, FinalType> type;
+ typedef FinalType retagged;
+ };
+
+ // A final base case of the retag_propert_list, this will terminate a
+ // properly structured list.
+ template<typename FinalTag>
+ struct retag_property_list<FinalTag, no_property>
+ {
+ typedef no_property type;
+ typedef no_property retagged;
+ };
+ //@}
#endif
- }
+} // namespace detail
+
} // namesapce boost
#endif /* BOOST_PROPERTY_HPP */
Modified: branches/release/boost/pending/property_serialize.hpp
==============================================================================
--- branches/release/boost/pending/property_serialize.hpp (original)
+++ branches/release/boost/pending/property_serialize.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -7,6 +7,10 @@
#define BOOST_PROPERTY_SERIALIZE_HPP
#include <boost/pending/property.hpp>
+#ifdef BOOST_GRAPH_USE_MPI
+#include <boost/mpi/datatype.hpp>
+#include <boost/serialization/is_bitwise_serializable.hpp>
+#endif // BOOST_GRAPH_USE_MPI
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/nvp.hpp>
@@ -23,6 +27,44 @@
ar & serialization::make_nvp( "property_base" , boost::serialization::base_object<Base>(prop) );
ar & serialization::make_nvp( "property_value" , prop.m_value );
}
+
+#ifdef BOOST_GRAPH_USE_MPI
+ namespace mpi {
+ template<typename Tag, typename T, typename Base>
+ struct is_mpi_datatype<property<Tag, T, Base> >
+ : mpl::and_<is_mpi_datatype<T>,
+ is_mpi_datatype<Base> > { };
+ }
+
+ namespace serialization {
+ template<typename Tag, typename T, typename Base>
+ struct is_bitwise_serializable<property<Tag, T, Base> >
+ : mpl::and_<is_bitwise_serializable<T>,
+ is_bitwise_serializable<Base> > { };
+
+ template<typename Tag, typename T, typename Base>
+ struct implementation_level<property<Tag, T, Base> >
+ : mpl::int_<object_serializable> {} ;
+
+ template<typename Tag, typename T, typename Base>
+ struct tracking_level<property<Tag, T, Base> >
+ : mpl::int_<track_never> {} ;
+
+ }
+#endif // BOOST_GRAPH_USE_MPI
+
} // end namespace boost
+#ifdef BOOST_GRAPH_USE_MPI
+namespace boost { namespace mpi {
+ template<>
+ struct is_mpi_datatype<boost::no_property> : mpl::true_ { };
+
+} } // end namespace boost::mpi
+
+BOOST_IS_BITWISE_SERIALIZABLE(boost::no_property)
+BOOST_CLASS_IMPLEMENTATION(boost::no_property,object_serializable)
+BOOST_CLASS_TRACKING(boost::no_property,track_never)
+#endif // BOOST_GRAPH_USE_MPI
+
#endif // BOOST_PROPERTY_SERIALIZE_HPP
Modified: branches/release/boost/pending/relaxed_heap.hpp
==============================================================================
--- branches/release/boost/pending/relaxed_heap.hpp (original)
+++ branches/release/boost/pending/relaxed_heap.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -10,7 +10,7 @@
#define BOOST_RELAXED_HEAP_HEADER
#include <functional>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/optional.hpp>
#include <vector>
#include <climits> // for CHAR_BIT
Modified: branches/release/boost/property_map.hpp
==============================================================================
--- branches/release/boost/property_map.hpp (original)
+++ branches/release/boost/property_map.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,568 +1,17 @@
-// (C) Copyright Jeremy Siek 1999-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)
+/*=============================================================================
+Copyright (c) 2009 Trustees of Indiana University
-// See http://www.boost.org/libs/property_map for documentation.
-
-#ifndef BOOST_PROPERTY_MAP_HPP
-#define BOOST_PROPERTY_MAP_HPP
-
-#include <cassert>
-#include <boost/config.hpp>
-#include <boost/pending/cstddef.hpp>
-#include <boost/detail/iterator.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/concept_archetype.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/or.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost {
-
- //=========================================================================
- // property_traits class
-
- template <typename PA>
- struct property_traits {
- typedef typename PA::key_type key_type;
- typedef typename PA::value_type value_type;
- typedef typename PA::reference reference;
- typedef typename PA::category category;
- };
-
- //=========================================================================
- // property_traits category tags
-
- namespace detail {
- enum ePropertyMapID { READABLE_PA, WRITABLE_PA,
- READ_WRITE_PA, LVALUE_PA, OP_BRACKET_PA,
- RAND_ACCESS_ITER_PA, LAST_PA };
- }
- struct readable_property_map_tag { enum { id = detail::READABLE_PA }; };
- struct writable_property_map_tag { enum { id = detail::WRITABLE_PA }; };
- struct read_write_property_map_tag :
- public readable_property_map_tag,
- public writable_property_map_tag
- { enum { id = detail::READ_WRITE_PA }; };
-
- struct lvalue_property_map_tag : public read_write_property_map_tag
- { enum { id = detail::LVALUE_PA }; };
-
- //=========================================================================
- // property_traits specialization for pointers
-
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- // The user will just have to create their own specializations for
- // other pointers types if the compiler does not have partial
- // specializations. Sorry!
-#define BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(TYPE) \
- template <> \
- struct property_traits<TYPE*> { \
- typedef TYPE value_type; \
- typedef value_type& reference; \
- typedef std::ptrdiff_t key_type; \
- typedef lvalue_property_map_tag category; \
- }; \
- template <> \
- struct property_traits<const TYPE*> { \
- typedef TYPE value_type; \
- typedef const value_type& reference; \
- typedef std::ptrdiff_t key_type; \
- typedef lvalue_property_map_tag category; \
- }
-
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(long);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned long);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(int);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned int);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(short);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned short);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(char);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned char);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(signed char);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(bool);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(float);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(double);
- BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(long double);
-
- // This may need to be turned off for some older compilers that don't have
- // wchar_t intrinsically.
-# ifndef BOOST_NO_INTRINSIC_WCHAR_T
- template <>
- struct property_traits<wchar_t*> {
- typedef wchar_t value_type;
- typedef value_type& reference;
- typedef std::ptrdiff_t key_type;
- typedef lvalue_property_map_tag category;
- };
- template <>
- struct property_traits<const wchar_t*> {
- typedef wchar_t value_type;
- typedef const value_type& reference;
- typedef std::ptrdiff_t key_type;
- typedef lvalue_property_map_tag category;
- };
-# endif
-
-#else
- template <class T>
- struct property_traits<T*> {
- typedef T value_type;
- typedef value_type& reference;
- typedef std::ptrdiff_t key_type;
- typedef lvalue_property_map_tag category;
- };
- template <class T>
- struct property_traits<const T*> {
- typedef T value_type;
- typedef const value_type& reference;
- typedef std::ptrdiff_t key_type;
- typedef lvalue_property_map_tag category;
- };
-#endif
-
-#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
- // MSVC doesn't have Koenig lookup, so the user has to
- // do boost::get() anyways, and the using clause
- // doesn't really work for MSVC.
-} // namespace boost
+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)
+=============================================================================*/
+// Redirect/warning header, adapted from the version in Spirit
+
+#include <boost/version.hpp>
+
+#if BOOST_VERSION >= 103800
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/property_map/property_map.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/property_map/property_map.hpp"
#endif
-
- // These need to go in global namespace because Koenig
- // lookup does not apply to T*.
-
- // V must be convertible to T
- template <class T, class V>
- inline void put(T* pa, std::ptrdiff_t k, const V& val) { pa[k] = val; }
-
- template <class T>
- inline const T& get(const T* pa, std::ptrdiff_t k) { return pa[k]; }
-
-#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
-namespace boost {
- using ::put;
- using ::get;
#endif
-
- //=========================================================================
- // concept checks for property maps
-
- template <class PMap, class Key>
- struct ReadablePropertyMapConcept
- {
- typedef typename property_traits<PMap>::key_type key_type;
- typedef typename property_traits<PMap>::reference reference;
- typedef typename property_traits<PMap>::category Category;
- typedef boost::readable_property_map_tag ReadableTag;
- void constraints() {
- function_requires< ConvertibleConcept<Category, ReadableTag> >();
-
- val = get(pmap, k);
- }
- PMap pmap;
- Key k;
- typename property_traits<PMap>::value_type val;
- };
- template <typename KeyArchetype, typename ValueArchetype>
- struct readable_property_map_archetype {
- typedef KeyArchetype key_type;
- typedef ValueArchetype value_type;
- typedef convertible_to_archetype<ValueArchetype> reference;
- typedef readable_property_map_tag category;
- };
- template <typename K, typename V>
- const typename readable_property_map_archetype<K,V>::reference&
- get(const readable_property_map_archetype<K,V>&,
- const typename readable_property_map_archetype<K,V>::key_type&)
- {
- typedef typename readable_property_map_archetype<K,V>::reference R;
- return static_object<R>::get();
- }
-
-
- template <class PMap, class Key>
- struct WritablePropertyMapConcept
- {
- typedef typename property_traits<PMap>::key_type key_type;
- typedef typename property_traits<PMap>::category Category;
- typedef boost::writable_property_map_tag WritableTag;
- void constraints() {
- function_requires< ConvertibleConcept<Category, WritableTag> >();
- put(pmap, k, val);
- }
- PMap pmap;
- Key k;
- typename property_traits<PMap>::value_type val;
- };
- template <typename KeyArchetype, typename ValueArchetype>
- struct writable_property_map_archetype {
- typedef KeyArchetype key_type;
- typedef ValueArchetype value_type;
- typedef void reference;
- typedef writable_property_map_tag category;
- };
- template <typename K, typename V>
- void put(const writable_property_map_archetype<K,V>&,
- const typename writable_property_map_archetype<K,V>::key_type&,
- const typename writable_property_map_archetype<K,V>::value_type&) { }
-
-
- template <class PMap, class Key>
- struct ReadWritePropertyMapConcept
- {
- typedef typename property_traits<PMap>::category Category;
- typedef boost::read_write_property_map_tag ReadWriteTag;
- void constraints() {
- function_requires< ReadablePropertyMapConcept<PMap, Key> >();
- function_requires< WritablePropertyMapConcept<PMap, Key> >();
- function_requires< ConvertibleConcept<Category, ReadWriteTag> >();
- }
- };
- template <typename KeyArchetype, typename ValueArchetype>
- struct read_write_property_map_archetype
- : public readable_property_map_archetype<KeyArchetype, ValueArchetype>,
- public writable_property_map_archetype<KeyArchetype, ValueArchetype>
- {
- typedef KeyArchetype key_type;
- typedef ValueArchetype value_type;
- typedef convertible_to_archetype<ValueArchetype> reference;
- typedef read_write_property_map_tag category;
- };
-
-
- template <class PMap, class Key>
- struct LvaluePropertyMapConcept
- {
- typedef typename property_traits<PMap>::category Category;
- typedef boost::lvalue_property_map_tag LvalueTag;
- typedef typename property_traits<PMap>::reference reference;
-
- void constraints() {
- function_requires< ReadablePropertyMapConcept<PMap, Key> >();
- function_requires< ConvertibleConcept<Category, LvalueTag> >();
-
- typedef typename property_traits<PMap>::value_type value_type;
- BOOST_MPL_ASSERT((boost::mpl::or_<
- boost::is_same<const value_type&, reference>,
- boost::is_same<value_type&, reference> >));
-
- reference ref = pmap[k];
- ignore_unused_variable_warning(ref);
- }
- PMap pmap;
- Key k;
- };
- template <typename KeyArchetype, typename ValueArchetype>
- struct lvalue_property_map_archetype
- : public readable_property_map_archetype<KeyArchetype, ValueArchetype>
- {
- typedef KeyArchetype key_type;
- typedef ValueArchetype value_type;
- typedef const ValueArchetype& reference;
- typedef lvalue_property_map_tag category;
- const value_type& operator[](const key_type&) const {
- return static_object<value_type>::get();
- }
- };
-
- template <class PMap, class Key>
- struct Mutable_LvaluePropertyMapConcept
- {
- typedef typename property_traits<PMap>::category Category;
- typedef boost::lvalue_property_map_tag LvalueTag;
- typedef typename property_traits<PMap>::reference reference;
- void constraints() {
- boost::function_requires< ReadWritePropertyMapConcept<PMap, Key> >();
- boost::function_requires<ConvertibleConcept<Category, LvalueTag> >();
-
- typedef typename property_traits<PMap>::value_type value_type;
- BOOST_MPL_ASSERT((boost::is_same<value_type&, reference>));
-
- reference ref = pmap[k];
- ignore_unused_variable_warning(ref);
- }
- PMap pmap;
- Key k;
- };
- template <typename KeyArchetype, typename ValueArchetype>
- struct mutable_lvalue_property_map_archetype
- : public readable_property_map_archetype<KeyArchetype, ValueArchetype>,
- public writable_property_map_archetype<KeyArchetype, ValueArchetype>
- {
- typedef KeyArchetype key_type;
- typedef ValueArchetype value_type;
- typedef ValueArchetype& reference;
- typedef lvalue_property_map_tag category;
- value_type& operator[](const key_type&) const {
- return static_object<value_type>::get();
- }
- };
-
- struct identity_property_map;
-
- // A helper class for constructing a property map
- // from a class that implements operator[]
-
- template <class Reference, class LvaluePropertyMap>
- struct put_get_helper { };
-
- template <class PropertyMap, class Reference, class K>
- inline Reference
- get(const put_get_helper<Reference, PropertyMap>& pa, const K& k)
- {
- Reference v = static_cast<const PropertyMap&>(pa)[k];
- return v;
- }
- template <class PropertyMap, class Reference, class K, class V>
- inline void
- put(const put_get_helper<Reference, PropertyMap>& pa, K k, const V& v)
- {
- static_cast<const PropertyMap&>(pa)[k] = v;
- }
-
- //=========================================================================
- // Adapter to turn a RandomAccessIterator into a property map
-
- template <class RandomAccessIterator,
- class IndexMap
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- , class T, class R
-#else
- , class T = typename std::iterator_traits<RandomAccessIterator>::value_type
- , class R = typename std::iterator_traits<RandomAccessIterator>::reference
-#endif
- >
- class iterator_property_map
- : public boost::put_get_helper< R,
- iterator_property_map<RandomAccessIterator, IndexMap,
- T, R> >
- {
- public:
- typedef typename property_traits<IndexMap>::key_type key_type;
- typedef T value_type;
- typedef R reference;
- typedef boost::lvalue_property_map_tag category;
-
- inline iterator_property_map(
- RandomAccessIterator cc = RandomAccessIterator(),
- const IndexMap& _id = IndexMap() )
- : iter(cc), index(_id) { }
- inline R operator[](key_type v) const { return *(iter + get(index, v)) ; }
- protected:
- RandomAccessIterator iter;
- IndexMap index;
- };
-
-#if !defined BOOST_NO_STD_ITERATOR_TRAITS
- template <class RAIter, class ID>
- inline iterator_property_map<
- RAIter, ID,
- typename std::iterator_traits<RAIter>::value_type,
- typename std::iterator_traits<RAIter>::reference>
- make_iterator_property_map(RAIter iter, ID id) {
- function_requires< RandomAccessIteratorConcept<RAIter> >();
- typedef iterator_property_map<
- RAIter, ID,
- typename std::iterator_traits<RAIter>::value_type,
- typename std::iterator_traits<RAIter>::reference> PA;
- return PA(iter, id);
- }
-#endif
- template <class RAIter, class Value, class ID>
- inline iterator_property_map<RAIter, ID, Value, Value&>
- make_iterator_property_map(RAIter iter, ID id, Value) {
- function_requires< RandomAccessIteratorConcept<RAIter> >();
- typedef iterator_property_map<RAIter, ID, Value, Value&> PMap;
- return PMap(iter, id);
- }
-
- template <class RandomAccessIterator,
- class IndexMap
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- , class T, class R
-#else
- , class T = typename std::iterator_traits<RandomAccessIterator>::value_type
- , class R = typename std::iterator_traits<RandomAccessIterator>::reference
-#endif
- >
- class safe_iterator_property_map
- : public boost::put_get_helper< R,
- safe_iterator_property_map<RandomAccessIterator, IndexMap,
- T, R> >
- {
- public:
- typedef typename property_traits<IndexMap>::key_type key_type;
- typedef T value_type;
- typedef R reference;
- typedef boost::lvalue_property_map_tag category;
-
- inline safe_iterator_property_map(
- RandomAccessIterator first,
- std::size_t n_ = 0,
- const IndexMap& _id = IndexMap() )
- : iter(first), n(n_), index(_id) { }
- inline safe_iterator_property_map() { }
- inline R operator[](key_type v) const {
- assert(get(index, v) < n);
- return *(iter + get(index, v)) ;
- }
- typename property_traits<IndexMap>::value_type size() const { return n; }
- protected:
- RandomAccessIterator iter;
- typename property_traits<IndexMap>::value_type n;
- IndexMap index;
- };
-
-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <class RAIter, class ID>
- inline safe_iterator_property_map<
- RAIter, ID,
- typename boost::detail::iterator_traits<RAIter>::value_type,
- typename boost::detail::iterator_traits<RAIter>::reference>
- make_safe_iterator_property_map(RAIter iter, std::size_t n, ID id) {
- function_requires< RandomAccessIteratorConcept<RAIter> >();
- typedef safe_iterator_property_map<
- RAIter, ID,
- typename boost::detail::iterator_traits<RAIter>::value_type,
- typename boost::detail::iterator_traits<RAIter>::reference> PA;
- return PA(iter, n, id);
- }
-#endif
- template <class RAIter, class Value, class ID>
- inline safe_iterator_property_map<RAIter, ID, Value, Value&>
- make_safe_iterator_property_map(RAIter iter, std::size_t n, ID id, Value) {
- function_requires< RandomAccessIteratorConcept<RAIter> >();
- typedef safe_iterator_property_map<RAIter, ID, Value, Value&> PMap;
- return PMap(iter, n, id);
- }
-
- //=========================================================================
- // An adaptor to turn a Unique Pair Associative Container like std::map or
- // std::hash_map into an Lvalue Property Map.
-
- template <typename UniquePairAssociativeContainer>
- class associative_property_map
- : public boost::put_get_helper<
- typename UniquePairAssociativeContainer::value_type::second_type&,
- associative_property_map<UniquePairAssociativeContainer> >
- {
- typedef UniquePairAssociativeContainer C;
- public:
- typedef typename C::key_type key_type;
- typedef typename C::value_type::second_type value_type;
- typedef value_type& reference;
- typedef lvalue_property_map_tag category;
- associative_property_map() : m_c(0) { }
- associative_property_map(C& c) : m_c(&c) { }
- reference operator[](const key_type& k) const {
- return (*m_c)[k];
- }
- private:
- C* m_c;
- };
-
- template <class UniquePairAssociativeContainer>
- associative_property_map<UniquePairAssociativeContainer>
- make_assoc_property_map(UniquePairAssociativeContainer& c)
- {
- return associative_property_map<UniquePairAssociativeContainer>(c);
- }
-
- template <typename UniquePairAssociativeContainer>
- class const_associative_property_map
- : public boost::put_get_helper<
- const typename UniquePairAssociativeContainer::value_type::second_type&,
- const_associative_property_map<UniquePairAssociativeContainer> >
- {
- typedef UniquePairAssociativeContainer C;
- public:
- typedef typename C::key_type key_type;
- typedef typename C::value_type::second_type value_type;
- typedef const value_type& reference;
- typedef lvalue_property_map_tag category;
- const_associative_property_map() : m_c(0) { }
- const_associative_property_map(const C& c) : m_c(&c) { }
- reference operator[](const key_type& k) const {
- return m_c->find(k)->second;
- }
- private:
- C const* m_c;
- };
-
- template <class UniquePairAssociativeContainer>
- const_associative_property_map<UniquePairAssociativeContainer>
- make_assoc_property_map(const UniquePairAssociativeContainer& c)
- {
- return const_associative_property_map<UniquePairAssociativeContainer>(c);
- }
-
- //=========================================================================
- // A property map that always returns a reference to the same object.
- //
-template <typename KeyType, typename ValueType>
-class ref_property_map :
- public
- boost::put_get_helper<ValueType&,ref_property_map<KeyType,ValueType> >
-{
- ValueType* value;
-public:
- typedef KeyType key_type;
- typedef ValueType value_type;
- typedef ValueType& reference;
- typedef lvalue_property_map_tag category;
- ref_property_map(ValueType& v) : value(&v) {}
- ValueType& operator[](key_type const&) const { return *value; }
-
-};
-
-
- //=========================================================================
- // A property map that applies the identity function to integers
- struct identity_property_map
- : public boost::put_get_helper<std::size_t,
- identity_property_map>
- {
- typedef std::size_t key_type;
- typedef std::size_t value_type;
- typedef std::size_t reference;
- typedef boost::readable_property_map_tag category;
-
- inline value_type operator[](const key_type& v) const { return v; }
- };
-
- //=========================================================================
- // A property map that does not do anything, for
- // when you have to supply a property map, but don't need it.
- namespace detail {
- struct dummy_pmap_reference {
- template <class T>
- dummy_pmap_reference& operator=(const T&) { return *this; }
- operator int() { return 0; }
- };
- }
- class dummy_property_map
- : public boost::put_get_helper<detail::dummy_pmap_reference,
- dummy_property_map >
- {
- public:
- typedef void key_type;
- typedef int value_type;
- typedef detail::dummy_pmap_reference reference;
- typedef boost::read_write_property_map_tag category;
- inline dummy_property_map() : c(0) { }
- inline dummy_property_map(value_type cc) : c(cc) { }
- inline dummy_property_map(const dummy_property_map& x)
- : c(x.c) { }
- template <class Vertex>
- inline reference operator[](Vertex) const { return reference(); }
- protected:
- value_type c;
- };
-
-
-} // namespace boost
-
-
-#endif /* BOOST_PROPERTY_MAP_HPP */
-
Modified: branches/release/boost/property_map_iterator.hpp
==============================================================================
--- branches/release/boost/property_map_iterator.hpp (original)
+++ branches/release/boost/property_map_iterator.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,113 +1,17 @@
-// (C) Copyright Jeremy Siek, 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)
-
-// See http://www.boost.org/libs/property_map for documentation.
-
-#ifndef BOOST_PROPERTY_MAP_ITERATOR_HPP
-#define BOOST_PROPERTY_MAP_ITERATOR_HPP
-
-#include <boost/property_map.hpp>
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost {
-
- //======================================================================
- // property iterator, generalized from ideas by François Faure
-
- namespace detail {
-
- template <class Iterator, class LvaluePropertyMap>
- class lvalue_pmap_iter
- : public iterator_adaptor< lvalue_pmap_iter< Iterator, LvaluePropertyMap >,
- Iterator,
- typename property_traits<LvaluePropertyMap>::value_type,
- use_default,
- typename property_traits<LvaluePropertyMap>::reference>
- {
- friend class boost::iterator_core_access;
-
- typedef iterator_adaptor< lvalue_pmap_iter< Iterator, LvaluePropertyMap >,
- Iterator,
- typename property_traits<LvaluePropertyMap>::value_type,
- use_default,
- typename property_traits<LvaluePropertyMap>::reference> super_t;
-
- public:
- lvalue_pmap_iter() { }
- lvalue_pmap_iter(Iterator const& it,
- LvaluePropertyMap m)
- : super_t(it),
- m_map(m) {}
-
- private:
- typename super_t::reference
- dereference() const
- {
- return m_map[*(this->base_reference())];
- }
-
- LvaluePropertyMap m_map;
- };
-
- template <class Iterator, class ReadablePropertyMap>
- class readable_pmap_iter :
- public iterator_adaptor< readable_pmap_iter< Iterator, ReadablePropertyMap >,
- Iterator,
- typename property_traits<ReadablePropertyMap>::value_type,
- use_default,
- typename property_traits<ReadablePropertyMap>::value_type>
-
-
- {
- friend class boost::iterator_core_access;
-
- typedef iterator_adaptor< readable_pmap_iter< Iterator, ReadablePropertyMap >,
- Iterator,
- typename property_traits<ReadablePropertyMap>::value_type,
- use_default,
- typename property_traits<ReadablePropertyMap>::value_type> super_t;
-
- public:
- readable_pmap_iter() { }
- readable_pmap_iter(Iterator const& it,
- ReadablePropertyMap m)
- : super_t(it),
- m_map(m) {}
-
- private:
- typename super_t::reference
- dereference() const
- {
- return get(m_map, *(this->base_reference()));
- }
-
- ReadablePropertyMap m_map;
- };
-
-
- } // namespace detail
-
- template <class PropertyMap, class Iterator>
- struct property_map_iterator_generator :
- mpl::if_< is_same< typename property_traits<PropertyMap>::category, lvalue_property_map_tag>,
- detail::lvalue_pmap_iter<Iterator, PropertyMap>,
- detail::readable_pmap_iter<Iterator, PropertyMap> >
- {};
-
- template <class PropertyMap, class Iterator>
- typename property_map_iterator_generator<PropertyMap, Iterator>::type
- make_property_map_iterator(PropertyMap pmap, Iterator iter)
- {
- typedef typename property_map_iterator_generator<PropertyMap,
- Iterator>::type Iter;
- return Iter(iter, pmap);
- }
-
-} // namespace boost
-
-#endif // BOOST_PROPERTY_MAP_ITERATOR_HPP
+/*=============================================================================
+Copyright (c) 2009 Trustees of Indiana University
+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)
+=============================================================================*/
+// Redirect/warning header, adapted from the version in Spirit
+
+#include <boost/version.hpp>
+
+#if BOOST_VERSION >= 103800
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/property_map/property_map_iterator.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/property_map/property_map_iterator.hpp"
+#endif
+#endif
Modified: branches/release/boost/vector_property_map.hpp
==============================================================================
--- branches/release/boost/vector_property_map.hpp (original)
+++ branches/release/boost/vector_property_map.hpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,92 +1,17 @@
-// Copyright (C) Vladimir Prus 2003.
-// 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)
-//
-// See http://www.boost.org/libs/graph/vector_property_map.html for
-// documentation.
-//
-
-#ifndef VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
-#define VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
-
-#include <boost/property_map.hpp>
-#include <boost/shared_ptr.hpp>
-#include <vector>
-
-namespace boost {
- template<typename T, typename IndexMap = identity_property_map>
- class vector_property_map
- : public boost::put_get_helper<
- typename std::iterator_traits<
- typename std::vector<T>::iterator >::reference,
- vector_property_map<T, IndexMap> >
- {
- public:
- typedef typename property_traits<IndexMap>::key_type key_type;
- typedef T value_type;
- typedef typename std::iterator_traits<
- typename std::vector<T>::iterator >::reference reference;
- typedef boost::lvalue_property_map_tag category;
-
- vector_property_map(const IndexMap& index = IndexMap())
- : store(new std::vector<T>()), index(index)
- {}
-
- vector_property_map(unsigned initial_size,
- const IndexMap& index = IndexMap())
- : store(new std::vector<T>(initial_size)), index(index)
- {}
-
- typename std::vector<T>::iterator storage_begin()
- {
- return store->begin();
- }
-
- typename std::vector<T>::iterator storage_end()
- {
- return store->end();
- }
-
- typename std::vector<T>::const_iterator storage_begin() const
- {
- return store->begin();
- }
-
- typename std::vector<T>::const_iterator storage_end() const
- {
- return store->end();
- }
-
- public:
- // Copy ctor absent, default semantics is OK.
- // Assignment operator absent, default semantics is OK.
- // CONSIDER: not sure that assignment to 'index' is correct.
-
- reference operator[](const key_type& v) const {
- typename property_traits<IndexMap>::value_type i = get(index, v);
- if (static_cast<unsigned>(i) >= store->size()) {
- store->resize(i + 1, T());
- }
- return (*store)[i];
- }
- private:
- // Conceptually, we have a vector of infinite size. For practical
- // purposes, we start with an empty vector and grow it as needed.
- // Note that we cannot store pointer to vector here -- we cannot
- // store pointer to data, because if copy of property map resizes
- // the vector, the pointer to data will be invalidated.
- // I wonder if class 'pmap_ref' is simply needed.
- shared_ptr< std::vector<T> > store;
- IndexMap index;
- };
-
- template<typename T, typename IndexMap>
- vector_property_map<T, IndexMap>
- make_vector_property_map(IndexMap index)
- {
- return vector_property_map<T, IndexMap>(index);
- }
-}
+/*=============================================================================
+Copyright (c) 2009 Trustees of Indiana University
+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)
+=============================================================================*/
+// Redirect/warning header, adapted from the version in Spirit
+
+#include <boost/version.hpp>
+
+#if BOOST_VERSION >= 103800
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/property_map/vector_property_map.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/property_map/vector_property_map.hpp"
+#endif
#endif
Modified: branches/release/libs/graph/CMakeLists.txt
==============================================================================
--- branches/release/libs/graph/CMakeLists.txt (original)
+++ branches/release/libs/graph/CMakeLists.txt 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,16 +1,18 @@
+# Copyright (C) 2008 Michael Jackson
+#
+# Use, modification and distribution is subject to 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)
+
#----------------------------------------------------------------------------
# This file was automatically generated from the original CMakeLists.txt file
-# Add a variable to hold the headers for the library
-set (lib_headers
- graph
-)
# Add a library target to the build system
boost_library_project(
graph
SRCDIRS src
TESTDIRS test
- HEADERS ${lib_headers}
+ HEADERS graph
# DOCDIRS
DESCRIPTION "The BGL graph interface and graph components are generic, in the same sense as the the Standard Template Library (STL)."
MODULARIZED
@@ -20,5 +22,3 @@
"Douglas Gregor <doug.gregor -at- gmail.com>"
# MAINTAINERS
)
-
-
Modified: branches/release/libs/graph/build/Jamfile.v2
==============================================================================
--- branches/release/libs/graph/build/Jamfile.v2 (original)
+++ branches/release/libs/graph/build/Jamfile.v2 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -4,6 +4,8 @@
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
+import mpi ;
+
project boost/graph
: requirements <include>../src
: source-location ../src
@@ -45,9 +47,10 @@
lib boost_graph
:
- read_graphviz_spirit.cpp
+ read_graphviz_new.cpp
graphml
:
+ <library>../../regex/build//boost_regex
<define>BOOST_GRAPH_NO_LIB=1
<link>shared:<define>BOOST_GRAPH_DYN_LINK=1
# # Intel compiler ICEs if we turn optimization on
@@ -57,4 +60,4 @@
<toolset>msvc-8.0:<cxxflags>-GR-
;
-boost-install boost_graph ;
\ No newline at end of file
+boost-install boost_graph ;
Modified: branches/release/libs/graph/doc/AStarHeuristic.html
==============================================================================
--- branches/release/libs/graph/doc/AStarHeuristic.html (original)
+++ branches/release/libs/graph/doc/AStarHeuristic.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) 2004 Kris Beevers
- --
- -- 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)
+ Copyright (c) 2004 Kris Beevers
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: AStarHeuristic</Title>
@@ -128,7 +128,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2004</TD><TD>
+<TD nowrap>Copyright © 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek_at_[hidden]">beevek_at_[hidden]</A>)
Modified: branches/release/libs/graph/doc/AStarVisitor.html
==============================================================================
--- branches/release/libs/graph/doc/AStarVisitor.html (original)
+++ branches/release/libs/graph/doc/AStarVisitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) 2004 Kris Beevers
- --
- -- 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)
+ Copyright (c) 2004 Kris Beevers
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: AStarVisitor</Title>
@@ -70,7 +70,7 @@
<TR>
<TD><tt>WeightMap</tt></TD>
<TD>A type that is a model of <a
-href="../../property_map/ReadablePropertyMap.html">Readable Property
+href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>.</TD>
</TR>
@@ -203,7 +203,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2004</TD><TD>
+<TD nowrap>Copyright © 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek_at_[hidden]">beevek_at_[hidden]</A>)
Modified: branches/release/libs/graph/doc/AddEdgeVisitor.html
==============================================================================
--- branches/release/libs/graph/doc/AddEdgeVisitor.html (original)
+++ branches/release/libs/graph/doc/AddEdgeVisitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,11 +1,11 @@
<html>
<head>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<title>AddEdgeVisitor Concept</title>
</head>
@@ -106,7 +106,7 @@
<tt>add_edge(u, v, g)</tt>.
<li><tt>edge_index_update_visitor</tt>: The constructor of this class takes
two arguments: the first, an EdgeIndexMap,
-is a <a href="../../property_map/ReadWritePropertyMap.html">
+is a <a href="../../property_map/doc/ReadWritePropertyMap.html">
ReadWritePropertyMap</a> that maps each edge in the associated graph
<tt>g</tt> to a distinct integer in the range <tt>[0, num_edges(g))</tt>.
The second argument is the number of edges in the underlying graph, which
@@ -127,4 +127,4 @@
Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
-</body></html>
\ No newline at end of file
+</body></html>
Modified: branches/release/libs/graph/doc/AdjacencyGraph.html
==============================================================================
--- branches/release/libs/graph/doc/AdjacencyGraph.html (original)
+++ branches/release/libs/graph/doc/AdjacencyGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>AdjacencyGraph</Title>
@@ -160,7 +160,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/AdjacencyMatrix.html
==============================================================================
--- branches/release/libs/graph/doc/AdjacencyMatrix.html (original)
+++ branches/release/libs/graph/doc/AdjacencyMatrix.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>AdjacencyMatrix</Title>
@@ -95,7 +95,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/BFSVisitor.html
==============================================================================
--- branches/release/libs/graph/doc/BFSVisitor.html (original)
+++ branches/release/libs/graph/doc/BFSVisitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: BFSVisitor</Title>
@@ -206,7 +206,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/BasicMatrix.html
==============================================================================
--- branches/release/libs/graph/doc/BasicMatrix.html (original)
+++ branches/release/libs/graph/doc/BasicMatrix.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>BasicMatrix</Title>
@@ -93,7 +93,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
Modified: branches/release/libs/graph/doc/BellmanFordVisitor.html
==============================================================================
--- branches/release/libs/graph/doc/BellmanFordVisitor.html (original)
+++ branches/release/libs/graph/doc/BellmanFordVisitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Bellman Ford Visitor</Title>
@@ -170,7 +170,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/BidirectionalGraph.html
==============================================================================
--- branches/release/libs/graph/doc/BidirectionalGraph.html (original)
+++ branches/release/libs/graph/doc/BidirectionalGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Bidirectional</Title>
@@ -167,7 +167,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/Buffer.html
==============================================================================
--- branches/release/libs/graph/doc/Buffer.html (original)
+++ branches/release/libs/graph/doc/Buffer.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Buffer</Title>
@@ -109,7 +109,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University and C++ Library & Compiler Group/SGI (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/ColorValue.html
==============================================================================
--- branches/release/libs/graph/doc/ColorValue.html (original)
+++ branches/release/libs/graph/doc/ColorValue.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: ColorValue Concept</Title>
@@ -94,7 +94,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/DFSVisitor.html
==============================================================================
--- branches/release/libs/graph/doc/DFSVisitor.html (original)
+++ branches/release/libs/graph/doc/DFSVisitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>DFS Visitor</Title>
@@ -198,7 +198,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/DijkstraVisitor.html
==============================================================================
--- branches/release/libs/graph/doc/DijkstraVisitor.html (original)
+++ branches/release/libs/graph/doc/DijkstraVisitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Dijkstra Visitor</Title>
@@ -65,7 +65,7 @@
<TR>
<TD><tt>DistanceMap</tt></TD>
-<TD>A type that is a model of Read/Write Property Map.</TD>
+<TD>A type that is a model of Read/Write Property Map.</TD>
</TR>
<TR>
@@ -75,7 +75,7 @@
<TR>
<TD><tt>WeightMap</tt></TD>
-<TD>A type that is a model of Readable Property Map.</TD>
+<TD>A type that is a model of Readable Property Map.</TD>
</TR>
<TR>
@@ -208,7 +208,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/EdgeListGraph.html
==============================================================================
--- branches/release/libs/graph/doc/EdgeListGraph.html (original)
+++ branches/release/libs/graph/doc/EdgeListGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>EdgeListGraph</Title>
@@ -176,7 +176,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/EdgeMutableGraph.html
==============================================================================
--- branches/release/libs/graph/doc/EdgeMutableGraph.html (original)
+++ branches/release/libs/graph/doc/EdgeMutableGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 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)
+ Copyright (c) Jeremy Siek 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)
-->
<Head>
<Title>Edge Mutable Graph</Title>
@@ -100,7 +100,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/EventVisitor.html
==============================================================================
--- branches/release/libs/graph/doc/EventVisitor.html (original)
+++ branches/release/libs/graph/doc/EventVisitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: EventVisitor</Title>
@@ -147,7 +147,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/EventVisitorList.html
==============================================================================
--- branches/release/libs/graph/doc/EventVisitorList.html (original)
+++ branches/release/libs/graph/doc/EventVisitorList.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: EventVisitorList</Title>
@@ -113,7 +113,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/Graph.html
==============================================================================
--- branches/release/libs/graph/doc/Graph.html (original)
+++ branches/release/libs/graph/doc/Graph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Graph</Title>
@@ -141,7 +141,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/IncidenceGraph.html
==============================================================================
--- branches/release/libs/graph/doc/IncidenceGraph.html (original)
+++ branches/release/libs/graph/doc/IncidenceGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>IncidenceGraph</Title>
@@ -188,7 +188,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/IteratorConstructibleGraph.html
==============================================================================
--- branches/release/libs/graph/doc/IteratorConstructibleGraph.html (original)
+++ branches/release/libs/graph/doc/IteratorConstructibleGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>IteratorConstructibleGraph</Title>
@@ -147,7 +147,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/Monoid.html
==============================================================================
--- branches/release/libs/graph/doc/Monoid.html (original)
+++ branches/release/libs/graph/doc/Monoid.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 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)
-->
<Head>
<Title>Monoid</Title>
@@ -108,7 +108,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/MutableGraph.html
==============================================================================
--- branches/release/libs/graph/doc/MutableGraph.html (original)
+++ branches/release/libs/graph/doc/MutableGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>MutableGraph</Title>
@@ -291,7 +291,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/MutablePropertyGraph.html
==============================================================================
--- branches/release/libs/graph/doc/MutablePropertyGraph.html (original)
+++ branches/release/libs/graph/doc/MutablePropertyGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>MutablePropertyGraph</Title>
@@ -142,7 +142,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/PlanarEmbedding.html
==============================================================================
--- branches/release/libs/graph/doc/PlanarEmbedding.html (original)
+++ branches/release/libs/graph/doc/PlanarEmbedding.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,9 +1,9 @@
<html><head><!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<title>Planar Embedding Concept</title>
</head>
@@ -27,7 +27,7 @@
they are to be drawn around that vertex.
<p>
A planar embedding is a refinement of
-LValuePropertyMap that
+LValuePropertyMap that
places additional restrictions the <tt>value_type</tt> used in the property
map.
@@ -137,7 +137,7 @@
PlanarEmbedding:
<pre>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <vector>
...
@@ -175,4 +175,4 @@
Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
-</body></html>
\ No newline at end of file
+</body></html>
Modified: branches/release/libs/graph/doc/PlanarFaceVisitor.html
==============================================================================
--- branches/release/libs/graph/doc/PlanarFaceVisitor.html (original)
+++ branches/release/libs/graph/doc/PlanarFaceVisitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<HEAD>
<TITLE>Planar Face Visitor Concept</TITLE>
@@ -142,7 +142,7 @@
<br>
<HR>
-Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
</BODY>
</HTML>
Modified: branches/release/libs/graph/doc/PropertyGraph.html
==============================================================================
--- branches/release/libs/graph/doc/PropertyGraph.html (original)
+++ branches/release/libs/graph/doc/PropertyGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>PropertyGraph</Title>
@@ -90,7 +90,7 @@
<td><pre>boost::property_map<G, PropertyTag>::type</pre>
The type of the property map for the property specified by
<TT>PropertyTag</TT>. This type must be a model of <a
-href="../../property_map/ReadWritePropertyMap.html">ReadWritePropertyMap</a>
+href="../../property_map/doc/ReadWritePropertyMap.html">ReadWritePropertyMap</a>
with a key type the same as the graph's vertex or edge descriptor type.
</td>
</tr>
@@ -99,7 +99,7 @@
<td><pre>boost::property_map<G, PropertyTag>::const_type</pre>
The type of the const property map for the property specified by
<TT>PropertyTag</TT>. This type must be a model of <a
-href="../../property_map/ReadablePropertyMap.html">ReadablePropertyMap</a>
+href="../../property_map/doc/ReadablePropertyMap.html">ReadablePropertyMap</a>
with a key type the same as the graph's vertex or edge descriptor type.
</td>
</tr>
@@ -202,7 +202,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/PropertyTag.html
==============================================================================
--- branches/release/libs/graph/doc/PropertyTag.html (original)
+++ branches/release/libs/graph/doc/PropertyTag.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Property</Title>
@@ -96,7 +96,7 @@
<a href="./PropertyGraph.html">PropertyGraph</a>
and
-Property Map Concepts
+Property Map Concepts
<h3>Notes</h3>
@@ -109,7 +109,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/TSPTourVisitor.html
==============================================================================
--- branches/release/libs/graph/doc/TSPTourVisitor.html (original)
+++ branches/release/libs/graph/doc/TSPTourVisitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -92,7 +92,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2008</TD><TD>
+<TD nowrap>Copyright © 2008</TD><TD>
Matyas Egyhazy</TD></TR></TABLE>
</BODY>
Modified: branches/release/libs/graph/doc/VertexAndEdgeListGraph.html
==============================================================================
--- branches/release/libs/graph/doc/VertexAndEdgeListGraph.html (original)
+++ branches/release/libs/graph/doc/VertexAndEdgeListGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>VertexAndEdgeListGraph</Title>
@@ -62,7 +62,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/VertexListGraph.html
==============================================================================
--- branches/release/libs/graph/doc/VertexListGraph.html (original)
+++ branches/release/libs/graph/doc/VertexListGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>VertexListGraph</Title>
@@ -146,7 +146,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/VertexMutableGraph.html
==============================================================================
--- branches/release/libs/graph/doc/VertexMutableGraph.html (original)
+++ branches/release/libs/graph/doc/VertexMutableGraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 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)
+ Copyright (c) Jeremy Siek 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)
-->
<Head>
<Title>Vertex Mutable Graph</Title>
@@ -73,7 +73,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Lie-Quan Lee</A>, Indiana University (<A HREF="mailto:llee_at_[hidden]">llee_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/acknowledgements.html
==============================================================================
--- branches/release/libs/graph/doc/acknowledgements.html (original)
+++ branches/release/libs/graph/doc/acknowledgements.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Acknowledgements</Title>
@@ -62,7 +62,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/adjacency_iterator.html
==============================================================================
--- branches/release/libs/graph/doc/adjacency_iterator.html (original)
+++ branches/release/libs/graph/doc/adjacency_iterator.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<html>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<head>
Modified: branches/release/libs/graph/doc/adjacency_list.html
==============================================================================
--- branches/release/libs/graph/doc/adjacency_list.html (original)
+++ branches/release/libs/graph/doc/adjacency_list.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Adjacency List</Title>
@@ -175,13 +175,13 @@
HREF="./using_adjacency_list.html#sec:adjacency-list-properties">Internal
Properties </A>. The property maps are objects that implement the
interface defined in Section <A
-HREF="../../property_map/property_map.html">Property Map
+HREF="../../property_map/doc/property_map.html">Property Map
Concepts</A> or may be bundled properties,
which have a more succinct syntax. The types of all property values
must be Copy Constructible, Assignable, and Default Constructible.
The property maps obtained from the
<TT>adjacency_list</TT> class are models of the <a
-href="../../property_map/LvaluePropertyMap.html">Lvalue Property
+href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map</a> concept. If the <TT>adjacency_list</TT> is const,
then the property map is constant, otherwise the property
map is mutable.
@@ -194,7 +194,7 @@
removed the indices are adjusted so that they retain these
properties. Some care must be taken when using these indices to access
exterior property storage. The property map for vertex index is a
-model of <a href="../../property_map/ReadablePropertyMap.html">Readable
+model of <a href="../../property_map/doc/ReadablePropertyMap.html">Readable
Property Map</a>.
<P>
@@ -592,7 +592,7 @@
adjacency_list(EdgeIterator first, EdgeIterator last,
EdgePropertyIterator ep_iter,
vertices_size_type n,
- vertices_size_type m = 0,
+ edges_size_type m = 0,
const GraphProperty& p = GraphProperty())
</pre>
Creates a graph object with <TT>n</TT> vertices and with the edges
@@ -1120,7 +1120,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/adjacency_list_traits.html
==============================================================================
--- branches/release/libs/graph/doc/adjacency_list_traits.html (original)
+++ branches/release/libs/graph/doc/adjacency_list_traits.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Graph Traits</Title>
@@ -144,7 +144,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/adjacency_matrix.html
==============================================================================
--- branches/release/libs/graph/doc/adjacency_matrix.html (original)
+++ branches/release/libs/graph/doc/adjacency_matrix.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Adjacency Matrix</Title>
@@ -215,7 +215,7 @@
and Assignable.
-<h3>Associates Types</h3>
+<h3>Associated Types</h3>
<hr>
Modified: branches/release/libs/graph/doc/astar_heuristic.html
==============================================================================
--- branches/release/libs/graph/doc/astar_heuristic.html (original)
+++ branches/release/libs/graph/doc/astar_heuristic.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) 2004 Kris Beevers
- --
- -- 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)
+ Copyright (c) 2004 Kris Beevers
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: astar_heuristic</Title>
@@ -86,7 +86,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2004</TD><TD>
+<TD nowrap>Copyright © 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek_at_[hidden]">beevek_at_[hidden]</A>)
Modified: branches/release/libs/graph/doc/astar_search.html
==============================================================================
--- branches/release/libs/graph/doc/astar_search.html (original)
+++ branches/release/libs/graph/doc/astar_search.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) 2004 Kris Beevers
- --
- -- 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)
+ Copyright (c) 2004 Kris Beevers
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: A* Heuristic Search</Title>
@@ -50,6 +50,25 @@
VertexIndexMap index_map, ColorMap color,
CompareFunction compare, CombineFunction combine,
CostInf inf, CostZero zero);
+
+<i>// Version that does not initialize property maps (used for implicit graphs)</i>
+template <typename VertexListGraph, typename AStarHeuristic,
+ typename AStarVisitor, typename PredecessorMap,
+ typename CostMap, typename DistanceMap,
+ typename WeightMap, typename ColorMap,
+ typename VertexIndexMap,
+ typename CompareFunction, typename CombineFunction,
+ typename CostInf, typename CostZero>
+inline void
+astar_search_no_init
+ (VertexListGraph &g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ AStarHeuristic h, AStarVisitor vis,
+ PredecessorMap predecessor, CostMap cost,
+ DistanceMap distance, WeightMap weight,
+ ColorMap color, VertexIndexMap index_map,
+ CompareFunction compare, CombineFunction combine,
+ CostInf inf, CostZero zero);
</PRE>
<P>
@@ -92,7 +111,10 @@
(e.g. chess), for example -- in which it may not be possible to store
the entire graph. Implicit searches can be performed with this
implementation of A* by creating special visitors that generate
-neighbors of newly-expanded vertices.
+neighbors of newly-expanded vertices. Please note that
+<tt>astar_search_no_init()</tt> must be used for implicit graphs; the basic
+<tt>astar_search()</tt> function requires a graph that models
+VertexListGraph.
</P>
<P>
@@ -234,7 +256,7 @@
href="./exception.html#negative_edge"><tt>negative_edge</tt></a>
exception if one of the edges is negative. The type
<tt>WeightMap</tt> must be a model of <a
- href="../../property_map/ReadablePropertyMap.html"><tt>Readable
+ href="../../property_map/doc/ReadablePropertyMap.html"><tt>Readable
Property Map</tt></a>. The edge descriptor type of the graph needs
to be usable as the key type for the weight map. The value type
for this map must be the same as the value type of the distance
@@ -248,7 +270,7 @@
num_vertices(g))</tt>. This is necessary for efficient updates of
the heap data structure when an edge is relaxed. The type
<tt>VertexIndexMap</tt> must be a model of <a
- href="../../property_map/ReadablePropertyMap.html"><tt>Readable
+ href="../../property_map/doc/ReadablePropertyMap.html"><tt>Readable
Property Map</tt></a>. The value type of the map must be an integer
type. The vertex descriptor type of the graph needs to be usable as
the key type of the map.<br>
@@ -269,7 +291,7 @@
<tt>p[u] = u</tt> then <tt>u</tt> is either the start vertex or a
vertex that is not reachable from the start. The
<tt>PredecessorMap</tt> type must be a <a
- href="../../property_map/ReadWritePropertyMap.html"><tt>Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html"><tt>Read/Write
Property Map</tt></a> with key and vertex types the same as the
vertex descriptor type of the graph.<br>
@@ -283,7 +305,7 @@
vertex in the graph <tt>g</tt> is recorded in this property map.
The shortest path weight is the sum of the edge weights along the
shortest path. The type <tt>DistanceMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html"><tt>Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html"><tt>Read/Write
Property Map</tt></a>. The vertex descriptor type of the graph
needs to be usable as the key type of the distance map. The value
type of the distance map is the element type of a <a
@@ -307,7 +329,7 @@
the estimated cost (as returned by the heuristic function
<tt>h</tt>) from the vertex to a goal. The type <tt>CostMap</tt>
must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html"><tt>Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html"><tt>Read/Write
Property Map</tt></a>. The vertex descriptor type of the graph
needs to be usable as the key type of the distance map. The value
type of the distance map is the element type of a <a
@@ -336,7 +358,7 @@
reachable from the source vertex will have been colored black. All
other vertices will still be white. The type <tt>ColorMap</tt> must
be a model of <a
- href="../../property_map/ReadWritePropertyMap.html"><tt>Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html"><tt>Read/Write
Property Map</tt></a>. A vertex descriptor must be usable as the
key type of the map, and the value type of the map must be a model
of Color Value.<br>
@@ -467,7 +489,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2004</TD><TD>
+<TD nowrap>Copyright © 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek_at_[hidden]">beevek_at_[hidden]</A>)
Modified: branches/release/libs/graph/doc/astar_visitor.html
==============================================================================
--- branches/release/libs/graph/doc/astar_visitor.html (original)
+++ branches/release/libs/graph/doc/astar_visitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) 2004 Kris Beevers
- --
- -- 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)
+ Copyright (c) 2004 Kris Beevers
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: astar_visitor</Title>
@@ -98,7 +98,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2004</TD><TD>
+<TD nowrap>Copyright © 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek_at_[hidden]">beevek_at_[hidden]</A>)
Modified: branches/release/libs/graph/doc/bandwidth.html
==============================================================================
--- branches/release/libs/graph/doc/bandwidth.html (original)
+++ branches/release/libs/graph/doc/bandwidth.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Bandwidth</Title>
@@ -85,7 +85,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/bc_clustering.html
==============================================================================
--- branches/release/libs/graph/doc/bc_clustering.html (original)
+++ branches/release/libs/graph/doc/bc_clustering.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--
- -- Copyright (c) 2004 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2004 Trustees of Indiana University
+
+ 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)
-->
<html>
<head>
@@ -96,7 +96,7 @@
This property map is used to accumulate the betweenness centrality
of each edge, and is a secondary form of output for the
algorithm. The type <tt>EdgeCentralityMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>, with the graph's edge descriptor type as its key
type. The value type of this property map should be the same as the
value type of the <tt>CentralityMap</tt> property map.<br>
@@ -114,7 +114,7 @@
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
<tt>VertexIndexMap</tt> must be a model of
- Readable Property Map. The value type of the map must be an
+ Readable Property Map. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
Modified: branches/release/libs/graph/doc/bellman_ford_shortest.html
==============================================================================
--- branches/release/libs/graph/doc/bellman_ford_shortest.html (original)
+++ branches/release/libs/graph/doc/bellman_ford_shortest.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Bellman Ford Shortest Paths</Title>
@@ -201,7 +201,7 @@
<blockquote>
The weight (also know as ``length'' or ``cost'') of each edge in the
graph. The <tt>WeightMap</tt> type must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The key type for this property map must be the edge
descriptor of the graph. The value type for the weight map must be
<i>Addable</i> with the distance map's value type. <br>
@@ -219,7 +219,7 @@
u</i> then <i>u</i> is either the source vertex or a vertex that is
not reachable from the source. The <tt>PredecessorMap</tt> type
must be a <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> which key and vertex types the same as the vertex
descriptor type of the graph.<br>
<b>Default:</b> <tt>dummy_property_map</tt><br>
@@ -232,7 +232,7 @@
The shortest path weight from the source vertex to each vertex in
the graph <tt>g</tt> is recorded in this property map. The type
<tt>DistanceMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The key type of the property map must be the
vertex descriptor type of the graph, and the value type of the
distance map must be <a
Modified: branches/release/libs/graph/doc/bellman_visitor.html
==============================================================================
--- branches/release/libs/graph/doc/bellman_visitor.html (original)
+++ branches/release/libs/graph/doc/bellman_visitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: bellman_visitor</Title>
@@ -97,7 +97,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/betweenness_centrality.html
==============================================================================
--- branches/release/libs/graph/doc/betweenness_centrality.html (original)
+++ branches/release/libs/graph/doc/betweenness_centrality.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,11 +1,11 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--
- -- Copyright (c) 2004 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2004 Trustees of Indiana University
+
+ 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)
-->
<head>
<title>Boost Graph Library: Brandes' Betweenness Centrality</title>
@@ -141,13 +141,13 @@
UTIL: <tt>IncomingMap incoming</tt>
<blockquote>
This property map records the set of edges incoming to each vertex that comprise a shortest path from a particular source vertex through this vertex, and is used internally by the algorithm.The <tt>IncomingMap</tt> type must be a <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map</a> whose key type is the same as the vertex descriptor type of
the graph and whose value type is a Sequence (e.g., an
<tt>std::vector</tt>) containing edge descriptors.<br>
<b>Default:</b> <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>std::vector<Edge></tt>, where
<tt>Edge</tt> is the edge descriptor type of the graph.<br>
@@ -161,14 +161,14 @@
vertex in the graph <tt>g</tt> is recorded in this property map, but
the result is only used internally. The type <tt>DistanceMap</tt>
must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the graph needs to
be usable as the key type of the distance map. The value type of the
distance map is the element type of a <a
href="./Monoid.html">Monoid</a>.<br>
<b>Default:</b> <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>WeightMap</tt>'s value type (or the
<tt>vertices_size_type</tt> of the graph when no weight map exists)
@@ -182,14 +182,14 @@
<blockquote>
Property map used internally to accumulate partial betweenness
centrality results. The type <tt>DependencyMap</tt> must be a model
- of <a href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ of <a href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the graph needs to
be usable as the key type of the dependency map. The value type of
the dependency map must be compatible with the value type of the
centrality map.<br>
<b>Default:</b> <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>CentralityMap</tt>'s value type of
size <tt>num_vertices(g)</tt> and using the <tt>vertex_index</tt>
@@ -203,14 +203,14 @@
Property map used internally to accumulate the number of paths that
pass through each particular vertex. The type <tt>PathCountMap</tt>
must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the graph needs to
be usable as the key type of the dependency map. The value type of
the dependency map must be an integral type large enough to store
the number of paths in the graph.<br>
<b>Default:</b> <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>degree_size_type</tt> of the graph of
size <tt>num_vertices(g)</tt> and using the <tt>vertex_index</tt>
@@ -225,7 +225,7 @@
This property map is used to accumulate the betweenness centrality
of each vertex, and is the primary output of the algorithm. The type
<tt>CentralityMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>, with the graph's vertex descriptor type as its key
type. The value type of this property map should be a floating-point
or rational type.<br>
@@ -242,7 +242,7 @@
This property map is used to accumulate the betweenness centrality
of each edge, and is a secondary form of output for the
algorithm. The type <tt>EdgeCentralityMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>, with the graph's edge descriptor type as its key
type. The value type of this property map should be the same as the
value type of the <tt>CentralityMap</tt> property map.<br>
@@ -260,7 +260,7 @@
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
<tt>VertexIndexMap</tt> must be a model of
- Readable Property Map. The value type of the map must be an
+ Readable Property Map. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
@@ -278,7 +278,7 @@
<a href="./exception.html#negative_edge"><tt>negative_edge</tt></a>
exception is one of the edges is negative.
The type <tt>WeightMap</tt> must be a model of
- Readable Property Map. The edge descriptor type of
+ Readable Property Map. The edge descriptor type of
the graph needs to be usable as the key type for the weight
map. The value type for this map must be
the same as the value type of the distance map.<br>
@@ -295,7 +295,7 @@
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2004</TD><TD>
+<TD nowrap>Copyright © 2004</TD><TD>
<A HREF="http://www.boost.org/people/doug_gregor.html">Douglas Gregor</A>, Indiana University (dgregor_at_[hidden]</A>)<br>
<A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>,
Indiana University (<A
Modified: branches/release/libs/graph/doc/bfs_visitor.html
==============================================================================
--- branches/release/libs/graph/doc/bfs_visitor.html (original)
+++ branches/release/libs/graph/doc/bfs_visitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: bfs_visitor</Title>
@@ -114,7 +114,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/bgl_named_params.html
==============================================================================
--- branches/release/libs/graph/doc/bgl_named_params.html (original)
+++ branches/release/libs/graph/doc/bgl_named_params.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Named Parameters</Title>
@@ -82,7 +82,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/bibliography.html
==============================================================================
--- branches/release/libs/graph/doc/bibliography.html (original)
+++ branches/release/libs/graph/doc/bibliography.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Bibliography</Title>
@@ -438,7 +438,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/biconnected_components.html
==============================================================================
--- branches/release/libs/graph/doc/biconnected_components.html (original)
+++ branches/release/libs/graph/doc/biconnected_components.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,14 +1,14 @@
<HTML>
<!--
- -- Copyright 2001-2004 The Trustees of Indiana University.
- --
- -- Use, modification and distribution is subject to 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)
- --
- -- Authors: Douglas Gregor
- -- Jeremy Siek
- -- Andrew Lumsdaine
+ Copyright 2001-2004 The Trustees of Indiana University.
+
+ Use, modification and distribution is subject to 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)
+
+ Authors: Douglas Gregor
+ Jeremy Siek
+ Andrew Lumsdaine
-->
<Head>
<Title>Boost Graph Library: Biconnected Components and Articulation Points</Title>
@@ -120,7 +120,7 @@
records which component each edge in the graph belongs to by
recording the component number in the component property map. The
<tt>ComponentMap</tt> type must be a model of <a
-href="../../property_map/WritablePropertyMap.html">Writable Property
+href="../../property_map/doc/WritablePropertyMap.html">Writable Property
Map</a>. The value type shouch be an integer type, preferably the same
as the <tt>edges_size_type</tt> of the graph. The key type must be
the graph's edge descriptor type.<br>
@@ -147,7 +147,7 @@
This maps each vertex to an integer in the range <tt>[0,
num_vertices(g))</tt>. The type
<tt>VertexIndexMap</tt> must be a model of
- Readable Property Map. The value type of the map must be an
+ Readable Property Map. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt><br>
@@ -159,12 +159,12 @@
<blockquote>
The discovery time of each vertex in the depth-first search. The
type <tt>DiscoverTimeMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The value type of the map must be an integer
type. The vertex descriptor type of the graph needs to be usable as
the key type of the map.<br>
<b>Default</b>: an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>vertices_size_type</tt> of size
<tt>num_vertices(g)</tt> and using <tt>get(vertex_index, g)</tt> for
@@ -178,12 +178,12 @@
The low point of each vertex in the depth-first search, which is the
smallest vertex reachable from a given vertex with at most one back
edge. The type <tt>LowPointMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The value type of the map must be an integer
type. The vertex descriptor type of the graph needs to be usable as
the key type of the map.<br>
<b>Default</b>: an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>vertices_size_type</tt> of size
<tt>num_vertices(g)</tt> and using <tt>get(vertex_index, g)</tt> for
@@ -197,11 +197,11 @@
The predecessor map records the depth first search tree.
The <tt>PredecessorMap</tt> type
must be a <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> whose key and value types are the same as the vertex
descriptor type of the graph.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>vertex_descriptor</tt> of size
<tt>num_vertices(g)</tt> and using <tt>get(vertex_index, g)</tt> for
@@ -243,7 +243,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2004</TD><TD>
+<TD nowrap>Copyright © 2000-2004</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana
University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/biconnected_components.w
==============================================================================
--- branches/release/libs/graph/doc/biconnected_components.w (original)
+++ branches/release/libs/graph/doc/biconnected_components.w 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -285,7 +285,7 @@
#include <boost/limits.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/graph_concepts.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
namespace boost {
@<Biconnected Components Algorithm@>
Modified: branches/release/libs/graph/doc/boyer_myrvold.html
==============================================================================
--- branches/release/libs/graph/doc/boyer_myrvold.html (original)
+++ branches/release/libs/graph/doc/boyer_myrvold.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<Head>
<Title>Boost Graph Library: Boyer-Myrvold Planarity Testing/Embedding</Title>
@@ -191,7 +191,7 @@
IN <tt>VertexIndexMap vm</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps vertices from <tt>g</tt> to distinct integers in the range
<tt>[0, num_vertices(g) )</tt><br>
<b>Default</b>: <tt>get(vertex_index,g)</tt><br>
@@ -200,7 +200,7 @@
IN <tt>EdgeIndexMap em</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps edges from <tt>g</tt> to distinct integers in the range
<tt>[0, num_edges(g) )</tt><br>
<b>Default</b>: <tt>get(edge_index,g)</tt>, but this parameter is only used if
@@ -253,7 +253,7 @@
<br>
<HR>
-Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
</BODY>
</HTML>
Modified: branches/release/libs/graph/doc/breadth_first_search.html
==============================================================================
--- branches/release/libs/graph/doc/breadth_first_search.html (original)
+++ branches/release/libs/graph/doc/breadth_first_search.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000, 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)
+ Copyright (c) Jeremy Siek 2000, 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)
-->
<Head>
<Title>Boost Graph Library: Breadth-First Search</Title>
@@ -194,12 +194,12 @@
function and do your own color initialization.
<p>The type <tt>ColorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map must model
<a href="./ColorValue.html">ColorValue</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>default_color_type</tt> of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -215,7 +215,7 @@
num_vertices(g))</tt>. This parameter is only necessary when the
default color property map is used. The type <tt>VertexIndexMap</tt>
must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -330,7 +330,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/breadth_first_visit.html
==============================================================================
--- branches/release/libs/graph/doc/breadth_first_visit.html (original)
+++ branches/release/libs/graph/doc/breadth_first_visit.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000, 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)
+ Copyright (c) Jeremy Siek 2000, 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)
-->
<Head>
<Title>Boost Graph Library: Breadth-First Visit</Title>
@@ -87,7 +87,7 @@
<blockquote>
This is used by the algorithm to keep track of its progress through
the graph. The type <tt>ColorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map must model
<a href="./ColorValue.html">ColorValue</a>.<br>
@@ -178,7 +178,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/bundles.html
==============================================================================
--- branches/release/libs/graph/doc/bundles.html (original)
+++ branches/release/libs/graph/doc/bundles.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,12 +1,12 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--
--- Copyright Doug Gregor 2004. Use, modification and
--- distribution is subject to 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)
+ Copyright Doug Gregor 2004. Use, modification and
+ distribution is subject to 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)
--- For more information, see http://www.boost.org
+ For more information, see http://www.boost.org
-->
<head>
<title>Bundled Properties</title>
@@ -147,7 +147,7 @@
<p> You may also access the entire vertex or edge bundle as a property map
using the <code>vertex_bundle</code> or <code>edge_bundle</code> properties,
respectively. For instance, the property map returned by <code>get(vertex_bundle, map)</code> is
- an Lvalue Property Map providing access to the
+ an Lvalue Property Map providing access to the
<code>City</code> values stored in each vertex.
<h2>Getting the type of bundled properties</h2>
Modified: branches/release/libs/graph/doc/challenge.html
==============================================================================
--- branches/release/libs/graph/doc/challenge.html (original)
+++ branches/release/libs/graph/doc/challenge.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Challenge</Title>
@@ -112,7 +112,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/circle_layout.html
==============================================================================
--- branches/release/libs/graph/doc/circle_layout.html (original)
+++ branches/release/libs/graph/doc/circle_layout.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,9 +1,9 @@
<html><!--
- -- Copyright (c) 2004 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2004 Trustees of Indiana University
+
+ 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)
-->
<head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Function template circle_graph_layout</title></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table cellpadding="2" width="100%"><td valign="top"><img src="../../../boost.png" alt="boost.png (6897 bytes)" width="277" height="86"></td><td align="center">Home</td><td align="center">Libraries</td><td align="center">People</td><td align="center">FAQ</td><td align="center">More</td></table><hr><div class="refentry" lang="en"><a name="id103562-bb"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2><img src="figs/python.gif" alt="(Python)"/><span class="refentrytitle">Function template circle_graph_layout</span></h2><p>boost::circle_graph_layout — Lay
out the graph with the vertices at the points of a regular n-polygon. </p></div><h2 xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv-title">Synopsis</h2><div xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv"><pre class="synopsis">
<span class="bold"><b>template</b></span><<span class="bold"><b>typename</b></span> VertexListGraph, <span class="bold"><b>typename</b></span> PositionMap, <span class="bold"><b>typename</b></span> Radius>
@@ -23,7 +23,7 @@
<blockquote>
This property map is used to store the position of each vertex. The
type <tt>PositionMap</tt> must be a model of <a
- href="../../property_map/WritablePropertyMap.html">Writable Property
+ href="../../property_map/doc/WritablePropertyMap.html">Writable Property
Map</a>, with the graph's edge descriptor type as its key type. The
value type of this property map should be assignable from the
type <tt>Radius</tt>. <br>
@@ -43,7 +43,7 @@
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2004</TD><TD>
+<TD nowrap>Copyright © 2004</TD><TD>
<A HREF="http://www.boost.org/people/doug_gregor.html">Douglas Gregor</A>, Indiana University (dgregor -at- cs.indiana.edu</A>)<br>
<A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>,
Indiana University (lums -at- osl.iu.edu)
Modified: branches/release/libs/graph/doc/compressed_sparse_row.html
==============================================================================
--- branches/release/libs/graph/doc/compressed_sparse_row.html (original)
+++ branches/release/libs/graph/doc/compressed_sparse_row.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,11 +1,11 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--
- -- Copyright (c) 2005 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2005-2009 Trustees of Indiana University
+
+ 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)
-->
<head>
<title>Compressed Sparse Row Graph</title>
@@ -47,6 +47,17 @@
or edges from a CSR graph. Use this format in high-performance
applications or for very large graphs that you do not need to
change.</p>
+
+ <p>There are two interfaces to the compressed sparse row graph. The
+ old interface requires that all out edges from a single vertex are
+ sorted by target, and does not support construction of the graph from
+ unsorted arrays of sources and targets. The new interface has these
+ new constructors, but does not support incremental construction of the
+ graph or the <tt>edge_range()</tt> and <tt>edge()</tt> functions. The
+ old interface is the default, but will be removed in a later version of
+ Boost. To select the new interface, add <tt>#define
+ BOOST_GRAPH_USE_NEW_CSR_INTERFACE</tt> before including
+ <tt><boost/graph/compressed_sparse_row_graph.hpp></tt>.</p>
<p>The CSR format stores vertices and edges in separate arrays,
with the indices into these arrays corresponding to the identifier
@@ -103,19 +114,67 @@
<i>// Graph constructors</i>
<a href="#default-const">compressed_sparse_row_graph</a>();
+ <i>// Unsorted edge list constructors <b>(new interface only)</b></i>
+ template<typename MultiPassInputIterator>
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin, MultiPassInputIterator edge_end,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty());
+
+ template<typename MultiPassInputIterator, typename EdgePropertyIterator>
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin, MultiPassInputIterator edge_end,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty());
+
+ <i>// Old sorted edge list constructors <b>(old interface only)</b></i>
template<typename InputIterator>
- compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
+ compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
vertices_size_type numverts,
edges_size_type numedges = 0,
const GraphProperty& prop = GraphProperty());
template<typename InputIterator, typename EdgePropertyIterator>
- compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
+ compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
EdgePropertyIterator ep_iter,
vertices_size_type numverts,
edges_size_type numedges = 0,
const GraphProperty& prop = GraphProperty());
+ <i>// New sorted edge list constructors <b>(both interfaces)</b></i>
+ template<typename InputIterator>
+ compressed_sparse_row_graph(edges_are_sorted_t,
+ InputIterator edge_begin, InputIterator edge_end,
+ vertices_size_type numverts,
+ edges_size_type numedges = 0,
+ const GraphProperty& prop = GraphProperty());
+
+ template<typename InputIterator, typename EdgePropertyIterator>
+ compressed_sparse_row_graph(edges_are_sorted_t,
+ InputIterator edge_begin, InputIterator edge_end,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type numverts,
+ edges_size_type numedges = 0,
+ const GraphProperty& prop = GraphProperty());
+
+ <i>// In-place unsorted edge list constructors <b>(new interface only)</b></i>
+ template<typename InputIterator>
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty());
+
+ template<typename InputIterator>
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ std::vector<EdgeProperty>& edge_props,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty());
+
+ <i>// Miscellaneous constructors <b>(both interfaces)</b></i>
template<typename Graph, typename VertexIndexMap>
<a href="#graph-const">compressed_sparse_row_graph</a>(const Graph& g, const VertexIndexMap& vi,
vertices_size_type numverts,
@@ -127,7 +186,7 @@
template<typename Graph>
explicit compressed_sparse_row_graph(const Graph& g);
- <i>// Graph mutators</i>
+ <i>// Graph mutators (both interfaces)</i>
template<typename Graph, typename VertexIndexMap>
void assign(const Graph& g, const VertexIndexMap& vi,
vertices_size_type numverts, edges_size_type numedges);
@@ -138,43 +197,46 @@
template<typename Graph>
void assign(const Graph& g);
- <i>// Property Access</i>
+ <i>// Property Access (both interfaces)</i>
VertexProperty& operator[](vertex_descriptor v);
const VertexProperty& operator[](vertex_descriptor v) const;
EdgeProperty& operator[](edge_descriptor v);
const EdgeProperty& operator[](edge_descriptor v) const;
};
-<i>// Incidence Graph requirements</i>
+<i>// Incidence Graph requirements (both interfaces)</i>
vertex_descriptor source(edge_descriptor, const compressed_sparse_row_graph&);
vertex_descriptor target(edge_descriptor, const compressed_sparse_row_graph&);
std::pair<out_edge_iterator, out_edge_iterator>
out_edges(vertex_descriptor, const compressed_sparse_row_graph&);
degree_size_type out_degree(vertex_descriptor v, const compressed_sparse_row_graph&);
-<i>// Adjacency Graph requirements</i>
+<i>// Adjacency Graph requirements (both interfaces)</i>
std::pair<adjacency_iterator, adjacency_iterator>
adjacent_vertices(vertex_descriptor, const compressed_sparse_row_graph&);
-<i>// Vertex List Graph requirements</i>
+<i>// Vertex List Graph requirements (both interfaces)</i>
std::pair<vertex_iterator, vertex_iterator> vertices(const compressed_sparse_row_graph&);
vertices_size_type num_vertices(const compressed_sparse_row_graph&);
-<i>// Edge List Graph requirements</i>
+<i>// Edge List Graph requirements (both interfaces)</i>
std::pair<edge_iterator, edge_iterator> edges(const compressed_sparse_row_graph&);
edges_size_type num_edges(const compressed_sparse_row_graph&);
-<i>// Vertex access</i>
+<i>// Vertex access (both interfaces)</i>
vertex_descriptor vertex(vertices_size_type i, const compressed_sparse_row_graph&);
<i>// Edge access</i>
+<b>(old interface only)</b>
std::pair<out_edge_iterator, out_edge_iterator>
<a href="#edge_range">edge_range</a>(vertex_descriptor u, vertex_descriptor v, const compressed_sparse_row_graph&);
+<b>(old interface only)</b>
std::pair<edge_descriptor, bool>
<a href="#edge">edge</a>(vertex_descriptor u, vertex_descriptor v, const compressed_sparse_row_graph&);
+<b>(both interfaces)</b>
edge_descriptor edge_from_index(edges_size_type i, const compressed_sparse_row_graph&);
-<i>// Property map accessors</i>
+<i>// Property map accessors (both interfaces)</i>
template<typename PropertyTag>
property_map<compressed_sparse_row_graph, PropertyTag>::type
<a href="#get">get</a>(PropertyTag, compressed_sparse_row_graph& g)
@@ -202,7 +264,7 @@
void set_property(const compressed_sparse_row_graph& g, GraphPropertyTag,
const typename graph_property<compressed_sparse_row_graph, GraphPropertyTag>::type& value);
-<i>// Incremental construction functions</i>
+<i>// Incremental construction functions (old interface only)</i>
template<typename Graph>
vertex_descriptor add_vertex(compressed_sparse_row_graph& g);
@@ -210,7 +272,7 @@
vertex_descriptor add_vertices(vertices_size_type count, compressed_sparse_row_graph& g);
template<typename Graph>
-edge_descriptor add_vertices(vertex_descriptor src, vertex_descriptor tgt, compressed_sparse_row_graph& g);
+edge_descriptor add_edge(vertex_descriptor src, vertex_descriptor tgt, compressed_sparse_row_graph& g);
} <i>// end namespace boost</i>
</pre>
@@ -339,8 +401,64 @@
<hr></hr>
<pre><a name="edge-const"></a>
+ template<typename MultiPassInputIterator>
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin, MultiPassInputIterator edge_end,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty());
+ </pre>
+
+ <p class="indent">
+ Constructs a graph with <code>numverts</code> vertices whose
+ edges are specified by the iterator range <code>[edge_begin,
+ edge_end)</code>. The <tt>MultiPassInputIterator</tt> must be a model of
+ <a
+ href="../../utility/MultiPassInputIterator.html">MultiPassInputIterator</a>
+ whose <code>value_type</code> is an <code>std::pair</code> of
+ integer values. These integer values are the source and target
+ vertices for the edges, and must fall within the range <code>[0,
+ numverts)</code>. The edges in <code>[edge_begin,
+ edge_end)</code> do not need to be sorted.
+ <b>(This function is only provided by the new interface.)</b>
+ </p>
+
+ <p class="indent">
+ The value <code>prop</code> will be used to initialize the graph
+ property.
+ </p>
+
+ <hr></hr>
+
+ <pre><a name="edge-prop-const"></a>
+ template<typename MultiPassInputIterator, typename EdgePropertyIterator>
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin, MultiPassInputIterator edge_end,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty());
+ </pre>
+ <p class="indent">
+ This constructor constructs a graph with <code>numverts</code>
+ vertices and the edges provided in the iterator range
+ <code>[edge_begin, edge_end)</code>. Its semantics are identical
+ to the edge range constructor, except
+ that edge properties are also initialized. The type
+ <tt>EdgePropertyIterator</tt> must be a model of the <a
+ href="../../utility/MultiPassInputIterator.html">MultiPassInputIterator</a>
+ concept whose <tt>value_type</tt> is convertible to
+ <tt>EdgeProperty</tt>. The iterator range <tt>[ep_iter, ep_ter +
+ m)</tt> will be used to initialize the properties on the edges
+ of the graph, where <tt>m</tt> is distance from
+ <tt>edge_begin</tt> to <tt>edge_end</tt>.
+ <b>(This function is only provided by the new interface.)</b>
+ </p>
+
+ <hr></hr>
+
+ <pre><a name="edge-sorted-const"></a>
template<typename InputIterator>
- compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
+ compressed_sparse_row_graph(edges_are_sorted_t,
+ InputIterator edge_begin, InputIterator edge_end,
vertices_size_type numverts,
edges_size_type numedges = 0,
const GraphProperty& prop = GraphProperty());
@@ -349,7 +467,10 @@
<p class="indent">
Constructs a graph with <code>numverts</code> vertices whose
edges are specified by the iterator range <code>[edge_begin,
- edge_end)</code>. The <tt>InputIterator</tt> must be a model of
+ edge_end)</code>. The argument of type <code>edges_are_sorted_t</code> is
+ a tag used to distinguish this constructor; the value
+ <code>edges_are_sorted</code> can be used to initialize this parameter.
+ The <tt>InputIterator</tt> must be a model of
<a
href="http://www.sgi.com/tech/stl/InputIterator.html">InputIterator</a>
whose <code>value_type</code> is an <code>std::pair</code> of
@@ -358,7 +479,9 @@
numverts)</code>. The edges in <code>[edge_begin,
edge_end)</code> must be sorted so that all edges originating
from vertex <i>i</i> preceed any edges originating from all
- vertices <i>j</i> where <i>j > i</i>.
+ vertices <i>j</i> where <i>j > i</i>. <b>(The version of this
+ constructor without the <tt>edges_are_sorted</tt> tag is deprecated and
+ only provided by the old interface.)</b>
</p>
<p class="indent">
@@ -375,9 +498,10 @@
<hr></hr>
- <pre><a name="edge-prop-const"></a>
+ <pre><a name="edge-sorted-prop-const"></a>
template<typename InputIterator, typename EdgePropertyIterator>
- compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
+ compressed_sparse_row_graph(edges_are_sorted_t,
+ InputIterator edge_begin, InputIterator edge_end,
EdgePropertyIterator ep_iter,
vertices_size_type numverts,
edges_size_type numedges = 0,
@@ -395,7 +519,53 @@
<tt>EdgeProperty</tt>. The iterator range <tt>[ep_iter, ep_ter +
m)</tt> will be used to initialize the properties on the edges
of the graph, where <tt>m</tt> is distance from
- <tt>edge_begin</tt> to <tt>edge_end</tt>.
+ <tt>edge_begin</tt> to <tt>edge_end</tt>. <b>(The version of this
+ constructor without the <tt>edges_are_sorted</tt> tag is deprecated and
+ only provided by the old interface.)</b>
+ </p>
+
+ <hr></hr>
+
+ <pre><a name="edge-inplace-const"></a>
+ template<typename InputIterator>
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty());
+ </pre>
+ <p class="indent">
+ This constructor constructs a graph with <code>numverts</code> vertices
+ and the edges provided in the two vectors <code>sources</code> and
+ <code>targets</code>. The two vectors are mutated in-place to sort them
+ by source vertex. They are returned with unspecified values, but do not
+ share storage with the constructed graph (and so are safe to destroy).
+ The parameter <code>prop</code>, if provided, is used to initialize the
+ graph property.
+ <b>(This function is only provided by the new interface.)</b>
+ </p>
+
+ <hr></hr>
+
+ <pre><a name="edge-inplace-prop-const"></a>
+ template<typename InputIterator>
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector<vertex_descriptor>& sources,
+ std::vector<vertex_descriptor>& targets,
+ std::vector<EdgeProperty>& edge_props,
+ vertices_size_type numverts,
+ const GraphProperty& prop = GraphProperty());
+ </pre>
+ <p class="indent">
+ This constructor constructs a graph with <code>numverts</code> vertices
+ and the edges provided in the two vectors <code>sources</code> and
+ <code>targets</code>. Edge properties are initialized from the vector
+ <code>edge_props</code>. The three vectors are mutated in-place to sort
+ them by source vertex. They are returned with unspecified values, but do
+ not share storage with the constructed graph (and so are safe to
+ destroy). The parameter <code>prop</code>, if provided, is used to
+ initialize the graph property.
+ <b>(This function is only provided by the new interface.)</b>
</p>
<hr></hr>
@@ -510,6 +680,7 @@
<p class="indent">
Returns all edges from <tt>u</tt> to <tt>v</tt>. Requires time
linear in the number of edges outgoing from <tt>u</tt>.
+ <b>(This function is only provided by the old interface.)</b>
</p>
<hr></hr>
@@ -526,6 +697,7 @@
edges exist from <tt>u</tt> to <tt>v</tt>, the first edge will
be returned; use edge_range
to retrieve all edges.
+ <b>(This function is only provided by the old interface.)</b>
</p>
<hr></hr>
@@ -630,6 +802,7 @@
Add a new vertex to the end of the graph <tt>g</tt>, and return a
descriptor for that vertex. The new vertex will be greater than any of
the previous vertices in <tt>g</tt>.
+ <b>(This function is only provided by the old interface.)</b>
</p>
<hr></hr>
@@ -642,6 +815,7 @@
Add <tt>count</tt> new vertices to the end of the graph <tt>g</tt>, and
return a descriptor for the smallest new vertex. The new vertices will
be greater than any of the previous vertices in <tt>g</tt>.
+ <b>(This function is only provided by the old interface.)</b>
</p>
<hr></hr>
@@ -656,6 +830,7 @@
whose source vertex is greater than <tt>src</tt>. If the vertex
<tt>src</tt> has out edges before this operation is called, there must be
none whose target is larger than <tt>tgt</tt>.
+ <b>(This function is only provided by the old interface.)</b>
</p>
<hr></hr>
Modified: branches/release/libs/graph/doc/connected_components.html
==============================================================================
--- branches/release/libs/graph/doc/connected_components.html (original)
+++ branches/release/libs/graph/doc/connected_components.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000-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)
+ Copyright (c) Jeremy Siek 2000-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)
-->
<Head>
<Title>Boost Graph Library: Connected Components</Title>
@@ -74,7 +74,7 @@
records which component each vertex in the graph belongs to by
recording the component number in the component property map. The
<tt>ComponentMap</tt> type must be a model of <a
-href="../../property_map/WritablePropertyMap.html">Writable Property
+href="../../property_map/doc/WritablePropertyMap.html">Writable Property
Map</a>. The value type shouch be an integer type, preferably the same
as the <tt>vertices_size_type</tt> of the graph. The key type must be
the graph's vertex descriptor type.<br>
@@ -89,12 +89,12 @@
<blockquote>
This is used by the algorithm to keep track of its progress through
the graph. The type <tt>ColorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map must model
<a href="./ColorValue.html">ColorValue</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>default_color_type</tt> of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -109,7 +109,7 @@
num_vertices(g))</tt>. This parameter is only necessary when the
default color property map is used. The type <tt>VertexIndexMap</tt>
must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -149,7 +149,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/constructing_algorithms.html
==============================================================================
--- branches/release/libs/graph/doc/constructing_algorithms.html (original)
+++ branches/release/libs/graph/doc/constructing_algorithms.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Constructing Graph Algorithms</Title>
@@ -91,12 +91,12 @@
algorithm the ability to decide how they want to store the properties.
Since we will need to both read and write the colors we specify the
requirements as <a
-href="../../property_map/ReadWritePropertyMap.html">ReadWritePropertyMap</a>. The
+href="../../property_map/doc/ReadWritePropertyMap.html">ReadWritePropertyMap</a>. The
<TT>key_type</TT> of the color map must be the
<TT>vertex_descriptor</TT> from the graph, and the <TT>value_type</TT>
must be some kind of integer. We also specify the interface for the
<TT>order</TT> parameter as a property map, in this case a <a
-href="../../property_map/ReadablePropertyMap.html">ReadablePropertyMap</a>. For
+href="../../property_map/doc/ReadablePropertyMap.html">ReadablePropertyMap</a>. For
order, the <TT>key_type</TT> is an integer offset and the
<TT>value_type</TT> is a <TT>vertex_descriptor</TT>. Again we enforce
these requirements with concept checks. The return value of this
@@ -169,7 +169,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/copy_graph.html
==============================================================================
--- branches/release/libs/graph/doc/copy_graph.html (original)
+++ branches/release/libs/graph/doc/copy_graph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Copy Graph</Title>
@@ -73,7 +73,7 @@
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
<blockquote>
The vertex index map type must be a model of <a
-href="../../property_map/ReadablePropertyMap.html">Readable Property
+href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a> and must map the vertex descriptors of <tt>G</tt> to the
integers in the half-open range <tt>[0,num_vertices(G))</tt>.<br>
@@ -90,7 +90,7 @@
This maps vertices in the original graph to vertices in the copy.
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the output graph's vertex descriptor type of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -108,7 +108,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/cuthill_mckee_ordering.html
==============================================================================
--- branches/release/libs/graph/doc/cuthill_mckee_ordering.html (original)
+++ branches/release/libs/graph/doc/cuthill_mckee_ordering.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,11 @@
<HTML>
-<!-- Copyright (c) Jeremy Siek 2000 -->
+<!-- Copyright (c) Jeremy Siek 2000
- -- 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)
+ 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)
+ -->
<Head>
<Title>Boost Graph Library: Cuthill-Mckee Ordering</Title>
@@ -239,7 +240,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/dag_shortest_paths.html
==============================================================================
--- branches/release/libs/graph/doc/dag_shortest_paths.html (original)
+++ branches/release/libs/graph/doc/dag_shortest_paths.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Directed Acyclic Graph Shortest Paths</Title>
@@ -96,7 +96,7 @@
<blockquote>
The weight or ``length'' of each edge in the graph.
The type <tt>WeightMap</tt> must be a model of
- Readable Property Map. The edge descriptor type of
+ Readable Property Map. The edge descriptor type of
the graph needs to be usable as the key type for the weight
map. The value type for the map must be
<i>Addable</i> with the value type of the distance map.<br>
@@ -112,7 +112,7 @@
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
<tt>VertexIndexMap</tt> must be a model of
- Readable Property Map. The value type of the map must be an
+ Readable Property Map. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
@@ -132,7 +132,7 @@
u</i> then <i>u</i> is either the source vertex or a vertex that is
not reachable from the source. The <tt>PredecessorMap</tt> type
must be a <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> which key and vertex types the same as the vertex
descriptor type of the graph.<br>
<b>Default:</b> <tt>dummy_property_map</tt><br>
@@ -145,7 +145,7 @@
vertex in the graph <tt>g</tt> is recorded in this property map. The
shortest path weight is the sum of the edge weights along the
shortest path. The type <tt>DistanceMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the graph needs to
be usable as the key type of the distance map.
@@ -157,7 +157,7 @@
StrictWeakOrdering</a> provided by the <tt>compare</tt> function
object.<br>
<b>Default:</b> <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>WeightMap</tt>'s value type of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -228,12 +228,12 @@
from the queue. At the end of the algorithm, vertices reachable from
the source vertex will have been colored black. All other vertices
will still be white. The type <tt>ColorMap</tt> must be a model of
- <a href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ <a href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. A vertex descriptor must be usable as the key type
of the map, and the value type of the map must be a model of
<a href="./ColorValue.html">Color Value</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a <tt>std::vector</tt>
of <tt>default_color_type</tt> of size <tt>num_vertices(g)</tt> and
using the <tt>i_map</tt> for the index map.<br>
@@ -317,7 +317,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/depth_first_search.html
==============================================================================
--- branches/release/libs/graph/doc/depth_first_search.html (original)
+++ branches/release/libs/graph/doc/depth_first_search.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Depth-First Search</Title>
@@ -185,12 +185,12 @@
<blockquote>
This is used by the algorithm to keep track of its progress through
the graph. The type <tt>ColorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map must model
<a href="./ColorValue.html">ColorValue</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>default_color_type</tt> of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -215,7 +215,7 @@
num_vertices(g))</tt>. This parameter is only necessary when the
default color property map is used. The type <tt>VertexIndexMap</tt>
must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -300,7 +300,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/depth_first_visit.html
==============================================================================
--- branches/release/libs/graph/doc/depth_first_visit.html (original)
+++ branches/release/libs/graph/doc/depth_first_visit.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Depth-First Visit</Title>
@@ -96,7 +96,7 @@
<blockquote>
This is used by the algorithm to keep track of its progress through
the graph. The type <tt>ColorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map map must model
<a href="./ColorValue.html">Color Value</a>.<br>
@@ -136,7 +136,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/dfs_visitor.html
==============================================================================
--- branches/release/libs/graph/doc/dfs_visitor.html (original)
+++ branches/release/libs/graph/doc/dfs_visitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: dfs_visitor</Title>
@@ -97,7 +97,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/dijkstra_shortest_paths.html
==============================================================================
--- branches/release/libs/graph/doc/dijkstra_shortest_paths.html (original)
+++ branches/release/libs/graph/doc/dijkstra_shortest_paths.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Dijkstra's Shortest Paths</Title>
@@ -19,7 +19,6 @@
<TT>dijkstra_shortest_paths</TT>
</H1>
-
<P>
<PRE>
<i>// named parameter version</i>
@@ -41,6 +40,20 @@
VertexIndexMap index_map,
CompareFunction compare, CombineFunction combine, DistInf inf, DistZero zero,
DijkstraVisitor vis, ColorMap color = <i>default</i>)
+
+<i>// version that does not initialize the property maps (except for the default color map)</i>
+template <class Graph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistZero, class ColorMap>
+void
+dijkstra_shortest_paths_no_init
+ (const Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistZero zero,
+ DijkstraVisitor vis, ColorMap color = <i>default</i>);
</PRE>
<P>
@@ -66,8 +79,8 @@
<i>u in V</i>, <i>p[u]</i> will be the predecessor of <i>u</i> in
the shortest paths tree (unless <i>p[u] = u</i>, in which case <i>u</i> is
either the source or a vertex unreachable from the source). In
-addition to these two options, the user can provide there own
-custom-made visitor that can takes actions during any of the
+addition to these two options, the user can provide their own
+custom-made visitor that takes actions during any of the
algorithm's event points.</P>
<P>
@@ -92,7 +105,7 @@
<i>S</i>. Vertices colored white or gray are in <i>V-S</i>. White vertices have
not yet been discovered and gray vertices are in the priority queue.
By default, the algorithm will allocate an array to store a color
-marker for each vertex in the graph. You can provide you own storage
+marker for each vertex in the graph. You can provide your own storage
and access for colors with the <tt>color_map()</tt> parameter.
</P>
<p>
@@ -109,7 +122,7 @@
<td valign="top">
<pre>
DIJKSTRA(<i>G</i>, <i>s</i>, <i>w</i>)
- <b>for</b> each vertex <i>u in V</i>
+ <b>for</b> each vertex <i>u in V</i> <b>(This loop is not run in dijkstra_shortest_paths_no_init)</b>
<i>d[u] := infinity</i>
<i>p[u] := u</i>
<i>color[u] :=</i> WHITE
@@ -202,7 +215,7 @@
<a href="./exception.html#negative_edge"><tt>negative_edge</tt></a>
exception is one of the edges is negative.
The type <tt>WeightMap</tt> must be a model of
- Readable Property Map. The edge descriptor type of
+ Readable Property Map. The edge descriptor type of
the graph needs to be usable as the key type for the weight
map. The value type for this map must be
the same as the value type of the distance map.<br>
@@ -220,7 +233,7 @@
HREF="bibliography.html#driscoll88">61</A>] when an edge is relaxed.
The type
<tt>VertexIndexMap</tt> must be a model of
- Readable Property Map. The value type of the map must be an
+ Readable Property Map. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
@@ -241,7 +254,7 @@
u</i> then <i>u</i> is either the source vertex or a vertex that is
not reachable from the source. The <tt>PredecessorMap</tt> type
must be a <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> whose key and value types are the same as the vertex
descriptor type of the graph.<br>
<b>Default:</b> <tt>dummy_property_map</tt><br>
@@ -255,7 +268,7 @@
vertex in the graph <tt>g</tt> is recorded in this property map. The
shortest path weight is the sum of the edge weights along the
shortest path. The type <tt>DistanceMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the graph needs to
be usable as the key type of the distance map.
@@ -267,7 +280,7 @@
StrictWeakOrdering</a> provided by the <tt>compare</tt> function
object.<br>
<b>Default:</b> <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>WeightMap</tt>'s value type of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -303,7 +316,7 @@
<tt>WeightMap</tt> property map. The result type must be the same
type as the distance value type.<br>
- <b>Default:</b> <tt>std::plus<D></tt> with
+ <b>Default:</b> <tt>closed_plus<D></tt> with
<tt>D=typename property_traits<DistanceMap>::value_type</tt><br>
<b>Python</b>: Unsupported parameter.
@@ -339,12 +352,12 @@
from the queue. At the end of the algorithm, vertices reachable from
the source vertex will have been colored black. All other vertices
will still be white. The type <tt>ColorMap</tt> must be a model of
- <a href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ <a href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. A vertex descriptor must be usable as the key type
of the map, and the value type of the map must be a model of
<a href="./ColorValue.html">Color Value</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a <tt>std::vector</tt>
of <tt>default_color_type</tt> of size <tt>num_vertices(g)</tt> and
using the <tt>i_map</tt> for the index map.<br>
@@ -416,6 +429,8 @@
<TT>example/dijkstra-example.cpp</TT></a> for an example of using Dijkstra's
algorithm.
+<H3>See also</H3> dijkstra_shortest_paths_no_color_map for a version of dijkstra's shortest path that does not use a color map.
+
<H3>Notes</H3>
<a name="1">[1]</a>
@@ -435,7 +450,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Copied: branches/release/libs/graph/doc/dijkstra_shortest_paths_no_color_map.html (from r53746, /trunk/libs/graph/doc/dijkstra_shortest_paths_no_color_map.html)
==============================================================================
--- /trunk/libs/graph/doc/dijkstra_shortest_paths_no_color_map.html (original)
+++ branches/release/libs/graph/doc/dijkstra_shortest_paths_no_color_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -391,7 +391,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2009</TD><TD>
+<TD nowrap>Copyright © 2009</TD><TD>
Trustees of Indiana University</TD></TR></TABLE>
</BODY>
Modified: branches/release/libs/graph/doc/dijkstra_visitor.html
==============================================================================
--- branches/release/libs/graph/doc/dijkstra_visitor.html (original)
+++ branches/release/libs/graph/doc/dijkstra_visitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: dijkstra_visitor</Title>
@@ -111,7 +111,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/distance_recorder.html
==============================================================================
--- branches/release/libs/graph/doc/distance_recorder.html (original)
+++ branches/release/libs/graph/doc/distance_recorder.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: distance_recorder</Title>
@@ -64,7 +64,7 @@
<TR><TD><TT>DistanceMap</TT></TD>
<TD>
A <a
-href="../../property_map/WritablePropertyMap.html">WritablePropertyMap</a>,
+href="../../property_map/doc/WritablePropertyMap.html">WritablePropertyMap</a>,
where the key type and the value type are the vertex descriptor type
of the graph.
</TD>
@@ -162,7 +162,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/edge_list.html
==============================================================================
--- branches/release/libs/graph/doc/edge_list.html (original)
+++ branches/release/libs/graph/doc/edge_list.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Edge List Class</Title>
@@ -207,7 +207,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/edmonds_karp_max_flow.html
==============================================================================
--- branches/release/libs/graph/doc/edmonds_karp_max_flow.html (original)
+++ branches/release/libs/graph/doc/edmonds_karp_max_flow.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -125,7 +125,7 @@
<blockquote>
The edge capacity property map. The type must be a model of a
constant <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property Map</a>. The
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property Map</a>. The
key type of the map must be the graph's edge descriptor type.<br>
<b>Default:</b> <tt>get(edge_capacity, g)</tt>
</blockquote>
@@ -134,7 +134,7 @@
<blockquote>
This maps edges to their residual capacity. The type must be a model
of a mutable <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map</a>. The key type of the map must be the graph's edge descriptor
type.<br>
<b>Default:</b> <tt>get(edge_residual_capacity, g)</tt>
@@ -144,7 +144,7 @@
<blockquote>
An edge property map that maps every edge <i>(u,v)</i> in the graph
to the reverse edge <i>(v,u)</i>. The map must be a model of
- constant <a href="../../property_map/LvaluePropertyMap.html">Lvalue
+ constant <a href="../../property_map/doc/LvaluePropertyMap.html">Lvalue
Property Map</a>. The key type of the map must be the graph's edge
descriptor type.<br>
<b>Default:</b> <tt>get(edge_reverse, g)</tt>
@@ -156,13 +156,13 @@
breadth-first search stage. At the end of the algorithm, the white
vertices define the minimum cut set. The map must be a model of
mutable <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property Map</a>.
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property Map</a>.
The key type of the map should be the graph's vertex descriptor type, and
the value type must be a model of <a
href="./ColorValue.html">ColorValue</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a <tt>std::vector</tt>
of <tt>default_color_type</tt> of size <tt>num_vertices(g)</tt> and
using the <tt>i_map</tt> for the index map.
@@ -172,12 +172,12 @@
<blockquote>
Use by the algorithm to store augmenting paths. The map must be a
model of mutable <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property Map</a>.
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property Map</a>.
The key type must be the graph's vertex descriptor type and the
value type must be the graph's edge descriptor type.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a <tt>std::vector</tt>
of edge descriptors of size <tt>num_vertices(g)</tt> and
using the <tt>i_map</tt> for the index map.
@@ -189,7 +189,7 @@
<tt>[0, num_vertices(g))</tt>. This property map is only needed
if the default for the color or predecessor map is used.
The vertex index map must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The key type of the map must be the graph's vertex
descriptor type.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt>
@@ -224,7 +224,7 @@
<TABLE>
<TR valign=top>
<TD nowrap>Copyright © 2000-2001</TD><TD>
-<A HREF="http://www.boost.org/users/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
+<A HREF="http://www.boost.org/users/people/jeremy_siek.html">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
</BODY>
Modified: branches/release/libs/graph/doc/eg1-iso.cpp
==============================================================================
--- branches/release/libs/graph/doc/eg1-iso.cpp (original)
+++ branches/release/libs/graph/doc/eg1-iso.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -20,7 +20,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/isomorphism.hpp>
//#include "isomorphism-v3.hpp"
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <iostream>
#include <fstream>
#include <map>
Modified: branches/release/libs/graph/doc/erdos_renyi_generator.html
==============================================================================
--- branches/release/libs/graph/doc/erdos_renyi_generator.html (original)
+++ branches/release/libs/graph/doc/erdos_renyi_generator.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,14 +1,14 @@
<HTML>
<!--
- -- Copyright (c) 2004, 2005 The Trustees of Indiana University
- --
- -- Use, modification and distribution is subject to 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)
- --
- -- Authors: Douglas Gregor
- -- Jeremiah Willcock
- -- Andrew Lumsdaine
+ Copyright (c) 2004, 2005 The Trustees of Indiana University
+
+ Use, modification and distribution is subject to 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)
+
+ Authors: Douglas Gregor
+ Jeremiah Willcock
+ Andrew Lumsdaine
-->
<Head>
<Title>Boost Graph Library: Erdös-Renyi Generator</Title>
@@ -142,7 +142,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2005</TD><TD>
+<TD nowrap>Copyright © 2005</TD><TD>
<A HREF="http://www.boost.org/people/doug_gregor.html">Doug Gregor</A>, Indiana University (<script language="Javascript">address("cs.indiana.edu", "dgregor")</script>)<br>
<A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>,
Indiana University (<script language="Javascript">address("osl.iu.edu", "lums")</script>)
Modified: branches/release/libs/graph/doc/exception.html
==============================================================================
--- branches/release/libs/graph/doc/exception.html (original)
+++ branches/release/libs/graph/doc/exception.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2002
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2002
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Exceptions</Title>
Modified: branches/release/libs/graph/doc/faq.html
==============================================================================
--- branches/release/libs/graph/doc/faq.html (original)
+++ branches/release/libs/graph/doc/faq.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: FAQ</Title>
Modified: branches/release/libs/graph/doc/file_dependency_example.html
==============================================================================
--- branches/release/libs/graph/doc/file_dependency_example.html (original)
+++ branches/release/libs/graph/doc/file_dependency_example.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>File Dependency Example</Title>
@@ -355,7 +355,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/filtered_graph.html
==============================================================================
--- branches/release/libs/graph/doc/filtered_graph.html (original)
+++ branches/release/libs/graph/doc/filtered_graph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Filtered Graph</Title>
@@ -521,7 +521,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/floyd_warshall_shortest.html
==============================================================================
--- branches/release/libs/graph/doc/floyd_warshall_shortest.html (original)
+++ branches/release/libs/graph/doc/floyd_warshall_shortest.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -101,7 +101,7 @@
IN: <code>weight_map(WeightMap w)</code>
<blockquote>
The weight of length of each edge in the graph. The <code>WeightMap</code>
-must be a model of <a href="../../property_map/ReadablePropertyMap.html">Readable Property
+must be a model of <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The edge descriptor
type of the graph needs to be usable as the key type for the weight
map. The <code>value_type</code> of the weight map must be the type of the
@@ -157,7 +157,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2002-2004</TD><TD>
+<TD nowrap>Copyright © 2002-2004</TD><TD>
Lauren Foutz, Rensselaer Polytechnic Institute</td>
</tr><tr valign="top"><td></td>
<td>Scott Hill, Rensselaer Polytechnic Institute
Modified: branches/release/libs/graph/doc/fruchterman_reingold.html
==============================================================================
--- branches/release/libs/graph/doc/fruchterman_reingold.html (original)
+++ branches/release/libs/graph/doc/fruchterman_reingold.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) 2004 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2004 Trustees of Indiana University
+
+ 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)
-->
<Head>
@@ -96,7 +96,7 @@
typically be initialized with the vertices at random locations (use
<a href="random_layout.html"><tt>random_graph_layout</tt></a>). The
type <tt>PositionMap</tt> must be a model of <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map</a> such that the vertex descriptor type of <tt>Graph</tt> is
convertible to its key type. Its value type must be a structure
with fields <tt>x</tt> and <tt>y</tt>, representing the coordinates
@@ -197,7 +197,7 @@
num_vertices(g))</tt>. This is only necessary when no
displacement map is provided.
The type <tt>VertexIndexMap</tt> must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -233,7 +233,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2004</TD><TD>
+<TD nowrap>Copyright © 2004</TD><TD>
<A HREF="http://www.boost.org/people/doug_gregor.html">Doug Gregor</A>, Indiana University
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/graph_coloring.html
==============================================================================
--- branches/release/libs/graph/doc/graph_coloring.html (original)
+++ branches/release/libs/graph/doc/graph_coloring.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Graph Coloring Example</Title>
@@ -177,7 +177,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/graph_concepts.html
==============================================================================
--- branches/release/libs/graph/doc/graph_concepts.html (original)
+++ branches/release/libs/graph/doc/graph_concepts.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Concepts</Title>
@@ -485,7 +485,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/graph_theory_review.html
==============================================================================
--- branches/release/libs/graph/doc/graph_theory_review.html (original)
+++ branches/release/libs/graph/doc/graph_theory_review.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Graph Theory Review</Title>
@@ -582,7 +582,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/graph_traits.html
==============================================================================
--- branches/release/libs/graph/doc/graph_traits.html (original)
+++ branches/release/libs/graph/doc/graph_traits.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Graph Traits</Title>
@@ -238,7 +238,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/gursoy_atun_layout.html
==============================================================================
--- branches/release/libs/graph/doc/gursoy_atun_layout.html (original)
+++ branches/release/libs/graph/doc/gursoy_atun_layout.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) 2004 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2004 Trustees of Indiana University
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Gürsoy-Atun Layout</Title>
@@ -126,7 +126,7 @@
<blockquote>
The property map that stores the position of each vertex. The type
<tt>PositionMap</tt> must be a model of <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map</a> such that the vertex descriptor type of <tt>Graph</tt> is
convertible to its key type. Its value type must be the type of a
point in the topology.
@@ -180,7 +180,7 @@
This maps each vertex to an integer in the range <tt>[0,
num_vertices(g))</tt>.
The type <tt>VertexIndexMap</tt> must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -197,7 +197,7 @@
num_vertices(g))</tt>. This is only necessary when no
displacement map is provided.
The type <tt>EdgeWeightMap</tt> must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an floating-point type
compatible with <tt>double</tt>. The edge descriptor type of the
graph needs to be usable as the key type of the map. When this map
Modified: branches/release/libs/graph/doc/history.html
==============================================================================
--- branches/release/libs/graph/doc/history.html (original)
+++ branches/release/libs/graph/doc/history.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: History</Title>
@@ -78,6 +78,12 @@
<ul>
<a name="1.35.0"></a><li>Version 1.35.0<br><b>New algorithms and components</b>
<ul>
+ <li>r_c_shortest_paths, resource-constrained shortest paths, from Michael Drexl.</li>
+ </ul>
+ </li>
+
+ <a name="1.35.0"></a><li>Version 1.35.0<br><b>New algorithms and components</b>
+ <ul>
<li>kolmogorov_max_flow, from Stephan Diederich as part of the 2006 Google Summer of Code.</li>
<li>read_dimacs_max_flow and write_dimacs_max_flow for max-flow problems, from Stephan Diederich.</li>
<li>read_graphml and write_graphml for GraphML input/output, from Tiago de Paula Peixoto.</li>
@@ -188,7 +194,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/howard_cycle_ratio.html
==============================================================================
--- branches/release/libs/graph/doc/howard_cycle_ratio.html (original)
+++ branches/release/libs/graph/doc/howard_cycle_ratio.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,13 +9,13 @@
<!-- -- Copyright 2007 Technical University of Catalonia
- --
- -- Use, modification and distribution is subject to 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)
- --
- -- Authors: Dmitry Bufistov
- -- Andrey Parfenov
+
+ Use, modification and distribution is subject to 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)
+
+ Authors: Dmitry Bufistov
+ Andrey Parfenov
-->
<STYLE>
<!--
@@ -147,7 +147,7 @@
boost::graph_traits<TGraph>::edge_descriptor>* pcc</FONT></P>
<BLOCKQUOTE>An edge descriptors of one critical cycle will be stored in the corresponding std::vector. Default value is 0.</BLOCKQUOTE>
<BLOCKQUOTE STYLE="margin-left: 0cm">
-The all maps must be a models of <A HREF="../..//property_map/ReadablePropertyMap.html">Readable
+The all maps must be a models of <A HREF="../..//property_map/doc/ReadablePropertyMap.html">Readable
Property Map</A></BLOCKQUOTE>
<H3>Complexity</H3>
<P>There is no known precise upper bound for the time complexity of the
Modified: branches/release/libs/graph/doc/incident.html
==============================================================================
--- branches/release/libs/graph/doc/incident.html (original)
+++ branches/release/libs/graph/doc/incident.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: incident</Title>
@@ -65,7 +65,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/incremental_components.html
==============================================================================
--- branches/release/libs/graph/doc/incremental_components.html (original)
+++ branches/release/libs/graph/doc/incremental_components.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Incremental Connected Components</Title>
@@ -407,7 +407,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/index.html
==============================================================================
--- branches/release/libs/graph/doc/index.html (original)
+++ branches/release/libs/graph/doc/index.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>The Boost Graph Library</Title>
@@ -39,7 +39,7 @@
<P>
The BGL graph interface and graph components are <I>generic</I>, in the
-same sense as the the Standard Template Library (STL) [<A
+same sense as the Standard Template Library (STL) [<A
HREF="bibliography.html#austern99:_gener_progr_stl">2</A>].
In the following sections, we review the role that generic programming
@@ -47,7 +47,7 @@
programming in the context of graphs.
<P>
-Of course, if you are already are familiar with generic programming,
+Of course, if you are already familiar with generic programming,
please dive right in! Here's the <a
href="./table_of_contents.html">Table of Contents</a>.
@@ -288,7 +288,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/inv_adjacency_iterator.html
==============================================================================
--- branches/release/libs/graph/doc/inv_adjacency_iterator.html (original)
+++ branches/release/libs/graph/doc/inv_adjacency_iterator.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<html>
<!--
- -- Copyright (c) 2000 Jeremy Siek
- --
- -- 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)
+ Copyright (c) 2000 Jeremy Siek
+
+ 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)
-->
<head>
Modified: branches/release/libs/graph/doc/is_kuratowski_subgraph.html
==============================================================================
--- branches/release/libs/graph/doc/is_kuratowski_subgraph.html (original)
+++ branches/release/libs/graph/doc/is_kuratowski_subgraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,9 +1,9 @@
<html><head><!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<title>Boost Graph Library: is_kuratowski_subgraph</title>
</head>
@@ -98,7 +98,7 @@
IN: <tt>VertexIndexMap vm</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps vertices from <tt>g</tt> to distinct integers in the range
<tt>[0, num_vertices(g) )</tt><br>
<b>Default</b>: <tt>get(vertex_index,g)</tt><br>
@@ -123,4 +123,4 @@
Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
-</body></html>
\ No newline at end of file
+</body></html>
Modified: branches/release/libs/graph/doc/is_straight_line_drawing.html
==============================================================================
--- branches/release/libs/graph/doc/is_straight_line_drawing.html (original)
+++ branches/release/libs/graph/doc/is_straight_line_drawing.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<Head>
<Title>Boost Graph Library: is_straight_line_drawing</Title>
@@ -56,7 +56,7 @@
IN: <tt>PositionMap</tt>
<blockquote>
-A <a href="../../property_map/LvaluePropertyMap.html">Readable LValue Property
+A <a href="../../property_map/doc/LvaluePropertyMap.html">Readable LValue Property
Map</a> that models the Position Map concept. The Position Map concept requires
that the value mapped to be an object that has members <tt>x</tt> and
<tt>y</tt>. For example, if <tt>p</tt> models PositionMap and <tt>v</tt>
@@ -68,7 +68,7 @@
IN: <tt>VertexIndexMap vm</tt>
<blockquote>
-A Readable Property Map that maps vertices from <tt>g</tt> to distinct integers in the range <tt>[0, num_vertices(g) )</tt><br>
+A Readable Property Map that maps vertices from <tt>g</tt> to distinct integers in the range <tt>[0, num_vertices(g) )</tt><br>
<b>Default</b>: <tt>get(vertex_index,g)</tt><br>
</blockquote>
@@ -88,6 +88,6 @@
<br>
<HR>
-Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">aaron.windsor_at_[hidden]</a>)
+Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">aaron.windsor_at_[hidden]</a>)
</BODY>
</HTML>
Modified: branches/release/libs/graph/doc/isomorphism-impl.w
==============================================================================
--- branches/release/libs/graph/doc/isomorphism-impl.w (original)
+++ branches/release/libs/graph/doc/isomorphism-impl.w 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1007,7 +1007,7 @@
#include <boost/graph/detail/permutation.hpp>
#include <boost/graph/named_function_params.hpp>
#include <boost/graph/graph_concepts.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/pending/integer_range.hpp>
#include <boost/limits.hpp>
#include <boost/static_assert.hpp>
Modified: branches/release/libs/graph/doc/isomorphism.html
==============================================================================
--- branches/release/libs/graph/doc/isomorphism.html (original)
+++ branches/release/libs/graph/doc/isomorphism.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Isomorphism</Title>
@@ -93,9 +93,9 @@
OUT: <tt>isomorphism_map(IsoMap f)</tt>
<blockquote>
The mapping from vertices in graph 1 to vertices in graph 2. This must
-be a <a href="../../property_map/ReadWritePropertyMap.html">Read/Write
+be a <a href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>.<br> <b>Default:</b> an <a
-href="../../property_map/iterator_property_map.html"><tt>iterator_property_map</tt></a>
+href="../../property_map/doc/iterator_property_map.html"><tt>iterator_property_map</tt></a>
constructed from a <tt>std::vector</tt> of graph 2's vertex
descriptor type and the vertex index map for graph 1.<br>
<b>Python</b>: Must be a <tt>vertex_vertex_map</tt> for the first graph.
@@ -147,7 +147,7 @@
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
<tt>VertexIndex1Map</tt> must be a model of <a
-href="../../property_map/ReadablePropertyMap.html">Readable Property
+href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The vertex
descriptor type of graph 1 needs to be usable as the key type of the
map.<br>
@@ -166,7 +166,7 @@
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
<tt>VertexIndex2Map</tt> must be a model of <a
-href="../../property_map/ReadablePropertyMap.html">Readable Property
+href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The vertex
descriptor type of graph 2 needs to be usable as the key type of the
map.<br>
@@ -192,7 +192,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/johnson_all_pairs_shortest.html
==============================================================================
--- branches/release/libs/graph/doc/johnson_all_pairs_shortest.html (original)
+++ branches/release/libs/graph/doc/johnson_all_pairs_shortest.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Johnson All Pairs Shortest Paths</Title>
@@ -88,7 +88,7 @@
<blockquote>
The weight or ``length'' of each edge in the graph.
The type <tt>WeightMap</tt> must be a model of
- Readable Property Map. The edge descriptor type of
+ Readable Property Map. The edge descriptor type of
the graph needs to be usable as the key type for the weight
map. The value type for the map must be
<i>Addable</i> with the value type of the distance map.<br>
@@ -106,7 +106,7 @@
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure in the internal call to Dijkstra's algorithm. The type
<tt>VertexIndexMap</tt> must be a model of
- Readable Property Map. The value type of the map must be an
+ Readable Property Map. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt>
@@ -172,12 +172,12 @@
from the queue. At the end of the algorithm, vertices reachable from
the source vertex will have been colored black. All other vertices
will still be white. The type <tt>ColorMap</tt> must be a model of
- <a href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ <a href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. A vertex descriptor must be usable as the key type
of the map, and the value type of the map must be a model of
<a href="./ColorValue.html">Color Value</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a <tt>std::vector</tt>
of <tt>default_color_type</tt> of size <tt>num_vertices(g)</tt> and
using the <tt>i_map</tt> for the index map.
@@ -204,7 +204,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/kamada_kawai_spring_layout.html
==============================================================================
--- branches/release/libs/graph/doc/kamada_kawai_spring_layout.html (original)
+++ branches/release/libs/graph/doc/kamada_kawai_spring_layout.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,11 +1,11 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--
- -- Copyright (c) 2004 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2004 Trustees of Indiana University
+
+ 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)
-->
<head>
<meta name="generator" content=
@@ -157,7 +157,7 @@
<blockquote>
This property map is used to store the position of each vertex. The
type <tt>PositionMap</tt> must be a model of <a
- href="../../property_map/WritablePropertyMap.html">Writable Property
+ href="../../property_map/doc/WritablePropertyMap.html">Writable Property
Map</a>, with the graph's vertex descriptor type as its key type.<br>
<b>Python</b>: The position map must be a <tt>vertex_point2d_map</tt> for
@@ -172,7 +172,7 @@
<a href="./exception.html#negative_edge"><tt>negative_edge</tt></a>
exception is one of the edges is negative.
The type <tt>WeightMap</tt> must be a model of
- Readable Property Map. The edge descriptor type of
+ Readable Property Map. The edge descriptor type of
the graph needs to be usable as the key type for the weight
map. The value type for this map must be
the same as the value type of the distance map.<br>
@@ -260,7 +260,7 @@
A property map that will be used to store the partial derivates of
each vertex with respect to the <tt class="computeroutput">x</tt> and
<tt class="computeroutput">y</tt> coordinates. This must be a
-<a href="../../property_map/ReadWritePropertyMap.html">Read/Write
+<a href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> whose value type is a pair with both types equivalent
to the value type of the weight map. The default is an iterator
property map.<br>
Modified: branches/release/libs/graph/doc/kevin_bacon.html
==============================================================================
--- branches/release/libs/graph/doc/kevin_bacon.html (original)
+++ branches/release/libs/graph/doc/kevin_bacon.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Kevin Bacon Example</Title>
@@ -281,7 +281,7 @@
but not with other variations of <TT>adjacency_list</TT>. A more
generic way to index based on vertices is to use the ID property
map (<TT>vertex_index_t</TT>) in coordination with the <A
-HREF="../../property_map/iterator_property_map.html"><TT>iterator_property_map</TT></a>.
+HREF="../../property_map/doc/iterator_property_map.html"><TT>iterator_property_map</TT></a>.
<P>
Here are some excepts from the output of the program.
Modified: branches/release/libs/graph/doc/king_ordering.html
==============================================================================
--- branches/release/libs/graph/doc/king_ordering.html (original)
+++ branches/release/libs/graph/doc/king_ordering.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -2,9 +2,9 @@
<!--
~~ Copyright (c) Jeremy Siek 2000
~~
- -- 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)
+ 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)
-->
Modified: branches/release/libs/graph/doc/known_problems.html
==============================================================================
--- branches/release/libs/graph/doc/known_problems.html (original)
+++ branches/release/libs/graph/doc/known_problems.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Known Problems</Title>
@@ -56,7 +56,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/kolmogorov_max_flow.html
==============================================================================
--- branches/release/libs/graph/doc/kolmogorov_max_flow.html (original)
+++ branches/release/libs/graph/doc/kolmogorov_max_flow.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -227,33 +227,33 @@
<BLOCKQUOTE>The sink vertex for the flow network graph.
</BLOCKQUOTE>
<H3>Named Parameters</H3>
-<P>IN: <TT>capacity_map(EdgeCapacityMap cap)</TT>
+<P>IN: <TT>edge_capacity(EdgeCapacityMap cap)</TT>
</P>
<BLOCKQUOTE>The edge capacity property map. The type must be a model
-of a constant <A HREF="../../property_map/LvaluePropertyMap.html">Lvalue
+of a constant <A HREF="../../property_map/doc/LvaluePropertyMap.html">Lvalue
Property Map</A>. The key type of the map must be the graph's edge
descriptor type.<BR><B>Default:</B> <TT>get(edge_capacity, g)</TT>
</BLOCKQUOTE>
-<P>OUT: <TT>residual_capacity_map(ResidualCapacityEdgeMap res)</TT>
+<P>OUT: <TT>edge_residual_capacity(ResidualCapacityEdgeMap res)</TT>
</P>
<BLOCKQUOTE>The edge residual capacity property map. The type must be
-a model of a mutable <A HREF="../../property_map/LvaluePropertyMap.html">Lvalue
+a model of a mutable <A HREF="../../property_map/doc/LvaluePropertyMap.html">Lvalue
Property Map</A>. The key type of the map must be the graph's edge
descriptor type.<BR><B>Default:</B> <TT>get(edge_residual_capacity,
g)</TT>
</BLOCKQUOTE>
-<P>IN: <TT>reverse_edge_map(ReverseEdgeMap rev)</TT>
+<P>IN: <TT>edge_reverse(ReverseEdgeMap rev)</TT>
</P>
<BLOCKQUOTE>An edge property map that maps every edge <I>(u,v)</I> in
the graph to the reverse edge <I>(v,u)</I>. The map must be a model
-of constant <A HREF="../../property_map/LvaluePropertyMap.html">Lvalue
+of constant <A HREF="../../property_map/doc/LvaluePropertyMap.html">Lvalue
Property Map</A>. The key type of the map must be the graph's edge
descriptor type.<BR><B>Default:</B> <TT>get(edge_reverse, g)</TT>
</BLOCKQUOTE>
<P>UTIL: <TT>vertex_predecessor(PredecessorMap pre_map)</TT>
</P>
<BLOCKQUOTE>A vertex property map that stores the edge to the vertex'
-predecessor. The map must be a model of mutable <A HREF="../../property_map/LvaluePropertyMap.html">Lvalue
+predecessor. The map must be a model of mutable <A HREF="../../property_map/doc/LvaluePropertyMap.html">Lvalue
Property Map</A>. The key type of the map must be the graph's vertex
descriptor type.<BR><B>Default:</B> <TT>get(vertex_predecessor, g)</TT>
</BLOCKQUOTE>
@@ -263,7 +263,7 @@
vertex. If the color of a vertex after running the algorithm is black
the vertex belongs to the source tree else it belongs to the
sink-tree (used for minimum cuts). The map must be a model of mutable
-<A HREF="../../property_map/LvaluePropertyMap.html">Lvalue Property
+<A HREF="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map</A>. The key type of the map must be the graph's vertex
descriptor type.<BR><B>Default:</B> <TT>get(vertex_color, g)</TT>
</BLOCKQUOTE>
@@ -271,15 +271,15 @@
</P>
<BLOCKQUOTE>A vertex property map that stores the distance to the
corresponding terminal. It's a utility-map for speeding up the
-algorithm. The map must be a model of mutable <A HREF="../../property_map/LvaluePropertyMap.html">Lvalue
+algorithm. The map must be a model of mutable <A HREF="../../property_map/doc/LvaluePropertyMap.html">Lvalue
Property Map</A>. The key type of the map must be the graph's vertex
descriptor type.<BR><B>Default:</B> <TT>get(vertex_distance, g)</TT>
</BLOCKQUOTE>
-<P>IN: <TT>vertex_index_map(VertexIndexMap index_map)</TT>
+<P>IN: <TT>vertex_index(VertexIndexMap index_map)</TT>
</P>
<BLOCKQUOTE>Maps each vertex of the graph to a unique integer in the
range <TT>[0, num_vertices(g))</TT>. The map must be a model of
-constant LvaluePropertyMap.
+constant LvaluePropertyMap.
The key type of the map must be the graph's vertex descriptor
type.<BR><B>Default:</B> <TT>get(vertex_index, g)</TT>
</BLOCKQUOTE>
@@ -292,50 +292,54 @@
<PRE>#include <boost/config.hpp>
#include <iostream>
#include <string>
-#include <boost/graph/kolmogorov_map_flow.hpp>
+#include <boost/graph/kolmogorov_max_flow.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/read_dimacs.hpp>
+#include <boost/graph/graph_utility.hpp>
int
main()
{
using namespace boost;
- typedef adjacency_list_traits<vecS, vecS, directedS> Traits;
- typedef adjacency_list<vecS, vecS, directedS,
- property<vertex_name_t, std::string>,
- property<edge_capacity_t, long,
- property<edge_residual_capacity_t, long,
- property<edge_reverse_t, Traits::edge_descriptor> > >
- > Graph;
-
+ typedef adjacency_list_traits < vecS, vecS, directedS > Traits;
+ typedef adjacency_list < vecS, vecS, directedS,
+ property < vertex_name_t, std::string,
+ property < vertex_index_t, long,
+ property < vertex_color_t, boost::default_color_type,
+ property < vertex_distance_t, long,
+ property < vertex_predecessor_t, Traits::edge_descriptor > > > > >,
+
+ property < edge_capacity_t, long,
+ property < edge_residual_capacity_t, long,
+ property < edge_reverse_t, Traits::edge_descriptor > > > > Graph;
+
Graph g;
- long flow;
-
- property_map<Graph, edge_capacity_t>::type
- capacity = get(edge_capacity, g);
- property_map<Graph, edge_reverse_t>::type
- rev = get(edge_reverse, g);
- property_map<Graph, edge_residual_capacity_t>::type
- residual_capacity = get(edge_residual_capacity, g);
-
+ property_map < Graph, edge_capacity_t >::type
+ capacity = get(edge_capacity, g);
+ property_map < Graph, edge_residual_capacity_t >::type
+ residual_capacity = get(edge_residual_capacity, g);
+ property_map < Graph, edge_reverse_t >::type rev = get(edge_reverse, g);
Traits::vertex_descriptor s, t;
read_dimacs_max_flow(g, capacity, rev, s, t);
- flow = kolmogorov_max_flow(g, s, t);
-
- std::cout << "c The total flow:" << std::endl;
- std::cout << "s " << flow << std::endl << std::endl;
-
- std::cout << "c flow values:" << std::endl;
- graph_traits<Graph>::vertex_iterator u_iter, u_end;
- graph_traits<Graph>::out_edge_iterator ei, e_end;
+ std::vector<default_color_type> color(num_vertices(g));
+ std::vector<long> distance(num_vertices(g));
+ long flow = kolmogorov_max_flow(g ,s, t);
+
+ std::cout << "c The total flow:" << std::endl;
+ std::cout << "s " << flow << std::endl << std::endl;
+
+ std::cout << "c flow values:" << std::endl;
+ graph_traits < Graph >::vertex_iterator u_iter, u_end;
+ graph_traits < Graph >::out_edge_iterator ei, e_end;
for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)
for (tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei)
if (capacity[*ei] > 0)
- std::cout << "f " << *u_iter << " " << target(*ei, g) << " "
- << (capacity[*ei] - residual_capacity[*ei]) << std::endl;
- return 0;
+ std::cout << "f " << *u_iter << " " << target(*ei, g) << " "
+ << (capacity[*ei] - residual_capacity[*ei]) << std::endl;
+
+ return EXIT_SUCCESS;
}</PRE><P>
The output is:
</P>
Modified: branches/release/libs/graph/doc/kruskal_min_spanning_tree.html
==============================================================================
--- branches/release/libs/graph/doc/kruskal_min_spanning_tree.html (original)
+++ branches/release/libs/graph/doc/kruskal_min_spanning_tree.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Kruskal Minimum Spanning Tree</Title>
@@ -106,7 +106,7 @@
<blockquote>
The weight or ``length'' of
each edge in the graph. The <tt>WeightMap</tt> type must be a model
- of <a href="../../property_map/ReadablePropertyMap.html">Readable
+ of <a href="../../property_map/doc/ReadablePropertyMap.html">Readable
Property Map</a> and its value type must be <a
href="http://www.sgi.com/tech/stl/LessThanComparable.html">Less Than
Comparable</a>. The key type of this map needs to be the graph's
@@ -120,12 +120,12 @@
<blockquote>
This is used by the disjoint sets data structure.
The type <tt>RankMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the graph needs to
be usable as the key type of the rank map. The value type of the
rank map must be an integer type.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the integers of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -140,11 +140,11 @@
used for storing predecessors in the spanning tree. The predecessors
of the spanning tree can be obtained from the spanning tree edges
output. The type <tt>PredecessorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The key type value types of the predecessor map
must be the vertex descriptor type of the graph. <br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of vertex descriptors of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -159,7 +159,7 @@
num_vertices(g))</tt>. This is only necessary if the default is used
for the rank or predecessor maps. The type <tt>VertexIndexMap</tt>
must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -191,7 +191,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/layout_tolerance.html
==============================================================================
--- branches/release/libs/graph/doc/layout_tolerance.html (original)
+++ branches/release/libs/graph/doc/layout_tolerance.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,9 +1,9 @@
<html><!--
- -- Copyright (c) 2004 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2004 Trustees of Indiana University
+
+ 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)
-->
<head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Struct template layout_tolerance</title></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table cellpadding="2" width="100%"><td valign="top"><img src="../../../boost.png" alt="boost.png (6897 bytes)" width="277" height="86"></td><td align="center">Home</td><td align="center">Libraries</td><td align="center">People</td><td align="center">FAQ</td><td align="center">More</td></table><hr><div class="refentry" lang="en"><a name="struct.boost.layout_tolerance"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2><span class="refentrytitle">Struct template layout_tolerance</span></h2><p>boost::layout_tolerance — Determines when to terminate layout of a
particular graph based on a given relative tolerance. </p></div><h2 xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv-title">Synopsis</h2><div xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv"><pre class="synopsis"><span class="bold"><b>template</b></span><<span class="bold"><b>typename</b></span> T = double>
<span class="bold"><b>struct</b></span> layout_tolerance {
Modified: branches/release/libs/graph/doc/leda_conversion.html
==============================================================================
--- branches/release/libs/graph/doc/leda_conversion.html (original)
+++ branches/release/libs/graph/doc/leda_conversion.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Converting Existing Graphs to BGL</Title>
@@ -249,7 +249,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/lengauer_tarjan_dominator.htm
==============================================================================
--- branches/release/libs/graph/doc/lengauer_tarjan_dominator.htm (original)
+++ branches/release/libs/graph/doc/lengauer_tarjan_dominator.htm 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,14 +1,10 @@
<HTML>
<!--
- -- Copyright (c) JongSoo Park 2005
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. Jeremy Siek makes no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
+ Copyright (c) JongSoo Park 2005
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Lengauer-Tarjan Dominator Tree Algorithm</Title>
@@ -137,19 +133,19 @@
This maps each vertex to an integer in the range <tt>[0, num_vertices(g))</tt>.
The type
<tt>VertexIndexMap</tt> must be a model of
- Readable Property Map. The value type of the map must be an
+ Readable Property Map. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.
</blockquote>
IN/OUT: <tt>TimeMap dfnumMap</tt>
<blockquote>
- The sequence number of depth first search. The type <tt>TimeMap</tt> must be a model of Read/Write Property Map. The vertex descriptor type of the graph needs to be usable as the key type of the <tt>TimeMap</tt>.
+ The sequence number of depth first search. The type <tt>TimeMap</tt> must be a model of Read/Write Property Map. The vertex descriptor type of the graph needs to be usable as the key type of the <tt>TimeMap</tt>.
</blockquote>
IN/OUT: <tt>PredMap parentMap</tt>
<blockquote>
- The predecessor map records the parent of the depth first search tree. The <tt>PredMap</tt> type must be a Read/Write Property Map whose key and value types are the same as the vertex descriptor type of the graph.
+ The predecessor map records the parent of the depth first search tree. The <tt>PredMap</tt> type must be a Read/Write Property Map whose key and value types are the same as the vertex descriptor type of the graph.
</blockquote>
IN/OUT: <tt>VertexVector verticesByDFNum</tt>
Modified: branches/release/libs/graph/doc/make_biconnected_planar.html
==============================================================================
--- branches/release/libs/graph/doc/make_biconnected_planar.html (original)
+++ branches/release/libs/graph/doc/make_biconnected_planar.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<Head>
<Title>Boost Graph Library: make_biconnected_planar</Title>
@@ -77,7 +77,7 @@
IN: <tt>EdgeIndexMap vm</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps edges from <tt>g</tt> to distinct integers in the range
<tt>[0, num_edges(g) )</tt><br>
<b>Default</b>: <tt>get(edge_index,g)</tt><br>
@@ -111,7 +111,7 @@
<br>
<HR>
-Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
</BODY>
</HTML>
Modified: branches/release/libs/graph/doc/make_connected.html
==============================================================================
--- branches/release/libs/graph/doc/make_connected.html (original)
+++ branches/release/libs/graph/doc/make_connected.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<Head>
<Title>Boost Graph Library: make_connected</Title>
@@ -74,7 +74,7 @@
IN: <tt>VertexIndexMap vm</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps vertices from <tt>g</tt> to distinct integers in the range
<tt>[0, num_vertices(g) )</tt><br>
<b>Default</b>: <tt>get(vertex_index,g)</tt><br>
@@ -110,7 +110,7 @@
<br>
<HR>
-Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
</BODY>
</HTML>
Modified: branches/release/libs/graph/doc/make_maximal_planar.html
==============================================================================
--- branches/release/libs/graph/doc/make_maximal_planar.html (original)
+++ branches/release/libs/graph/doc/make_maximal_planar.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<Head>
<Title>Boost Graph Library: make_maximal_planar</Title>
@@ -72,7 +72,7 @@
IN: <tt>PlanarEmbedding embedding</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that models the PlanarEmbedding
concept.
</blockquote>
@@ -80,7 +80,7 @@
IN: <tt>VertexIndexMap vm</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps vertices from <tt>g</tt> to distinct integers in the range
<tt>[0, num_vertices(g) )</tt><br>
<b>Default</b>: <tt>get(vertex_index,g)</tt><br>
@@ -89,7 +89,7 @@
IN: <tt>EdgeIndexMap vm</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps edges from <tt>g</tt> to distinct integers in the range
<tt>[0, num_edges(g) )</tt><br>
<b>Default</b>: <tt>get(edge_index,g)</tt><br>
@@ -122,7 +122,7 @@
<br>
<HR>
-Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
</BODY>
</HTML>
Modified: branches/release/libs/graph/doc/maximum_matching.html
==============================================================================
--- branches/release/libs/graph/doc/maximum_matching.html (original)
+++ branches/release/libs/graph/doc/maximum_matching.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,11 +1,11 @@
<html><head><!--
- -- Copyright 2005 Aaron Windsor
- --
- -- Use, modification and distribution is subject to 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)
- --
- -- Author: Aaron Windsor
+ Copyright 2005 Aaron Windsor
+
+ Use, modification and distribution is subject to 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)
+
+ Author: Aaron Windsor
--><title>Boost Graph Library: Maximum Cardinality Matching</title></head>
<body alink="#ff0000" bgcolor="#ffffff" link="#0000ee" text="#000000" vlink="#551a8b">
<img src="../../../boost.png" alt="C++ Boost" height="86" width="277">
@@ -50,7 +50,7 @@
<tt>checked_edmonds_maximum_cardinality_matching</tt> find the
maximum cardinality matching in any undirected graph. The matching is returned in a
<tt>MateMap</tt>, which is a
-ReadWritePropertyMap
+ReadWritePropertyMap
that maps vertices to vertices. In the mapping returned, each vertex is either mapped
to the vertex it's matched to, or to <tt>graph_traits<Graph>::null_vertex()</tt> if it
doesn't participate in the matching. If no <tt>VertexIndexMap</tt> is provided, both functions
@@ -238,12 +238,12 @@
IN: <tt>VertexIndexMap vm</tt>
<blockquote>
-Must be a model of ReadablePropertyMap, mapping vertices to integer indices.
+Must be a model of ReadablePropertyMap, mapping vertices to integer indices.
</blockquote>
OUT: <tt>MateMap mate</tt>
<blockquote>
-Must be a model of ReadWritePropertyMap, mapping
+Must be a model of ReadWritePropertyMap, mapping
vertices to vertices. For any vertex v in the graph, <tt>get(mate,v)</tt> will be the vertex that v is matched to, or
<tt>graph_traits<Graph>::null_vertex()</tt> if v isn't matched.
</blockquote>
Modified: branches/release/libs/graph/doc/metric_tsp_approx.html
==============================================================================
--- branches/release/libs/graph/doc/metric_tsp_approx.html (original)
+++ branches/release/libs/graph/doc/metric_tsp_approx.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Matyas Egyhazy 2008
- --
- -- 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)
+ Copyright (c) Matyas Egyhazy 2008
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Metric Traveling Salesperson Approximation</Title>
@@ -125,7 +125,7 @@
<blockquote>
The weight of each edge in the graph.
The type <tt>WeightMap</tt> must be a model of
- Readable Property Map. The edge descriptor type of
+ Readable Property Map. The edge descriptor type of
the graph needs to be usable as the key type for the weight
map.<br>
<b>Default:</b> <tt>get(edge_weight, g)</tt><br>
@@ -137,7 +137,7 @@
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
<tt>VertexIndexMap</tt> must be a model of
- Readable Property Map. The value type of the map must be an
+ Readable Property Map. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt>
@@ -176,7 +176,7 @@
<P>
The file <a
-href="../test/metric_tsp_approx_example.cpp"><TT>test/metric_tsp_approx_example.cpp</TT></a>
+href="../test/metric_tsp_approx.cpp"><TT>test/metric_tsp_approx.cpp</TT></a>
contains an example of using this TSP approximation algorithm.
@@ -196,7 +196,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2008</TD><TD>
+<TD nowrap>Copyright © 2008</TD><TD>
Matyas Egyhazy
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/minimum_degree_ordering.html
==============================================================================
--- branches/release/libs/graph/doc/minimum_degree_ordering.html (original)
+++ branches/release/libs/graph/doc/minimum_degree_ordering.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Lie-Quan Lee and Jeremy Siek, 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)
+ Copyright (c) Lie-Quan Lee and Jeremy Siek, 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)
-->
<Head>
<Title>Boost Graph Library: Minimum Degree Ordering</Title>
@@ -92,7 +92,7 @@
<li> <tt>OutDegreeMap outdegree</tt>  (WORK) <br>
This is used internally to store the out degree of vertices. This
- must be a <a href="../../property_map/LvaluePropertyMap.html">
+ must be a <a href="../../property_map/doc/LvaluePropertyMap.html">
LvaluePropertyMap</a> with key type the same as the vertex
descriptor type of the graph, and with a value type that is an
integer type.
@@ -100,19 +100,19 @@
<li> <tt>InversePermutationMap inverse_perm</tt>  (OUT) <br>
The new vertex ordering, given as the mapping from the
new indices to the old indices (an inverse permutation).
- This must be an <a href="../../property_map/LvaluePropertyMap.html">
+ This must be an <a href="../../property_map/doc/LvaluePropertyMap.html">
LvaluePropertyMap</a> with a value type and key type a signed integer.
<li> <tt>PermutationMap perm</tt>  (OUT) <br>
The new vertex ordering, given as the mapping from the
old indices to the new indices (a permutation).
- This must be an <a href="../../property_map/LvaluePropertyMap.html">
+ This must be an <a href="../../property_map/doc/LvaluePropertyMap.html">
LvaluePropertyMap</a> with a value type and key type a signed integer.
<li> <tt>SuperNodeSizeMap supernode_size</tt>  (WORK/OUT) <br>
This is used internally to record the size of supernodes and is also
useful information to have. This is a <a
- href="../../property_map/LvaluePropertyMap.html">
+ href="../../property_map/doc/LvaluePropertyMap.html">
LvaluePropertyMap</a> with an unsigned integer value type and key
type of vertex descriptor.
@@ -124,7 +124,7 @@
<li> <tt>VertexIndexMap id</tt>  (IN) <br>
Used internally to map vertices to their indices. This must be a <a
- href="../../property_map/ReadablePropertyMap.html"> Readable
+ href="../../property_map/doc/ReadablePropertyMap.html"> Readable
Property Map</a> with key type the same as the vertex descriptor of
the graph and a value type that is some unsigned integer type.
@@ -169,7 +169,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2001</TD><TD>
+<TD nowrap>Copyright © 2001</TD><TD>
<A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Indiana University (<A HREF="mailto:llee_at_[hidden]">llee_at_[hidden]</A>) <br>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/null_visitor.html
==============================================================================
--- branches/release/libs/graph/doc/null_visitor.html (original)
+++ branches/release/libs/graph/doc/null_visitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: null_visitor</Title>
@@ -80,7 +80,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/opposite.html
==============================================================================
--- branches/release/libs/graph/doc/opposite.html (original)
+++ branches/release/libs/graph/doc/opposite.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: opposite</Title>
@@ -65,7 +65,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/planar_canonical_ordering.html
==============================================================================
--- branches/release/libs/graph/doc/planar_canonical_ordering.html (original)
+++ branches/release/libs/graph/doc/planar_canonical_ordering.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,9 +1,9 @@
<html><head><!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
--><title>Boost Graph Library: Planar Canonical Ordering</title>
</head>
<body alink="#ff0000"
@@ -101,7 +101,7 @@
IN: <tt>VertexIndexMap vm</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps vertices from <tt>g</tt> to distinct integers in the range
<tt>[0, num_vertices(g) )</tt><br>
<b>Default</b>: <tt>get(vertex_index,g)</tt><br>
@@ -123,4 +123,4 @@
Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
-</body></html>
\ No newline at end of file
+</body></html>
Modified: branches/release/libs/graph/doc/planar_face_traversal.html
==============================================================================
--- branches/release/libs/graph/doc/planar_face_traversal.html (original)
+++ branches/release/libs/graph/doc/planar_face_traversal.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<Head>
<Title>Boost Graph Library: Planar Face Traversal</Title>
@@ -173,7 +173,7 @@
IN: <tt>EdgeIndexMap vm</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps edges from <tt>g</tt> to distinct integers in the range
<tt>[0, num_edges(g) )</tt><br>
<b>Default</b>: <tt>get(edge_index,g)</tt><br>
@@ -196,7 +196,7 @@
<br>
<HR>
-Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
</BODY>
</HTML>
Modified: branches/release/libs/graph/doc/planar_graphs.html
==============================================================================
--- branches/release/libs/graph/doc/planar_graphs.html (original)
+++ branches/release/libs/graph/doc/planar_graphs.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<HEAD>
<TITLE>Boost Graph Library: Planar Graphs</TITLE>
@@ -119,7 +119,7 @@
models PlanarEmbedding can be passed into the planarity test and populated if
the input graph is planar. All other "back end" planar graph algorithms accept
this populated PlanarEmbedding as an input. Conceptually, a type that models
-PlanarEmbedding is a <a href="../../property_map/property_map.html">property
+PlanarEmbedding is a <a href="../../property_map/doc/property_map.html">property
map</a> that maps each vertex to a sequence of edges,
where the sequence of edges has a similar interface to a standard C++
container. The sequence of edges each vertex maps to represents the ordering
@@ -270,7 +270,7 @@
<br>
<HR>
-Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
</BODY>
</HTML>
Modified: branches/release/libs/graph/doc/plod_generator.html
==============================================================================
--- branches/release/libs/graph/doc/plod_generator.html (original)
+++ branches/release/libs/graph/doc/plod_generator.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,13 +1,13 @@
<HTML>
<!--
- -- Copyright (c) The Trustees of Indiana University
- --
- -- Use, modification and distribution is subject to 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)
- --
- -- Authors: Douglas Gregor
- -- Andrew Lumsdaine
+ Copyright (c) The Trustees of Indiana University
+
+ Use, modification and distribution is subject to 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)
+
+ Authors: Douglas Gregor
+ Andrew Lumsdaine
-->
<Head>
<Title>Boost Graph Library: Power Law Out Degree (PLOD) Generator</Title>
@@ -129,7 +129,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2005</TD><TD>
+<TD nowrap>Copyright © 2005</TD><TD>
<A HREF="http://www.boost.org/people/doug_gregor.html">Doug Gregor</A>, Indiana University (<script language="Javascript">address("cs.indiana.edu", "dgregor")</script>)<br>
<A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>,
Indiana University (<script language="Javascript">address("osl.iu.edu", "lums")</script>)
Modified: branches/release/libs/graph/doc/predecessor_recorder.html
==============================================================================
--- branches/release/libs/graph/doc/predecessor_recorder.html (original)
+++ branches/release/libs/graph/doc/predecessor_recorder.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: predecessor_recorder</Title>
@@ -74,7 +74,7 @@
<TR><TD><TT>PredecessorMap</TT></TD>
<TD>
A <a
-href="../../property_map/WritablePropertyMap.html">WritablePropertyMap</a>,
+href="../../property_map/doc/WritablePropertyMap.html">WritablePropertyMap</a>,
where the key type and the value type are the vertex descriptor type
of the graph.
</TD>
@@ -172,7 +172,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/prim_minimum_spanning_tree.html
==============================================================================
--- branches/release/libs/graph/doc/prim_minimum_spanning_tree.html (original)
+++ branches/release/libs/graph/doc/prim_minimum_spanning_tree.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Prim Minimum Spanning Tree</Title>
@@ -144,7 +144,7 @@
tree. If <i>p[u] = u</i> then <i>u</i> is either the root of the
tree or is a vertex that is not reachable from the root.
The <tt>PredecessorMap</tt> type must be a <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>
with key and vertex types the same as the vertex descriptor type
of the graph.<br>
@@ -165,7 +165,7 @@
<blockquote>
The weight or ``length'' of each edge in the graph.
The type <tt>WeightMap</tt> must be a model of
- Readable Property Map. The edge descriptor type of
+ Readable Property Map. The edge descriptor type of
the graph needs to be usable as the key type for the weight
map. The value type for the map must be
<i>Addable</i> with the value type of the distance map.<br>
@@ -180,7 +180,7 @@
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
<tt>VertexIndexMap</tt> must be a model of
- Readable Property Map. The value type of the map must be an
+ Readable Property Map. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt>
@@ -199,13 +199,13 @@
shortest path weight is the sum of the edge weights along the
shortest path. The type <tt>DistanceMap</tt> must be a model of
<a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the
graph needs to be usable as the key type of the distance map. The
value type of the distance map must be <a
href="http://www.sgi.com/tech/stl/LessThanComparable.html">Less Than
Comparable</a>.<br>
- <b>Default:</b> <a href="../../property_map/iterator_property_map.html">
+ <b>Default:</b> <a href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>WeightMap</tt>'s value type of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -222,12 +222,12 @@
from the queue. At the end of the algorithm, vertices reachable from
the source vertex will have been colored black. All other vertices
will still be white. The type <tt>ColorMap</tt> must be a model of
- <a href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ <a href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a>. A vertex descriptor must be usable as the key type
of the map, and the value type of the map must be a model of
<a href="./ColorValue.html">Color Value</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a <tt>std::vector</tt>
of <tt>default_color_type</tt> of size <tt>num_vertices(g)</tt> and
using the <tt>i_map</tt> for the index map.<br>
@@ -280,7 +280,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/property.html
==============================================================================
--- branches/release/libs/graph/doc/property.html (original)
+++ branches/release/libs/graph/doc/property.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Property</Title>
Modified: branches/release/libs/graph/doc/property_map.html
==============================================================================
--- branches/release/libs/graph/doc/property_map.html (original)
+++ branches/release/libs/graph/doc/property_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Property Map Traits</Title>
@@ -24,7 +24,7 @@
</H1>
This is the traits class that produces the type for a <a
-href="../../property_map/property_map.html">property map</a> object
+href="../../property_map/doc/property_map.html">property map</a> object
for a particular graph type. The property is specified by the <a
href="./PropertyTag.html">PropertyTag</a> template parameter. Graph classes
must specialize this traits class to provide their own implementation
@@ -53,7 +53,7 @@
The (mutable) property map type for mapping vertex or edge desriptors of
the graph to their associated property values, where the property is
specified by <tt>PropertyTag</tt>. This type is a <a
-href="../../property_map/property_map.html">property map</a>.
+href="../../property_map/doc/property_map.html">property map</a>.
</tr>
<tr>
@@ -63,7 +63,7 @@
The (non-mutable) property map type for mapping vertex or edge
desriptors of the graph to their associated property values, where the
property is specified by <tt>PropertyTag</tt>. This type is a <a
-href="../../property_map/property_map.html">property map</a>.
+href="../../property_map/doc/property_map.html">property map</a>.
</tr>
</table>
@@ -72,7 +72,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/property_writer.html
==============================================================================
--- branches/release/libs/graph/doc/property_writer.html (original)
+++ branches/release/libs/graph/doc/property_writer.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: property_writer</Title>
@@ -74,7 +74,7 @@
<TR><TD><TT>PropertyMap</TT></TD>
<TD>
A <a
-href="../../property_map/ReadablePropertyMap.html">ReadablePropertyMap</a>,
+href="../../property_map/doc/ReadablePropertyMap.html">ReadablePropertyMap</a>,
where the <tt>key_type</tt> is the vertex descriptor type or edge
descriptor of the graph (depending on the kind of event tag), and
the <tt>value_type</tt> of the property is convertible
@@ -183,7 +183,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/publications.html
==============================================================================
--- branches/release/libs/graph/doc/publications.html (original)
+++ branches/release/libs/graph/doc/publications.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Publications</Title>
@@ -32,7 +32,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/push_relabel_max_flow.html
==============================================================================
--- branches/release/libs/graph/doc/push_relabel_max_flow.html (original)
+++ branches/release/libs/graph/doc/push_relabel_max_flow.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Push-Relabel Maximum Flow</Title>
@@ -108,7 +108,7 @@
<blockquote>
The edge capacity property map. The type must be a model of a
constant <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property Map</a>. The
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property Map</a>. The
key type of the map must be the graph's edge descriptor type.<br>
<b>Default:</b> <tt>get(edge_capacity, g)</tt>
</blockquote>
@@ -117,7 +117,7 @@
<blockquote>
The edge residual capacity property map. The type must be a model of
a mutable <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property Map</a>. The
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property Map</a>. The
key type of the map must be the graph's edge descriptor type.<br>
<b>Default:</b> <tt>get(edge_residual_capacity, g)</tt>
</blockquote>
@@ -127,7 +127,7 @@
An edge property map that maps every edge <i>(u,v)</i> in the graph
to the reverse edge <i>(v,u)</i>. The map must be a model of
constant <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property Map</a>. The
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property Map</a>. The
key type of the map must be the graph's edge descriptor type.<br>
<b>Default:</b> <tt>get(edge_reverse, g)</tt>
</blockquote>
@@ -136,7 +136,7 @@
<blockquote>
Maps each vertex of the graph to a unique integer in the range
<tt>[0, num_vertices(g))</tt>. The map must be a model of constant <a
- href="../../property_map/LvaluePropertyMap.html">LvaluePropertyMap</a>. The
+ href="../../property_map/doc/LvaluePropertyMap.html">LvaluePropertyMap</a>. The
key type of the map must be the graph's vertex descriptor type.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt>
Note: if you use this default, make sure your graph has
@@ -232,7 +232,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/python.html
==============================================================================
--- branches/release/libs/graph/doc/python.html (original)
+++ branches/release/libs/graph/doc/python.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<html>
<!--
- -- Copyright (c) 2005 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2005 Trustees of Indiana University
+
+ 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)
-->
<head>
<title>Boost Graph Library: Python Bindings (Experimental)</title>
Modified: branches/release/libs/graph/doc/quick_tour.html
==============================================================================
--- branches/release/libs/graph/doc/quick_tour.html (original)
+++ branches/release/libs/graph/doc/quick_tour.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,11 +1,11 @@
<html>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<head>
@@ -502,7 +502,7 @@
algorithm, the visitor we create must be a Dijkstra Visitor.
<p>The functionality of the <tt>record_predecessors</tt> visitor is separated
into two parts. For the storage and access of the predecessor property, we will
-use a property map. The
+use a property map. The
predecessor visitor will then only be responsible for what parent to record. To
implement this, we create a <tt>record_predecessors</tt> class and template it
on the predecessor property map <tt>PredecessorMap</tt>. Since this visitor will
Modified: branches/release/libs/graph/doc/r_c_shortest_paths.html
==============================================================================
--- branches/release/libs/graph/doc/r_c_shortest_paths.html (original)
+++ branches/release/libs/graph/doc/r_c_shortest_paths.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,14 +1,10 @@
<html>
<!--
- -- Copyright (c) Michael Drexl 2006
- --
- -- Permission to use, copy, modify, and distribute this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. Michael Drexl makes no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
+ Copyright Michael Drexl 2006, 2007.
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://boost.org/LICENSE_1_0.txt)
-->
<head>
<title>Boost Graph Library: Resource-Constrained Shortest Paths</title>
@@ -424,11 +420,11 @@
</blockquote>
IN: <tt>const VertexIndexMap& vertex_index_map</tt>
<blockquote>
-A ReadablePropertyMap mapping vertex descriptors to integers in [0, <tt>num_vertices(g)</tt>).
+A ReadablePropertyMap mapping vertex descriptors to integers in [0, <tt>num_vertices(g)</tt>).
</blockquote>
IN: <tt>const EdgeIndexMap& edge_index_map</tt>
<blockquote>
-A ReadablePropertyMap mapping edge descriptors to integers in [0, <tt>num_edges(g)</tt>).
+A ReadablePropertyMap mapping edge descriptors to integers in [0, <tt>num_edges(g)</tt>).
</blockquote>
IN: <tt>typename graph_traits<Graph>::vertex_descriptor s</tt>
<blockquote>
@@ -567,7 +563,7 @@
<table>
<tr valign=top>
<td
-nowrap>Copyright © 2006</td>
+nowrap>Copyright © 2006</td>
<td>
Michael Drexl (michaeldrexl at web dot de)
</td></tr></table>
Modified: branches/release/libs/graph/doc/random.html
==============================================================================
--- branches/release/libs/graph/doc/random.html (original)
+++ branches/release/libs/graph/doc/random.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<html>
<!--
- -- Copyright (c) 2003 Vladimir Prus
- --
- -- 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)
+ Copyright (c) 2003 Vladimir Prus
+
+ 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)
-->
<head>
<title>Boost Graph Library: random</title>
Modified: branches/release/libs/graph/doc/random_layout.html
==============================================================================
--- branches/release/libs/graph/doc/random_layout.html (original)
+++ branches/release/libs/graph/doc/random_layout.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) 2005 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2005 Trustees of Indiana University
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Random Graph Layout</Title>
@@ -51,7 +51,7 @@
<blockquote>
The property map that stores the position of each vertex. The type
<tt>PositionMap</tt> must be a model of <a
- href="../../property_map/LvaluePropertyMap.html">Lvalue Property
+ href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map</a> such that the vertex descriptor type of <tt>Graph</tt> is
convertible to its key type. Its value type must be a structure with
fields <tt>x</tt> and <tt>y</tt>, representing the coordinates of
Modified: branches/release/libs/graph/doc/read_dimacs.html
==============================================================================
--- branches/release/libs/graph/doc/read_dimacs.html (original)
+++ branches/release/libs/graph/doc/read_dimacs.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -73,12 +73,12 @@
OUT: <tt>CapacityMap capacity</tt>
<blockquote>
- A property map that models mutable Lvalue Property Map whose key type is the edge descriptor of the graph. <br>
+ A property map that models mutable Lvalue Property Map whose key type is the edge descriptor of the graph. <br>
</blockquote>
OUT: <tt>ReverseEdgeMap reverse_edge</tt>
<blockquote>
- A property map that models mutable Lvalue Property Map whose key and value type is the edge descriptor of the graph. This map stores the corresponding reverse edge for each each in Graph g.<br>
+ A property map that models mutable Lvalue Property Map whose key and value type is the edge descriptor of the graph. This map stores the corresponding reverse edge for each each in Graph g.<br>
</blockquote>
IN: <tt>std::istream& in</tt>
Modified: branches/release/libs/graph/doc/read_graphml.html
==============================================================================
--- branches/release/libs/graph/doc/read_graphml.html (original)
+++ branches/release/libs/graph/doc/read_graphml.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -3,60 +3,68 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.3.3: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
<title>Boost read_graphml</title>
-<link rel="stylesheet" href="default.css" type="text/css" />
+<link rel="stylesheet" href="../../rst.css" type="text/css" />
</head>
<body>
-<h1 class="title"><a class="reference" href="../../../index.htm"><img align="middle" alt="Boost" src="../../../boost.png" /></a> <tt class="literal"><span class="pre">read_graphml</span></tt></h1>
<div class="document" id="logo-read-graphml">
+<h1 class="title"><a class="reference external" href="../../../index.htm"><img align="middle" alt="Boost" class="align-middle" src="../../../boost.png" /></a> <tt class="docutils literal"><span class="pre">read_graphml</span></tt></h1>
+
+<!-- Copyright (C) 2006 Tiago de Paula Peixoto <tiago_at_[hidden]>
+
+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)
+
+Authors: Tiago de Paula Peixoto -->
<pre class="literal-block">
void read_graphml(std::istream& in, MutableGraph& graph,
dynamic_properties& dp);
</pre>
-<p>The <tt class="literal"><span class="pre">read_graphml</span></tt> function interprets a graph described using the
-<a class="reference" href="http://graphml.graphdrawing.org/">graphml</a> format and builds a BGL graph that captures that
+<p>The <tt class="docutils literal"><span class="pre">read_graphml</span></tt> function interprets a graph described using the
+<a class="reference external" href="http://graphml.graphdrawing.org/">GraphML</a> format and builds a BGL graph that captures that
description. Using this function, you can initialize a graph using
data stored as text.</p>
-<p>The graphml format can specify both directed and undirected graphs, and
-<tt class="literal"><span class="pre">read_graphml</span></tt> differentiates between the two. One must pass
-<tt class="literal"><span class="pre">read_graphml</span></tt> an undirected graph when reading an undirected graph;
-the same is true for directed graphs. Furthermore, <tt class="literal"><span class="pre">read_graphml</span></tt>
+<p>The GraphML format can specify both directed and undirected graphs, and
+<tt class="docutils literal"><span class="pre">read_graphml</span></tt> differentiates between the two. One must pass
+<tt class="docutils literal"><span class="pre">read_graphml</span></tt> an undirected graph when reading an undirected graph;
+the same is true for directed graphs. Furthermore, <tt class="docutils literal"><span class="pre">read_graphml</span></tt>
will throw an exception if it encounters parallel edges and cannot add
them to the graph.</p>
-<p>To handle attributes expressed in the graphml format, <tt class="literal"><span class="pre">read_graphml</span></tt>
-takes a <a class="reference" href="../../property_map/doc/dynamic_property_map.html">dynamic_properties</a> object and operates on its collection of
+<p>To handle attributes expressed in the GraphML format, <tt class="docutils literal"><span class="pre">read_graphml</span></tt>
+takes a <a class="reference external" href="../../property_map/doc/dynamic_property_map.html">dynamic_properties</a> object and operates on its collection of
property maps. The reader passes all the properties encountered to
-this object, using the graphml attribute names as the property keys,
-and with the appropriate C++ type based on the graphml attribute type
-definition.</p>
-<dl>
+this object, using the GraphML attribute names as the property names,
+and with the appropriate C++ value type based on the GraphML attribute type
+definition. Graph properties are also set with the same
+<a class="reference external" href="../../property_map/doc/dynamic_property_map.html">dynamic_properties</a> object, where the key type is the type of the graph itself.</p>
+<dl class="docutils">
<dt>Requirements:</dt>
<dd><ul class="first last simple">
-<li>The type of the graph must model the <a class="reference" href="MutableGraph.html">Mutable Graph</a> concept.</li>
-<li>The type of the iterator must model the <a class="reference" href="../../iterator/index.html">Multi-Pass Iterator</a>
+<li>The type of the graph must model the <a class="reference external" href="MutableGraph.html">Mutable Graph</a> concept.</li>
+<li>The type of the iterator must model the <a class="reference external" href="../../iterator/index.html">Multi-Pass Iterator</a>
concept.</li>
<li>The property map value types must be default-constructible.</li>
</ul>
</dd>
</dl>
<div class="contents topic" id="contents">
-<p class="topic-title first"><a name="contents">Contents</a></p>
+<p class="topic-title first">Contents</p>
<ul class="simple">
-<li><a class="reference" href="#where-defined" id="id2" name="id2">Where Defined</a></li>
-<li><a class="reference" href="#exceptions" id="id3" name="id3">Exceptions</a></li>
-<li><a class="reference" href="#building-the-graphml-reader" id="id4" name="id4">Building the graphml reader</a></li>
-<li><a class="reference" href="#notes" id="id5" name="id5">Notes</a></li>
-<li><a class="reference" href="#see-also" id="id6" name="id6">See Also</a></li>
-<li><a class="reference" href="#future-work" id="id7" name="id7">Future Work</a></li>
+<li><a class="reference internal" href="#where-defined" id="id2">Where Defined</a></li>
+<li><a class="reference internal" href="#exceptions" id="id3">Exceptions</a></li>
+<li><a class="reference internal" href="#building-the-graphml-reader" id="id4">Building the GraphML reader</a></li>
+<li><a class="reference internal" href="#notes" id="id5">Notes</a></li>
+<li><a class="reference internal" href="#see-also" id="id6">See Also</a></li>
</ul>
</div>
<div class="section" id="where-defined">
-<h1><a class="toc-backref" href="#id2" name="where-defined">Where Defined</a></h1>
-<p><tt class="literal"><span class="pre"><boost/graph/graphml.hpp></span></tt></p>
+<h1><a class="toc-backref" href="#id2">Where Defined</a></h1>
+<p><tt class="docutils literal"><span class="pre"><boost/graph/graphml.hpp></span></tt></p>
</div>
<div class="section" id="exceptions">
-<h1><a class="toc-backref" href="#id3" name="exceptions">Exceptions</a></h1>
+<h1><a class="toc-backref" href="#id3">Exceptions</a></h1>
<pre class="literal-block">
struct graph_exception : public std::exception {
virtual ~graph_exception() throw();
@@ -87,44 +95,46 @@
virtual ~parse_error() throw() {}
virtual const char* what() const throw();
std::string statement;
+ std::string error;
};
</pre>
-<p>Under certain circumstances, <tt class="literal"><span class="pre">read_graphml</span></tt> will throw one of the
+<p>Under certain circumstances, <tt class="docutils literal"><span class="pre">read_graphml</span></tt> will throw one of the
above exceptions. The three concrete exceptions can all be caught
-using the general <tt class="literal"><span class="pre">graph_exception</span></tt> moniker when greater precision
+using the general <tt class="docutils literal"><span class="pre">graph_exception</span></tt> moniker when greater precision
is not needed. In addition, all of the above exceptions derive from
-the standard <tt class="literal"><span class="pre">std::exception</span></tt> for even more generalized error
+the standard <tt class="docutils literal"><span class="pre">std::exception</span></tt> for even more generalized error
handling.</p>
-<p>The <tt class="literal"><span class="pre">bad_parallel_edge</span></tt> exception is thrown when an attempt to add a
-parallel edge to the supplied MutableGraph fails. The graphml format
+<p>The <tt class="docutils literal"><span class="pre">bad_parallel_edge</span></tt> exception is thrown when an attempt to add a
+parallel edge to the supplied MutableGraph fails. The GraphML format
supports parallel edges, but some BGL-compatible graph types do not.
-One example of such a graph is <tt class="literal"><span class="pre">boost::adjacency_list<setS,vecS></span></tt>,
+One example of such a graph is <tt class="docutils literal"><span class="pre">boost::adjacency_list<setS,vecS></span></tt>,
which allows at most one edge can between any two vertices.</p>
-<p>The <tt class="literal"><span class="pre">directed_graph_error</span></tt> exception occurs when an undirected graph
-type is passed to <tt class="literal"><span class="pre">read_graph</span></tt> but the textual representation of the
-graph is directed, as indicated by the <tt class="literal"><span class="pre">edgedefault="directed"</span></tt>
-graph attribute in the graphml format.</p>
-<p>The <tt class="literal"><span class="pre">undirected_graph_error</span></tt> exception occurs when a directed graph
-type is passed to <tt class="literal"><span class="pre">read_graph</span></tt> but the textual representation of the
-graph is undirected, as indicated by the <tt class="literal"><span class="pre">edgedefault="undirected"</span></tt>
-graph attribute in the graphml format.</p>
+<p>The <tt class="docutils literal"><span class="pre">directed_graph_error</span></tt> exception occurs when an undirected graph
+type is passed to <tt class="docutils literal"><span class="pre">read_graph</span></tt>, but the graph defined in the GraphML
+file contains at least one directed edge.</p>
+<p>The <tt class="docutils literal"><span class="pre">undirected_graph_error</span></tt> exception occurs when a directed graph
+type is passed to <tt class="docutils literal"><span class="pre">read_graph</span></tt>, but the graph defined in the GraphML
+file contains at least one undirected edge.</p>
+<p>The <tt class="docutils literal"><span class="pre">parse_error</span></tt> exception occurs when a syntax error is
+encountered in the GraphML file. The error string will contain the
+line and column where the error was encountered.</p>
</div>
<div class="section" id="building-the-graphml-reader">
-<h1><a class="toc-backref" href="#id4" name="building-the-graphml-reader">Building the graphml reader</a></h1>
-<p>To use the graphml reader, you will need to build and link against
-the "bgl-graphml" library. The library can be built by following the
-<a class="reference" href="../../../doc/html/bbv2/installation.html">Boost Jam Build Instructions</a> for the subdirectory <tt class="literal"><span class="pre">libs/graph/build</span></tt>.</p>
+<h1><a class="toc-backref" href="#id4">Building the GraphML reader</a></h1>
+<p>To use the GraphML reader, you will need to build and link against
+the "boost_graph" library. The library can be built by following the
+<a class="reference external" href="../../../more/getting_started.html#Build_Install">Boost Jam Build Instructions</a> for the subdirectory <tt class="docutils literal"><span class="pre">libs/graph/build</span></tt>.</p>
</div>
<div class="section" id="notes">
-<h1><a class="toc-backref" href="#id5" name="notes">Notes</a></h1>
+<h1><a class="toc-backref" href="#id5">Notes</a></h1>
<blockquote>
<ul class="simple">
<li>On successful reading of a graph, every vertex and edge will have
an associated value for every respective edge and vertex property
encountered while interpreting the graph. These values will be set
-using the <tt class="literal"><span class="pre">dynamic_properties</span></tt> object. Some properties may be
-<tt class="literal"><span class="pre">put</span></tt> multiple times during the course of reading in order to
-ensure the graphml semantics. Those edges and vertices that are
+using the <tt class="docutils literal"><span class="pre">dynamic_properties</span></tt> object. Some properties may be
+<tt class="docutils literal"><span class="pre">put</span></tt> multiple times during the course of reading in order to
+ensure the GraphML semantics. Those edges and vertices that are
not explicitly given a value for a property (and that property has
no default) will be given the default constructed value of the
value type. <strong>Be sure that property map value types are default
@@ -140,22 +150,15 @@
</blockquote>
</div>
<div class="section" id="see-also">
-<h1><a class="toc-backref" href="#id6" name="see-also">See Also</a></h1>
-<p><a class="reference" href="write_graphml.html">write_graphml</a></p>
-</div>
-<div class="section" id="future-work">
-<h1><a class="toc-backref" href="#id7" name="future-work">Future Work</a></h1>
-<blockquote>
-<ul class="simple">
-<li>Better expat error detection.</li>
-</ul>
-</blockquote>
+<h1><a class="toc-backref" href="#id6">See Also</a></h1>
+<p><a class="reference external" href="write_graphml.html">write_graphml</a></p>
</div>
</div>
-<hr class="footer" />
<div class="footer">
-<a class="reference" href="read_graphml.rst">View document source</a>.
-Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
+<hr class="footer" />
+Generated on: 2009-06-08 13:57 UTC.
+Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
+
</div>
</body>
</html>
Modified: branches/release/libs/graph/doc/read_graphml.rst
==============================================================================
--- branches/release/libs/graph/doc/read_graphml.rst (original)
+++ branches/release/libs/graph/doc/read_graphml.rst 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -2,6 +2,14 @@
|(logo)|__ ``read_graphml``
============================
+.. Copyright (C) 2006 Tiago de Paula Peixoto <tiago_at_[hidden]>
+
+ 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)
+
+ Authors: Tiago de Paula Peixoto
+
.. |(logo)| image:: ../../../boost.png
:align: middle
:alt: Boost
@@ -15,23 +23,24 @@
The ``read_graphml`` function interprets a graph described using the
-graphml_ format and builds a BGL graph that captures that
+GraphML_ format and builds a BGL graph that captures that
description. Using this function, you can initialize a graph using
data stored as text.
-The graphml format can specify both directed and undirected graphs, and
+The GraphML format can specify both directed and undirected graphs, and
``read_graphml`` differentiates between the two. One must pass
``read_graphml`` an undirected graph when reading an undirected graph;
the same is true for directed graphs. Furthermore, ``read_graphml``
will throw an exception if it encounters parallel edges and cannot add
them to the graph.
-To handle attributes expressed in the graphml format, ``read_graphml``
+To handle attributes expressed in the GraphML format, ``read_graphml``
takes a dynamic_properties_ object and operates on its collection of
property maps. The reader passes all the properties encountered to
-this object, using the graphml attribute names as the property keys,
-and with the appropriate C++ type based on the graphml attribute type
-definition.
+this object, using the GraphML attribute names as the property names,
+and with the appropriate C++ value type based on the GraphML attribute type
+definition. Graph properties are also set with the same
+dynamic_properties_ object, where the key type is the type of the graph itself.
Requirements:
- The type of the graph must model the `Mutable Graph`_ concept.
@@ -80,6 +89,7 @@
virtual ~parse_error() throw() {}
virtual const char* what() const throw();
std::string statement;
+ std::string error;
};
Under certain circumstances, ``read_graphml`` will throw one of the
@@ -90,27 +100,29 @@
handling.
The ``bad_parallel_edge`` exception is thrown when an attempt to add a
-parallel edge to the supplied MutableGraph fails. The graphml format
+parallel edge to the supplied MutableGraph fails. The GraphML format
supports parallel edges, but some BGL-compatible graph types do not.
One example of such a graph is ``boost::adjacency_list<setS,vecS>``,
which allows at most one edge can between any two vertices.
The ``directed_graph_error`` exception occurs when an undirected graph
-type is passed to ``read_graph`` but the textual representation of the
-graph is directed, as indicated by the ``edgedefault="directed"``
-graph attribute in the graphml format.
+type is passed to ``read_graph``, but the graph defined in the GraphML
+file contains at least one directed edge.
The ``undirected_graph_error`` exception occurs when a directed graph
-type is passed to ``read_graph`` but the textual representation of the
-graph is undirected, as indicated by the ``edgedefault="undirected"``
-graph attribute in the graphml format.
+type is passed to ``read_graph``, but the graph defined in the GraphML
+file contains at least one undirected edge.
+The ``parse_error`` exception occurs when a syntax error is
+encountered in the GraphML file. The error string will contain the
+line and column where the error was encountered.
-Building the graphml reader
+
+Building the GraphML reader
-----------------------------
-To use the graphml reader, you will need to build and link against
-the "bgl-graphml" library. The library can be built by following the
+To use the GraphML reader, you will need to build and link against
+the "boost_graph" library. The library can be built by following the
`Boost Jam Build Instructions`_ for the subdirectory ``libs/graph/build``.
@@ -122,7 +134,7 @@
encountered while interpreting the graph. These values will be set
using the ``dynamic_properties`` object. Some properties may be
``put`` multiple times during the course of reading in order to
- ensure the graphml semantics. Those edges and vertices that are
+ ensure the GraphML semantics. Those edges and vertices that are
not explicitly given a value for a property (and that property has
no default) will be given the default constructed value of the
value type. **Be sure that property map value types are default
@@ -143,16 +155,9 @@
write_graphml_
-Future Work
------------
-
- - Better expat error detection.
-
-
-.. _Graphml: http://graphml.graphdrawing.org/
-
+.. _GraphML: http://graphml.graphdrawing.org/
.. _`Mutable Graph`: MutableGraph.html
.. _`Multi-Pass Iterator`: ../../iterator/index.html
.. _dynamic_properties: ../../property_map/doc/dynamic_property_map.html
.. _write_graphml: write_graphml.html
-.. _Boost Jam Build Instructions: ../../../more/getting_started.html#Build_Install
\ No newline at end of file
+.. _Boost Jam Build Instructions: ../../../more/getting_started.html#Build_Install
Modified: branches/release/libs/graph/doc/read_graphviz.html
==============================================================================
--- branches/release/libs/graph/doc/read_graphviz.html (original)
+++ branches/release/libs/graph/doc/read_graphviz.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,48 +1,44 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<!--
- -- Copyright (c) 2005 Trustees of Indiana University
- --
- -- 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)
- -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
<title>Boost read_graphviz</title>
-<link rel="stylesheet" href="default.css" type="text/css" />
+<link rel="stylesheet" href="../../rst.css" type="text/css" />
</head>
<body>
<div class="document" id="logo-read-graphviz">
-<h1 class="title"><a class="reference" href="../../../index.htm"><img align="middle" alt="Boost" src="../../../boost.png" /></a> <tt class="docutils literal"><span class="pre">read_graphviz</span></tt></h1>
+<h1 class="title"><a class="reference external" href="../../../index.htm"><img align="middle" alt="Boost" class="align-middle" src="../../../boost.png" /></a> <tt class="docutils literal"><span class="pre">read_graphviz</span></tt></h1>
+
+<!-- Copyright (c) 2005-2009 Trustees of Indiana University
+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) -->
<pre class="literal-block">
-template <typename MutableGraph>
-bool read_graphviz(std::istream& in, MutableGraph& graph,
- dynamic_properties& dp,
- const std::string& node_id = "node_id");
-
-// Only available if BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS is defined
-template <typename MultiPassIterator, typename MutableGraph>
-bool read_graphviz(MultiPassIterator begin, MultiPassIterator end,
- MutableGraph& graph, dynamic_properties& dp,
- const std::string& node_id = "node_id");
-
-// Deprecated GraphViz readers
-void read_graphviz(const std::string& file, GraphvizDigraph& g);
-void read_graphviz(FILE* file, GraphvizDigraph& g);
-void read_graphviz(const std::string& file, GraphvizGraph& g);
-void read_graphviz(FILE* file, GraphvizGraph& g);
+namespace boost {
+
+ template <typename MutableGraph>
+ bool read_graphviz(std::istream& in, MutableGraph& graph,
+ dynamic_properties& dp,
+ const std::string& node_id = "node_id");
+
+ template <typename MutableGraph>
+ bool read_graphviz(std::string& str, MutableGraph& graph,
+ dynamic_properties& dp,
+ const std::string& node_id = "node_id");
+
+ template <typename InputIterator, typename MutableGraph>
+ bool read_graphviz(InputIterator begin, InputIterator end,
+ MutableGraph& graph, dynamic_properties& dp,
+ const std::string& node_id = "node_id");
+
+}
</pre>
<p>The <tt class="docutils literal"><span class="pre">read_graphviz</span></tt> function interprets a graph described using the
-<a class="reference" href="http://graphviz.org/">GraphViz</a> DOT language and builds a BGL graph that captures that
-description. Using this function, you can initialize a graph using
-data stored as text. To use the iterator version of <tt class="docutils literal"><span class="pre">read_graphviz</span></tt>,
-you will need to define the macro BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
-before including the header <tt class="docutils literal"><span class="pre"><boost/graph/graphviz.hpp></span></tt>. Doing so
-may greatly increase the amount of time required to compile the
-GraphViz reader.</p>
+<a class="reference external" href="http://graphviz.org/">GraphViz</a> DOT language and builds a BGL graph that captures that
+description. Using these functions, you can initialize a graph using
+data stored as text.</p>
<p>The DOT language can specify both directed and undirected graphs, and
<tt class="docutils literal"><span class="pre">read_graphviz</span></tt> differentiates between the two. One must pass
<tt class="docutils literal"><span class="pre">read_graphviz</span></tt> an undirected graph when reading an undirected graph;
@@ -50,40 +46,39 @@
will throw an exception if it encounters parallel edges and cannot add
them to the graph.</p>
<p>To handle properties expressed in the DOT language, <tt class="docutils literal"><span class="pre">read_graphviz</span></tt>
-takes a <a class="reference" href="../../property_map/doc/dynamic_property_map.html">dynamic_properties</a> object and operates on its collection of
+takes a <a class="reference external" href="../../property_map/doc/dynamic_property_map.html">dynamic_properties</a> object and operates on its collection of
property maps. The reader passes all the properties encountered to
this object, using the GraphViz string keys as the property keys.
Furthermore, <tt class="docutils literal"><span class="pre">read_graphviz</span></tt> stores node identifier names under the
-vertex property map named node_id.</p>
+vertex property map named <tt class="docutils literal"><span class="pre">node_id</span></tt>.</p>
<dl class="docutils">
<dt>Requirements:</dt>
<dd><ul class="first last simple">
-<li>The type of the graph must model the <a class="reference" href="MutableGraph.html">Mutable Graph</a> concept.</li>
-<li>The type of the iterator must model the <a class="reference" href="../../iterator/index.html">Multi-Pass Iterator</a>
+<li>The type of the graph must model the <a class="reference external" href="MutableGraph.html">Mutable Graph</a> concept.</li>
+<li>The type of the iterator must model the <a class="reference external" href="http://www.sgi.com/tech/stl/InputIterator.html">Input Iterator</a>
concept.</li>
<li>The property map value types must be default-constructible.</li>
</ul>
</dd>
</dl>
<div class="contents topic" id="contents">
-<p class="topic-title first"><a name="contents">Contents</a></p>
+<p class="topic-title first">Contents</p>
<ul class="simple">
-<li><a class="reference" href="#where-defined" id="id2" name="id2">Where Defined</a></li>
-<li><a class="reference" href="#exceptions" id="id3" name="id3">Exceptions</a></li>
-<li><a class="reference" href="#example" id="id4" name="id4">Example</a></li>
-<li><a class="reference" href="#building-the-graphviz-readers" id="id5" name="id5">Building the GraphViz Readers</a></li>
-<li><a class="reference" href="#deprecated-readers" id="id6" name="id6">Deprecated Readers</a></li>
-<li><a class="reference" href="#notes" id="id7" name="id7">Notes</a></li>
-<li><a class="reference" href="#see-also" id="id8" name="id8">See Also</a></li>
-<li><a class="reference" href="#future-work" id="id9" name="id9">Future Work</a></li>
+<li><a class="reference internal" href="#where-defined" id="id2">Where Defined</a></li>
+<li><a class="reference internal" href="#exceptions" id="id3">Exceptions</a></li>
+<li><a class="reference internal" href="#example" id="id4">Example</a></li>
+<li><a class="reference internal" href="#building-the-graphviz-readers" id="id5">Building the GraphViz Readers</a></li>
+<li><a class="reference internal" href="#notes" id="id6">Notes</a></li>
+<li><a class="reference internal" href="#see-also" id="id7">See Also</a></li>
+<li><a class="reference internal" href="#future-work" id="id8">Future Work</a></li>
</ul>
</div>
<div class="section" id="where-defined">
-<h1><a class="toc-backref" href="#id2" name="where-defined">Where Defined</a></h1>
+<h1><a class="toc-backref" href="#id2">Where Defined</a></h1>
<p><tt class="docutils literal"><span class="pre"><boost/graph/graphviz.hpp></span></tt></p>
</div>
<div class="section" id="exceptions">
-<h1><a class="toc-backref" href="#id3" name="exceptions">Exceptions</a></h1>
+<h1><a class="toc-backref" href="#id3">Exceptions</a></h1>
<pre class="literal-block">
struct graph_exception : public std::exception {
virtual ~graph_exception() throw();
@@ -108,6 +103,14 @@
virtual ~undirected_graph_error() throw();
virtual const char* what() const throw();
};
+
+struct bad_graphviz_syntax: public graph_exception {
+ std::string errmsg;
+
+ bad_graphviz_syntax(const std::string&);
+ virtual ~bad_graphviz_syntax() throw();
+ virtual const char* what() const throw();
+};
</pre>
<p>Under certain circumstances, <tt class="docutils literal"><span class="pre">read_graphviz</span></tt> will throw one of the
above exceptions. The three concrete exceptions can all be caught
@@ -128,15 +131,17 @@
type is passed to <tt class="docutils literal"><span class="pre">read_graph</span></tt> but the textual representation of the
graph is undirected, as indicated by the <tt class="docutils literal"><span class="pre">graph</span></tt> keyword in the DOT
language.</p>
+<p>The <tt class="docutils literal"><span class="pre">bad_graphviz_syntax</span></tt> exception occurs when the graph input is not a
+valid GraphViz graph.</p>
</div>
<div class="section" id="example">
-<h1><a class="toc-backref" href="#id4" name="example">Example</a></h1>
+<h1><a class="toc-backref" href="#id4">Example</a></h1>
<p>The following example illustrates a relatively simple use of the
GraphViz reader to populate an <tt class="docutils literal"><span class="pre">adjacency_list</span></tt> graph</p>
<pre class="literal-block">
// Vertex properties
typedef property < vertex_name_t, std::string,
- property < vertex_color_t, float > > vertex_p;
+ property < vertex_color_t, float > > vertex_p;
// Edge properties
typedef property < edge_weight_t, double > edge_p;
// Graph properties
@@ -162,7 +167,7 @@
dp.property("weight",weight);
// Use ref_property_map to turn a graph property into a property map
-boost::ref_property_map<graph_t*,std::string>
+boost::ref_property_map<graph_t*,std::string>
gname(get_property(graph,graph_name));
dp.property("name",gname);
@@ -174,20 +179,13 @@
</pre>
</div>
<div class="section" id="building-the-graphviz-readers">
-<h1><a class="toc-backref" href="#id5" name="building-the-graphviz-readers">Building the GraphViz Readers</a></h1>
+<h1><a class="toc-backref" href="#id5">Building the GraphViz Readers</a></h1>
<p>To use the GraphViz readers, you will need to build and link against
the "boost_graph" library. The library can be built by following the
-<a class="reference" href="../../../doc/html/bbv2/installation.html">Boost Jam Build Instructions</a> for the subdirectory <tt class="docutils literal"><span class="pre">libs/graph/build</span></tt>.</p>
-</div>
-<div class="section" id="deprecated-readers">
-<h1><a class="toc-backref" href="#id6" name="deprecated-readers">Deprecated Readers</a></h1>
-<p>The deprecated readers do not provide exceptions on error (they
-abort), they require the use of one of the predefined graph types
-(<tt class="docutils literal"><span class="pre">GraphvizDigraph</span></tt> or <tt class="docutils literal"><span class="pre">GraphvizGraph</span></tt>), and they do not support
-arbitrary properties. They will be removed in a future Boost version.</p>
+<a class="reference external" href="../../../more/getting_started.html#Build_Install">Boost Jam Build Instructions</a> for the subdirectory <tt class="docutils literal"><span class="pre">libs/graph/build</span></tt>.</p>
</div>
<div class="section" id="notes">
-<h1><a class="toc-backref" href="#id7" name="notes">Notes</a></h1>
+<h1><a class="toc-backref" href="#id6">Notes</a></h1>
<blockquote>
<ul class="simple">
<li>The <tt class="docutils literal"><span class="pre">read_graphviz</span></tt> function does not use any code from the
@@ -196,43 +194,46 @@
site, as well as experiments run using the dot application. The
resulting interpretation may be subtly different from dot for some
corner cases that are not well specified.</li>
-<li><tt class="docutils literal"><span class="pre">read_graphviz</span></tt> treats subgraphs as syntactic sugar. It does not
-reflect subgraphs as actual entities in the BGL. Rather, they are
-used to shorten some edge definitions as well as to give a subset
-of all nodes or edges certain properties. For example, the
-DOT graphs <tt class="docutils literal"><span class="pre">digraph</span> <span class="pre">{</span> <span class="pre">a</span> <span class="pre">-></span> <span class="pre">subgraph</span> <span class="pre">{b</span> <span class="pre">-></span> <span class="pre">c}</span> <span class="pre">-></span> <span class="pre">e</span> <span class="pre">}</span></tt> and
-<tt class="docutils literal"><span class="pre">digraph</span> <span class="pre">{</span> <span class="pre">a</span> <span class="pre">-></span> <span class="pre">b</span> <span class="pre">-></span> <span class="pre">e</span> <span class="pre">;</span> <span class="pre">a</span> <span class="pre">-></span> <span class="pre">c</span> <span class="pre">-></span> <span class="pre">e</span> <span class="pre">;</span> <span class="pre">b</span> <span class="pre">-></span> <span class="pre">c}</span></tt> are equivalent.</li>
-<li>Subgraph IDs refer to subgraphs defined earlier in the graph
-description. Undefined subgraphs behave as empty subgraphs
-(<tt class="docutils literal"><span class="pre">{}</span></tt>).</li>
<li>On successful reading of a graph, every vertex and edge will have
an associated value for every respective edge and vertex property
encountered while interpreting the graph. These values will be set
-using the <tt class="docutils literal"><span class="pre">dynamic_properties</span></tt> object. Some properties may be
-<tt class="docutils literal"><span class="pre">put</span></tt> multiple times during the course of reading in order to
-ensure the same semantics as the GraphViz tools. Those edges and
+using the <tt class="docutils literal"><span class="pre">dynamic_properties</span></tt> object. Those edges and
vertices that are not explicitly given a value for a property (and that
property has no default) will be
given the default constructed value of the value type. <strong>Be sure
that property map value types are default constructible.</strong></li>
+<li><tt class="docutils literal"><span class="pre">read_graphviz</span></tt> treats subgraphs as syntactic sugar. It does not
+reflect subgraphs as actual entities in the BGL. Rather, they are
+used to shorten some edge definitions as well as to give a subset
+of all nodes or edges certain properties. For example, the
+DOT graphs <tt class="docutils literal"><span class="pre">digraph</span> <span class="pre">{</span> <span class="pre">a</span> <span class="pre">-></span> <span class="pre">subgraph</span> <span class="pre">{b</span> <span class="pre">-></span> <span class="pre">c}</span> <span class="pre">-></span> <span class="pre">e</span> <span class="pre">}</span></tt> and
+<tt class="docutils literal"><span class="pre">digraph</span> <span class="pre">{</span> <span class="pre">a</span> <span class="pre">-></span> <span class="pre">b</span> <span class="pre">-></span> <span class="pre">e</span> <span class="pre">;</span> <span class="pre">a</span> <span class="pre">-></span> <span class="pre">c</span> <span class="pre">-></span> <span class="pre">e</span> <span class="pre">;</span> <span class="pre">b</span> <span class="pre">-></span> <span class="pre">c}</span></tt> are equivalent.</li>
+<li>Subgraph IDs refer to subgraphs defined earlier in the graph
+description. Undefined subgraphs behave as empty subgraphs
+(<tt class="docutils literal"><span class="pre">{}</span></tt>). This is the same behavior as GraphViz.</li>
</ul>
</blockquote>
</div>
<div class="section" id="see-also">
-<h1><a class="toc-backref" href="#id8" name="see-also">See Also</a></h1>
-<p><a class="reference" href="write-graphviz.html">write_graphviz</a></p>
+<h1><a class="toc-backref" href="#id7">See Also</a></h1>
+<p><a class="reference external" href="write-graphviz.html">write_graphviz</a></p>
</div>
<div class="section" id="future-work">
-<h1><a class="toc-backref" href="#id9" name="future-work">Future Work</a></h1>
+<h1><a class="toc-backref" href="#id8">Future Work</a></h1>
<blockquote>
<ul class="simple">
-<li>The parser currently does not handle continuation lines as defined
-in the DOT Language. Some more sophisticated parsing of
-identifier(so-called "ID" in the source) is required to support this.</li>
+<li>Passing port information to BGL.</li>
+<li>Expanding escape codes in the same way GraphViz does.</li>
<li>Support for optional recognition of subgraphs as distinct entities.</li>
</ul>
</blockquote>
</div>
</div>
+<div class="footer">
+<hr class="footer" />
+Generated on: 2009-06-08 13:57 UTC.
+Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
+
+</div>
</body>
</html>
Modified: branches/release/libs/graph/doc/read_graphviz.rst
==============================================================================
--- branches/release/libs/graph/doc/read_graphviz.rst (original)
+++ branches/release/libs/graph/doc/read_graphviz.rst 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -6,7 +6,7 @@
:align: middle
:alt: Boost
-.. Copyright (c) 2005 Trustees of Indiana University
+.. Copyright (c) 2005-2009 Trustees of Indiana University
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)
@@ -14,32 +14,30 @@
::
- template <typename MutableGraph>
- bool read_graphviz(std::istream& in, MutableGraph& graph,
- dynamic_properties& dp,
- const std::string& node_id = "node_id");
-
- // Only available if BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS is defined
- template <typename MultiPassIterator, typename MutableGraph>
- bool read_graphviz(MultiPassIterator begin, MultiPassIterator end,
- MutableGraph& graph, dynamic_properties& dp,
- const std::string& node_id = "node_id");
-
- // Deprecated GraphViz readers
- void read_graphviz(const std::string& file, GraphvizDigraph& g);
- void read_graphviz(FILE* file, GraphvizDigraph& g);
- void read_graphviz(const std::string& file, GraphvizGraph& g);
- void read_graphviz(FILE* file, GraphvizGraph& g);
+ namespace boost {
+
+ template <typename MutableGraph>
+ bool read_graphviz(std::istream& in, MutableGraph& graph,
+ dynamic_properties& dp,
+ const std::string& node_id = "node_id");
+
+ template <typename MutableGraph>
+ bool read_graphviz(std::string& str, MutableGraph& graph,
+ dynamic_properties& dp,
+ const std::string& node_id = "node_id");
+
+ template <typename InputIterator, typename MutableGraph>
+ bool read_graphviz(InputIterator begin, InputIterator end,
+ MutableGraph& graph, dynamic_properties& dp,
+ const std::string& node_id = "node_id");
+
+ }
The ``read_graphviz`` function interprets a graph described using the
GraphViz_ DOT language and builds a BGL graph that captures that
-description. Using this function, you can initialize a graph using
-data stored as text. To use the iterator version of ``read_graphviz``,
-you will need to define the macro BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
-before including the header ``<boost/graph/graphviz.hpp>``. Doing so
-may greatly increase the amount of time required to compile the
-GraphViz reader.
+description. Using these functions, you can initialize a graph using
+data stored as text.
The DOT language can specify both directed and undirected graphs, and
``read_graphviz`` differentiates between the two. One must pass
@@ -53,11 +51,11 @@
property maps. The reader passes all the properties encountered to
this object, using the GraphViz string keys as the property keys.
Furthermore, ``read_graphviz`` stores node identifier names under the
-vertex property map named node_id.
+vertex property map named ``node_id``.
Requirements:
- The type of the graph must model the `Mutable Graph`_ concept.
- - The type of the iterator must model the `Multi-Pass Iterator`_
+ - The type of the iterator must model the `Input Iterator`_
concept.
- The property map value types must be default-constructible.
@@ -97,6 +95,14 @@
virtual const char* what() const throw();
};
+ struct bad_graphviz_syntax: public graph_exception {
+ std::string errmsg;
+
+ bad_graphviz_syntax(const std::string&);
+ virtual ~bad_graphviz_syntax() throw();
+ virtual const char* what() const throw();
+ };
+
Under certain circumstances, ``read_graphviz`` will throw one of the
above exceptions. The three concrete exceptions can all be caught
using the general ``graph_exception`` moniker when greater precision
@@ -121,6 +127,10 @@
graph is undirected, as indicated by the ``graph`` keyword in the DOT
language.
+The ``bad_graphviz_syntax`` exception occurs when the graph input is not a
+valid GraphViz graph.
+
+
Example
-------
The following example illustrates a relatively simple use of the
@@ -175,13 +185,6 @@
the "boost_graph" library. The library can be built by following the
`Boost Jam Build Instructions`_ for the subdirectory ``libs/graph/build``.
-Deprecated Readers
-------------------
-The deprecated readers do not provide exceptions on error (they
-abort), they require the use of one of the predefined graph types
-(``GraphvizDigraph`` or ``GraphvizGraph``), and they do not support
-arbitrary properties. They will be removed in a future Boost version.
-
Notes
-----
@@ -193,6 +196,15 @@
resulting interpretation may be subtly different from dot for some
corner cases that are not well specified.
+ - On successful reading of a graph, every vertex and edge will have
+ an associated value for every respective edge and vertex property
+ encountered while interpreting the graph. These values will be set
+ using the ``dynamic_properties`` object. Those edges and
+ vertices that are not explicitly given a value for a property (and that
+ property has no default) will be
+ given the default constructed value of the value type. **Be sure
+ that property map value types are default constructible.**
+
- ``read_graphviz`` treats subgraphs as syntactic sugar. It does not
reflect subgraphs as actual entities in the BGL. Rather, they are
used to shorten some edge definitions as well as to give a subset
@@ -202,18 +214,7 @@
- Subgraph IDs refer to subgraphs defined earlier in the graph
description. Undefined subgraphs behave as empty subgraphs
- (``{}``).
-
- - On successful reading of a graph, every vertex and edge will have
- an associated value for every respective edge and vertex property
- encountered while interpreting the graph. These values will be set
- using the ``dynamic_properties`` object. Some properties may be
- ``put`` multiple times during the course of reading in order to
- ensure the same semantics as the GraphViz tools. Those edges and
- vertices that are not explicitly given a value for a property (and that
- property has no default) will be
- given the default constructed value of the value type. **Be sure
- that property map value types are default constructible.**
+ (``{}``). This is the same behavior as GraphViz.
See Also
--------
@@ -224,16 +225,16 @@
Future Work
-----------
- - The parser currently does not handle continuation lines as defined
- in the DOT Language. Some more sophisticated parsing of
- identifier(so-called "ID" in the source) is required to support this.
+ - Passing port information to BGL.
+
+ - Expanding escape codes in the same way GraphViz does.
- Support for optional recognition of subgraphs as distinct entities.
-
+
.. _GraphViz: http://graphviz.org/
.. _`Mutable Graph`: MutableGraph.html
-.. _`Multi-Pass Iterator`: ../../iterator/index.html
+.. _`Input Iterator`: http://www.sgi.com/tech/stl/InputIterator.html
.. _dynamic_properties: ../../property_map/doc/dynamic_property_map.html
.. _write_graphviz: write-graphviz.html
.. _Boost Jam Build Instructions: ../../../more/getting_started.html#Build_Install
Modified: branches/release/libs/graph/doc/reverse_graph.html
==============================================================================
--- branches/release/libs/graph/doc/reverse_graph.html (original)
+++ branches/release/libs/graph/doc/reverse_graph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- (C) Copyright David Abrahams and Jeremy Siek 2000.
- --
- -- 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)
+ (C) Copyright David Abrahams and Jeremy Siek 2000.
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Reverse Graph Adaptor</Title>
@@ -407,7 +407,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<a HREF="http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a>
(<A HREF="mailto:david.abrahams_at_[hidden]">david.abrahams_at_[hidden]</A>)<br>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Modified: branches/release/libs/graph/doc/sequential_vertex_coloring.html
==============================================================================
--- branches/release/libs/graph/doc/sequential_vertex_coloring.html (original)
+++ branches/release/libs/graph/doc/sequential_vertex_coloring.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,11 +1,11 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--
- -- Copyright (c) 2005 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2005 Trustees of Indiana University
+
+ 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)
-->
<head>
<title>Boost Graph Library: Sequential Vertex Coloring</title>
@@ -57,7 +57,7 @@
<blockquote>
This property map records the colors of each vertex. It must be a
model of
- <a href="../../property_map/WritablePropertyMap.html">Writeable
+ <a href="../../property_map/doc/WritablePropertyMap.html">Writeable
Property Map</a> whose key type is the same as the vertex descriptor
type of the graph and whose value type is an integral type that can
store all values of the graph's <tt>vertices_size_type</tt>.<br>
@@ -106,7 +106,7 @@
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 1997-2004</TD><TD>
+<TD nowrap>Copyright © 1997-2004</TD><TD>
<A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>,
Indiana University (<A
HREF="mailto:lums_at_[hidden]">lums_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/small_world_generator.html
==============================================================================
--- branches/release/libs/graph/doc/small_world_generator.html (original)
+++ branches/release/libs/graph/doc/small_world_generator.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,13 +1,13 @@
<HTML>
<!--
- -- Copyright (c) The Trustees of Indiana University
- --
- -- Use, modification and distribution is subject to 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)
- --
- -- Authors: Douglas Gregor
- -- Andrew Lumsdaine
+ Copyright (c) The Trustees of Indiana University
+
+ Use, modification and distribution is subject to 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)
+
+ Authors: Douglas Gregor
+ Andrew Lumsdaine
-->
<Head>
<Title>Boost Graph Library: Small World Generator</Title>
@@ -116,7 +116,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2005</TD><TD>
+<TD nowrap>Copyright © 2005</TD><TD>
<A HREF="http://www.boost.org/people/doug_gregor.html">Doug Gregor</A>, Indiana University (<script language="Javascript">address("cs.indiana.edu", "dgregor")</script>)<br>
<A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>,
Indiana University (<script language="Javascript">address("osl.iu.edu", "lums")</script>)
Modified: branches/release/libs/graph/doc/sorted_erdos_renyi_gen.html
==============================================================================
--- branches/release/libs/graph/doc/sorted_erdos_renyi_gen.html (original)
+++ branches/release/libs/graph/doc/sorted_erdos_renyi_gen.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,14 +1,14 @@
<HTML>
<!--
- -- Copyright (c) 2004, 2005 The Trustees of Indiana University
- --
- -- Use, modification and distribution is subject to 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)
- --
- -- Authors: Jeremiah Willcock
- -- Douglas Gregor
- -- Andrew Lumsdaine
+ Copyright (c) 2004, 2005 The Trustees of Indiana University
+
+ Use, modification and distribution is subject to 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)
+
+ Authors: Jeremiah Willcock
+ Douglas Gregor
+ Andrew Lumsdaine
-->
<Head>
<Title>Boost Graph Library: Erdös-Renyi Generator</Title>
@@ -121,7 +121,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2005</TD><TD>
+<TD nowrap>Copyright © 2005</TD><TD>
Jeremiah Willcock, Indiana University (<script language="Javascript">address("cs.indiana.edu", "jewillco")</script>)<br>
<A HREF="http://www.boost.org/people/doug_gregor.html">Doug Gregor</A>, Indiana University (<script language="Javascript">address("cs.indiana.edu", "dgregor")</script>)<br>
Modified: branches/release/libs/graph/doc/sparse_matrix_ordering.html
==============================================================================
--- branches/release/libs/graph/doc/sparse_matrix_ordering.html (original)
+++ branches/release/libs/graph/doc/sparse_matrix_ordering.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Sparse Matrix Ordering Example</Title>
@@ -369,7 +369,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/stanford_graph.html
==============================================================================
--- branches/release/libs/graph/doc/stanford_graph.html (original)
+++ branches/release/libs/graph/doc/stanford_graph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -3,9 +3,9 @@
Copyright (C) 2001, Andreas Scherer, Jeremy Siek, Lie-Quan Lee,
and Andrew Lumsdaine
- -- 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)
+ 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)
-->
<Head>
<Title>Boost Graph Library: Stanford Graph Interface</Title>
@@ -384,7 +384,7 @@
The SGB <tt>Vertex</tt> and <tt>Arc</tt> structures provide
"utility" fields for storing extra information. We provide
BGL wrappers that provide access to these fields through <a
-href="../../property_map/property_map.html">property maps</a>. In
+href="../../property_map/doc/property_map.html">property maps</a>. In
addition, vertex index and edge length maps are provided. A property
map object can be obtained from a SGB <tt>Graph*</tt> using the
<tt>get()</tt> function described in the <a
@@ -415,17 +415,17 @@
<tt>gb_graph.h</tt>, which are <tt>Vertex*</tt>, <tt>Arc*</tt>,
<tt>Graph*</tt>, <tt>char*</tt>, and <tt>long</tt>. The property maps
for the utility fields are models of <a
-href="../../property_map/LvaluePropertyMap.html">Lvalue Property
+href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map</a>.
</p>
<p>
The property map for vertex indices can be obtained using the
<tt>vertex_index_t</tt> tag, and this property map is a <a
-href="../../property_map/ReadablePropertyMap.html">Readable Property
+href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. A property map for edge length's can be obtained using the
<tt>edge_length_t</tt> tag, and this property map is a <a
-href="../../property_map/LvaluePropertyMap.html">Lvalue Property
+href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map</a> whose value type is <tt>long</tt>.
</p>
@@ -439,7 +439,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2001</TD><TD>
+<TD nowrap>Copyright © 2001</TD><TD>
<A HREF="http://people.freenet.de/andreas.scherer">Andreas Scherer</A>,
Aachen (<A
HREF="mailto:andreas_freenet_at_[hidden]">andreas_freenet_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/straight_line_drawing.html
==============================================================================
--- branches/release/libs/graph/doc/straight_line_drawing.html (original)
+++ branches/release/libs/graph/doc/straight_line_drawing.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!-- Copyright 2007 Aaron Windsor
- --
- -- 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)
- --
+
+ 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)
+
-->
<Head>
<Title>Boost Graph Library: Chrobak-Payne Straight Line Drawing</Title>
@@ -95,7 +95,7 @@
IN <tt>PlanarEmbedding embedding</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that models the PlanarEmbedding
concept.
</blockquote>
@@ -110,7 +110,7 @@
OUT: <tt>PositionMap</tt>
<blockquote>
-A <a href="../../property_map/LvaluePropertyMap.html">Writable LValue Property
+A <a href="../../property_map/doc/LvaluePropertyMap.html">Writable LValue Property
Map</a> that models the Position Map concept. The Position Map concept requires
that the value mapped to be an object that has members <tt>x</tt> and
<tt>y</tt>. For example, if <tt>p</tt> models PositionMap and <tt>v</tt>
@@ -122,7 +122,7 @@
IN: <tt>VertexIndexMap vm</tt>
<blockquote>
-A <a href="../../property_map/ReadablePropertyMap.html">Readable Property Map
+A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
</a> that maps vertices from <tt>g</tt> to distinct integers in the range
<tt>[0, num_vertices(g) )</tt><br>
<b>Default</b>: <tt>get(vertex_index,g)</tt><br>
@@ -148,7 +148,7 @@
<br>
<HR>
-Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright © 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
aaron.windsor_at_[hidden]</a>)
</BODY>
</HTML>
Modified: branches/release/libs/graph/doc/strong_components.html
==============================================================================
--- branches/release/libs/graph/doc/strong_components.html (original)
+++ branches/release/libs/graph/doc/strong_components.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Strongly Connected Components</Title>
@@ -83,7 +83,7 @@
records which component each vertex in the graph belongs to by
recording the component number in the component property map. The
<tt>ComponentMap</tt> type must be a model of <a
-href="../../property_map/WritablePropertyMap.html">Writable Property
+href="../../property_map/doc/WritablePropertyMap.html">Writable Property
Map</a>. The value type shouch be an integer type, preferably the same
as the <tt>vertices_size_type</tt> of the graph. The key type must be
the graph's vertex descriptor type.<br>
@@ -102,12 +102,12 @@
for each component and <tt>get(r_map, v)</tt> returns the root
vertex for whichever component vertex <tt>v</tt> is a member.
The <TT>RootMap</TT> must be a <a
- href="../../property_map/ReadWritePropertyMap.html">
+ href="../../property_map/doc/ReadWritePropertyMap.html">
Read/Write Property Map</a>, where the key type and the value type are
the vertex descriptor type of the graph.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of vertex descriptors of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -119,11 +119,11 @@
<blockquote>
This is used by the algorithm to keep track of the DFS ordering
of the vertices. The <TT>TimeMap</TT> must be a model
- of <a href="../../property_map/ReadWritePropertyMap.html"> Read/Write
+ of <a href="../../property_map/doc/ReadWritePropertyMap.html"> Read/Write
Property Map</a> and its value type must be an integer type. The key
type must be the vertex descriptor type of the graph.<br>
<b>Default:</b>an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of integers with size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -135,12 +135,12 @@
<blockquote>
This is used by the algorithm to keep track of its progress through
the graph. The type <tt>ColorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map must model
<a href="./ColorValue.html">ColorValue</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>default_color_type</tt> of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -154,7 +154,7 @@
num_vertices(g))</tt>. This parameter is only necessary when a
default is used for one of the other named parameters. The type
<tt>VertexIndexMap</tt> must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -193,7 +193,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/subgraph.html
==============================================================================
--- branches/release/libs/graph/doc/subgraph.html (original)
+++ branches/release/libs/graph/doc/subgraph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Subgraph</Title>
@@ -173,7 +173,7 @@
<tt>subgraph<Graph></tt> will also models these concepts.
<!----------------------------->
-<h3>Associates Types</h3>
+<h3>Associated Types</h3>
If the graph is the root of the subgraph tree, then the vertex and
edge descriptors are both the local descriptors for the root graph,
@@ -644,3 +644,23 @@
traits class is defined in <tt>boost/pending/property.hpp</tt>.
<hr>
+<h2>Notes</h2>
+The subgraph template requires the underlying graph type to supply vertex and
+edge index properties. However, there is no default constructor of any adjacency
+list that satisfies both of these requirements. This is especially true of graphs
+using bundled properties, or any adjacency list whose
+vertex set is selected by anything other that <tt>vecS</tt>.
+
+However, this problem can be overcome by embedding your bundled (or otherwise)
+properties into a <tt>property</tt> that contains an appropriate index. For
+example:
+<pre>
+struct my_vertex { ... };
+typedef property<vertex_index_t, std::size_t, vertex_prop> vertex_prop;
+
+struct my_edge { ... };
+typedef property<edge_index_t, std::size_t, vertex_prop> edge_prop;
+
+typedef adjacency_list<vecS, listS, undirectedS, vertex_prop, edge_prop> Graph;
+typdef subgraph<Graph> Subgraph;
+</pre>
Modified: branches/release/libs/graph/doc/table_of_contents.html
==============================================================================
--- branches/release/libs/graph/doc/table_of_contents.html (original)
+++ branches/release/libs/graph/doc/table_of_contents.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -62,7 +62,7 @@
<LI>Property Graph
<LI>Mutable Property Graph
</OL>
- <li>The Property Map Library (technically not part of the graph library, but used a lot here)
+ <li>The Property Map Library (technically not part of the graph library, but used a lot here)
<li><img src="figs/python_ico.gif" alt="(Python)"/>Python bindings</li>
<li>Visitor Concepts
<OL>
@@ -141,6 +141,7 @@
<LI>Shortest Paths Algorithms
<OL>
<LI>dijkstra_shortest_paths
+ <LI>dijkstra_shortest_paths_no_color_map
<LI>bellman_ford_shortest_paths
<LI>dag_shortest_paths
<LI><A
@@ -290,7 +291,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/time_stamper.html
==============================================================================
--- branches/release/libs/graph/doc/time_stamper.html (original)
+++ branches/release/libs/graph/doc/time_stamper.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: time_stamper</Title>
@@ -74,7 +74,7 @@
<TR><TD><TT>TimeMap</TT></TD>
<TD>
A <a
-href="../../property_map/WritablePropertyMap.html">WritablePropertyMap</a>,
+href="../../property_map/doc/WritablePropertyMap.html">WritablePropertyMap</a>,
where the <tt>key_type</tt> is the vertex descriptor type or edge
descriptor of the graph (depending on the kind of event tag), and
where the <tt>TimeT</tt> type is convertible to the
@@ -182,7 +182,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/topological_sort.html
==============================================================================
--- branches/release/libs/graph/doc/topological_sort.html (original)
+++ branches/release/libs/graph/doc/topological_sort.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Topological Sort</Title>
@@ -72,12 +72,12 @@
<blockquote>
This is used by the algorithm to keep track of its progress through
the graph. The type <tt>ColorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map must model
<a href="./ColorValue.html">ColorValue</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>default_color_type</tt> of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -93,7 +93,7 @@
num_vertices(g))</tt>. This parameter is only necessary when the
default color property map is used. The type <tt>VertexIndexMap</tt>
must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -148,7 +148,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/transitive_closure.html
==============================================================================
--- branches/release/libs/graph/doc/transitive_closure.html (original)
+++ branches/release/libs/graph/doc/transitive_closure.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 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)
+ Copyright (c) Jeremy Siek 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)
-->
<Head>
<Title>Boost Graph Library: Transitive Closure</Title>
@@ -88,7 +88,7 @@
num_vertices(g))</tt>. This parameter is only necessary when the
default color property map is used. The type <tt>VertexIndexMap</tt>
must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -215,7 +215,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2001</TD><TD>
+<TD nowrap>Copyright © 2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana Univ.(<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/transpose_graph.html
==============================================================================
--- branches/release/libs/graph/doc/transpose_graph.html (original)
+++ branches/release/libs/graph/doc/transpose_graph.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Transpose Graph</Title>
@@ -84,7 +84,7 @@
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
<blockquote>
The vertex index map type must be a model of <a
-href="../../property_map/ReadablePropertyMap.html">Readable Property
+href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a> and must map the vertex descriptors of <tt>G</tt> to the
integers from 0 to <tt>num_vertices(G)</tt>.<br>
@@ -101,7 +101,7 @@
This maps vertices in the original graph to vertices in the copy.
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the output graph's vertex descriptor type of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -119,7 +119,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/trouble_shooting.html
==============================================================================
--- branches/release/libs/graph/doc/trouble_shooting.html (original)
+++ branches/release/libs/graph/doc/trouble_shooting.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Trouble Shooting</Title>
@@ -50,7 +50,8 @@
<p>There is a VC++ bug that appears when using <tt>get(property,
graph, edge)</tt>. A workaround is to use <tt>get(get(property,
-graph), edge)</tt> instead.
+graph), edge)</tt> instead. <i>Note that <tt>boost/property_map.hpp</tt> has
+now been moved to <tt>boost/property_map/property_map.hpp</tt>.
<hr>
@@ -114,7 +115,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/tsp_tour_len_visitor.html
==============================================================================
--- branches/release/libs/graph/doc/tsp_tour_len_visitor.html (original)
+++ branches/release/libs/graph/doc/tsp_tour_len_visitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -57,7 +57,7 @@
<TD>
The weight of each edge in the graph.
The type <tt>WeightMap</tt> must be a model of
-Readable Property Map.
+Readable Property Map.
The edge descriptor type of the graph needs to be usable as the key type for the weight map.
</TD>
<TD>None</TD>
@@ -115,7 +115,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2008</TD><TD>
+<TD nowrap>Copyright © 2008</TD><TD>
Matyas Egyhazy
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/tsp_tour_visitor.html
==============================================================================
--- branches/release/libs/graph/doc/tsp_tour_visitor.html (original)
+++ branches/release/libs/graph/doc/tsp_tour_visitor.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -88,7 +88,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2008</TD><TD>
+<TD nowrap>Copyright © 2008</TD><TD>
Matyas Egyhazy
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/undirected_dfs.html
==============================================================================
--- branches/release/libs/graph/doc/undirected_dfs.html (original)
+++ branches/release/libs/graph/doc/undirected_dfs.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2002
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2002
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Depth-First Search</Title>
@@ -198,12 +198,12 @@
<blockquote>
This is used by the algorithm to keep track of its progress through
the graph. The type <tt>VertexColorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map must model
<a href="./ColorValue.html">ColorValue</a>.<br>
<b>Default:</b> an <a
- href="../../property_map/iterator_property_map.html">
+ href="../../property_map/doc/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>default_color_type</tt> of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
@@ -217,7 +217,7 @@
<blockquote>
This is used by the algorithm to keep track of which edges
have been visited. The type <tt>EdgeColorMap</tt> must be a model of <a
- href="../../property_map/ReadWritePropertyMap.html">Read/Write
+ href="../../property_map/doc/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's edge
descriptor type and the value type of the color map must model
<a href="./ColorValue.html">ColorValue</a>.<br>
@@ -242,7 +242,7 @@
num_vertices(g))</tt>. This parameter is only necessary when the
default color property map is used. The type <tt>VertexIndexMap</tt>
must be a model of <a
- href="../../property_map/ReadablePropertyMap.html">Readable Property
+ href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
@@ -322,7 +322,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/users.html
==============================================================================
--- branches/release/libs/graph/doc/users.html (original)
+++ branches/release/libs/graph/doc/users.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<html>
<!--
- -- Copyright (c) 2002 Trustees of Indiana University
- --
- -- 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)
+ Copyright (c) 2002 Trustees of Indiana University
+
+ 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)
-->
<title>Boost Graph Library Users</title>
<body BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
Modified: branches/release/libs/graph/doc/using_adjacency_list.html
==============================================================================
--- branches/release/libs/graph/doc/using_adjacency_list.html (original)
+++ branches/release/libs/graph/doc/using_adjacency_list.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Using the Boost Graph Library</Title>
@@ -470,27 +470,26 @@
</PRE>
<p>
-You can also use enum's instead of struct's to create tag types.
-Create an enum type for each property. The first part of the name of
-the enum type must be <tt>edge</tt>, <tt>vertex</tt>, or
-<tt>graph</tt> followed by an underscore, the new property name, and
-a <tt>_t</tt> at the
-end. Inside the enum, define a value with the same name minus the
-<tt>_t</tt>. Then invoke the <tt>BOOST_INSTALL_PROPERTY</tt> macro.
+You can also use enum's instead of struct's to create tag types. Create an enum
+type for each property inside the boost namespace. The first part of the name of
+the enum type must be <tt>edge</tt>, <tt>vertex</tt>, or <tt>graph</tt> followed
+by an underscore, the new property name, and a <tt>_t</tt> at the end. Inside
+the enum, define a value with the same name minus the <tt>_t</tt>. Then invoke
+the <tt>BOOST_INSTALL_PROPERTY</tt> macro.
<pre>
-enum edge_flow_t { edge_flow };
-enum edge_capacity_t { edge_capacity };
-
namespace boost {
+ enum edge_flow_t { edge_flow };
+ enum edge_capacity_t { edge_capacity };
+
BOOST_INSTALL_PROPERTY(edge, flow);
BOOST_INSTALL_PROPERTY(edge, capacity);
}
</pre>
<P>
-Now you can use your new property tag in the definition of properties
-just as you would one of the builtin tags.
+Now you can use your new property tag in the definition of properties just as
+you would one of the builtin tags.
<P>
<PRE>
@@ -780,7 +779,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/using_property_maps.html
==============================================================================
--- branches/release/libs/graph/doc/using_property_maps.html (original)
+++ branches/release/libs/graph/doc/using_property_maps.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Using Property Maps</Title>
@@ -29,7 +29,7 @@
graph algorithms should not have to deal with the implementation
details of the properties. The <I>property map</I> interface
defined in Section <A
-HREF="../../property_map/property_map.html">Property
+HREF="../../property_map/doc/property_map.html">Property
Map Concepts</A> provides a generic method for accessing
properties from graphs. This is the interface used in the BGL
algorithms to access properties.
@@ -287,7 +287,7 @@
The reason that pointers can be used as property maps is that
there are several overloaded functions and a specialization of
<TT>property_traits</TT> in the header <a
-href="../../../boost/property_map.hpp"><TT>boost/property_map.hpp</TT></a>
+href="../../../boost/property_map/property_map.hpp"><TT>boost/property_map/property_map.hpp</TT></a>
that implement the property map interface in terms of
pointers. The definition of those functions is listed here.
@@ -472,7 +472,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/visitor_concepts.html
==============================================================================
--- branches/release/libs/graph/doc/visitor_concepts.html (original)
+++ branches/release/libs/graph/doc/visitor_concepts.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,10 +1,10 @@
<HTML>
<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- 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)
+ Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
+
+ 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)
-->
<Head>
<Title>Boost Graph Library: Visitor Concepts</Title>
@@ -47,7 +47,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
Modified: branches/release/libs/graph/doc/write-graphviz.html
==============================================================================
--- branches/release/libs/graph/doc/write-graphviz.html (original)
+++ branches/release/libs/graph/doc/write-graphviz.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,11 +1,11 @@
<HTML>
<!--
- -- Copyright (c) Lie-Quan Lee and Jeremy Siek 2000, 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)
+ Copyright (c) Lie-Quan Lee and Jeremy Siek 2000, 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)
-->
<Head>
<Title>Boost Graph Library: write graphviz</Title>
@@ -221,7 +221,7 @@
IN: <tt>VertexID vertex_id</tt>
<blockquote>
- A property map that models Readable Property Map whose key type is the vertex descriptor of the graph and whose value type can be written to a stream. The value should be a unique descriptor that can be used to name a node in a Graphviz file (so it should not, for instance, have any spaces in it).<br>
+ A property map that models Readable Property Map whose key type is the vertex descriptor of the graph and whose value type can be written to a stream. The value should be a unique descriptor that can be used to name a node in a Graphviz file (so it should not, for instance, have any spaces in it).<br>
<b>Default</b>: If no <code>dynamic_properties</code> object is provided, <tt>get(vertex_index, g)</tt>. Otherwise, a dynamic property map that accesses the property map named <code>node_id</code>.
</blockquote>
<H3>
@@ -337,7 +337,7 @@
<HR>
<TABLE>
<TR valign=top>
-<TD nowrap>Copyright © 2000-2001</TD><TD>
+<TD nowrap>Copyright © 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Indiana University (<A HREF="mailto:llee_at_[hidden]">llee_at_[hidden]</A>)<br>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
</TD></TR></TABLE>
Modified: branches/release/libs/graph/doc/write_dimacs.html
==============================================================================
--- branches/release/libs/graph/doc/write_dimacs.html (original)
+++ branches/release/libs/graph/doc/write_dimacs.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -76,12 +76,12 @@
IN: <tt>CapacityMap capacity</tt>
<blockquote>
- A property map that models Readable Property Map whose key type is the edge descriptor of the graph and whose value type can be written to a stream. <br>
+ A property map that models Readable Property Map whose key type is the edge descriptor of the graph and whose value type can be written to a stream. <br>
</blockquote>
IN: <tt>IndexMap epw</tt>
<blockquote>
- A property map that models Readable Property Map whose key type is the vertex descriptor of the graph and whose value type can be written to a stream. <br>
+ A property map that models Readable Property Map whose key type is the vertex descriptor of the graph and whose value type can be written to a stream. <br>
</blockquote>
OUT: <tt>std::ostream& out</tt>
Modified: branches/release/libs/graph/doc/write_graphml.html
==============================================================================
--- branches/release/libs/graph/doc/write_graphml.html (original)
+++ branches/release/libs/graph/doc/write_graphml.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -3,17 +3,25 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.3.3: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
<title>Boost write_graphml</title>
-<link rel="stylesheet" href="default.css" type="text/css" />
+<link rel="stylesheet" href="../../rst.css" type="text/css" />
</head>
<body>
-<h1 class="title"><a class="reference" href="../../../index.htm"><img align="middle" alt="Boost" src="../../../boost.png" /></a> <tt class="literal"><span class="pre">write_graphml</span></tt></h1>
<div class="document" id="logo-write-graphml">
+<h1 class="title"><a class="reference external" href="../../../index.htm"><img align="middle" alt="Boost" class="align-middle" src="../../../boost.png" /></a> <tt class="docutils literal"><span class="pre">write_graphml</span></tt></h1>
+
+<!-- Copyright (C) 2006 Tiago de Paula Peixoto <tiago_at_[hidden]>
+
+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)
+
+Authors: Tiago de Paula Peixoto -->
<pre class="literal-block">
template<typename Graph>
void
-write_graphml(std::ostream& out, const Graph& g, const dynamic_properties& dp,
+write_graphml(std::ostream& out, const Graph& g, const dynamic_properties& dp,
bool ordered_vertices=false);
template<typename Graph, typename VertexIndexMap>
@@ -22,53 +30,53 @@
const dynamic_properties& dp, bool ordered_vertices=false);
</pre>
<p>This is to write a BGL graph object into an output stream in the
-<a class="reference" href="http://graphml.graphdrawing.org/">graphml</a> format. Both overloads of <tt class="literal"><span class="pre">write_graphml</span></tt> will emit all of
-the properties stored in the <a class="reference" href="../../property_map/doc/dynamic_property_map.html">dynamic_properties</a> object, thereby
+<a class="reference external" href="http://graphml.graphdrawing.org/">GraphML</a> format. Both overloads of <tt class="docutils literal"><span class="pre">write_graphml</span></tt> will emit all of
+the properties stored in the <a class="reference external" href="../../property_map/doc/dynamic_property_map.html">dynamic_properties</a> object, thereby
retaining the properties that have been read in through the dual
-function <a class="reference" href="read_graphml.html">read_graphml</a>. The second overload must be used when the
+function <a class="reference external" href="read_graphml.html">read_graphml</a>. The second overload must be used when the
graph doesn't have an internal vertex index map, which must then be
supplied with the appropriate parameter.</p>
<div class="contents topic" id="contents">
-<p class="topic-title first"><a name="contents">Contents</a></p>
+<p class="topic-title first">Contents</p>
<ul class="simple">
-<li><a class="reference" href="#where-defined" id="id2" name="id2">Where Defined</a></li>
-<li><a class="reference" href="#parameters" id="id3" name="id3">Parameters</a></li>
-<li><a class="reference" href="#example" id="id4" name="id4">Example</a></li>
-<li><a class="reference" href="#see-also" id="id5" name="id5">See Also</a></li>
-<li><a class="reference" href="#notes" id="id6" name="id6">Notes</a></li>
+<li><a class="reference internal" href="#where-defined" id="id2">Where Defined</a></li>
+<li><a class="reference internal" href="#parameters" id="id3">Parameters</a></li>
+<li><a class="reference internal" href="#example" id="id4">Example</a></li>
+<li><a class="reference internal" href="#see-also" id="id5">See Also</a></li>
+<li><a class="reference internal" href="#notes" id="id6">Notes</a></li>
</ul>
</div>
<div class="section" id="where-defined">
-<h1><a class="toc-backref" href="#id2" name="where-defined">Where Defined</a></h1>
-<p><tt class="literal"><span class="pre"><boost/graph/graphml.hpp></span></tt></p>
+<h1><a class="toc-backref" href="#id2">Where Defined</a></h1>
+<p><tt class="docutils literal"><span class="pre"><boost/graph/graphml.hpp></span></tt></p>
</div>
<div class="section" id="parameters">
-<h1><a class="toc-backref" href="#id3" name="parameters">Parameters</a></h1>
-<dl>
-<dt>OUT: <tt class="literal"><span class="pre">std::ostream&</span> <span class="pre">out</span></tt></dt>
-<dd>A standard <tt class="literal"><span class="pre">std::ostream</span></tt> object.</dd>
-<dt>IN: <tt class="literal"><span class="pre">VertexListGraph&</span> <span class="pre">g</span></tt> </dt>
+<h1><a class="toc-backref" href="#id3">Parameters</a></h1>
+<dl class="docutils">
+<dt>OUT: <tt class="docutils literal"><span class="pre">std::ostream&</span> <span class="pre">out</span></tt></dt>
+<dd>A standard <tt class="docutils literal"><span class="pre">std::ostream</span></tt> object.</dd>
+<dt>IN: <tt class="docutils literal"><span class="pre">VertexListGraph&</span> <span class="pre">g</span></tt></dt>
<dd>A directed or undirected graph. The
-graph's type must be a model of <a class="reference" href="VertexListGraph.html">VertexListGraph</a>. If the graph
-doesn't have an internal <tt class="literal"><span class="pre">vertex_index</span></tt> property map, one
+graph's type must be a model of <a class="reference external" href="VertexListGraph.html">VertexListGraph</a>. If the graph
+doesn't have an internal <tt class="docutils literal"><span class="pre">vertex_index</span></tt> property map, one
must be supplied with the vertex_index parameter.</dd>
-<dt>IN: <tt class="literal"><span class="pre">VertexIndexMap</span> <span class="pre">vertex_index</span></tt></dt>
+<dt>IN: <tt class="docutils literal"><span class="pre">VertexIndexMap</span> <span class="pre">vertex_index</span></tt></dt>
<dd>A vertex property map containing the indexes in the range
[0,num_vertices(g)].</dd>
-<dt>IN: <tt class="literal"><span class="pre">dynamic_properties&</span> <span class="pre">dp</span></tt></dt>
-<dd>Contains all of the vertex and edge properties that should be
-emitted by the graphml writer.</dd>
-<dt>IN: <tt class="literal"><span class="pre">bool</span> <span class="pre">ordered_vertices</span></tt></dt>
+<dt>IN: <tt class="docutils literal"><span class="pre">dynamic_properties&</span> <span class="pre">dp</span></tt></dt>
+<dd>Contains all of the vertex, edge, and graph properties that should be
+emitted by the GraphML writer.</dd>
+<dt>IN: <tt class="docutils literal"><span class="pre">bool</span> <span class="pre">ordered_vertices</span></tt></dt>
<dd>This tells whether or not the order of the vertices from vertices(g)
-matches the order of the indexes. If <tt class="literal"><span class="pre">true</span></tt>, the <tt class="literal"><span class="pre">parse.nodeids</span></tt>
-graph attribute will be set to <tt class="literal"><span class="pre">canonical</span></tt>. Otherwise it will be
-set to <tt class="literal"><span class="pre">free</span></tt>.</dd>
+matches the order of the indexes. If <tt class="docutils literal"><span class="pre">true</span></tt>, the <tt class="docutils literal"><span class="pre">parse.nodeids</span></tt>
+graph attribute will be set to <tt class="docutils literal"><span class="pre">canonical</span></tt>. Otherwise it will be
+set to <tt class="docutils literal"><span class="pre">free</span></tt>.</dd>
</dl>
</div>
<div class="section" id="example">
-<h1><a class="toc-backref" href="#id4" name="example">Example</a></h1>
-<p>This example demonstrates using BGL-graphml interface to write
-a BGL graph into a graphml format file.</p>
+<h1><a class="toc-backref" href="#id4">Example</a></h1>
+<p>This example demonstrates using BGL-GraphML interface to write
+a BGL graph into a GraphML format file.</p>
<pre class="literal-block">
enum files_e { dax_h, yow_h, boz_h, zow_h, foo_cpp,
foo_o, bar_cpp, bar_o, libfoobar_a,
@@ -125,7 +133,7 @@
<p>The output will be:</p>
<pre class="literal-block">
<?xml version="1.0" encoding="UTF-8"?>
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://graphml.graphdrawing.org/xmlns/graphml/graphml-attributes-1.0rc.xsd">
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://graphml.graphdrawing.org/xmlns/graphml/graphml-attributes-1.0rc.xsd">
<key id="key0" for="node" attr.name="name" attr.type="string" />
<key id="key1" for="edge" attr.name="weight" attr.type="int" />
<graph id="G" edgedefault="directed" parse.nodeids="canonical" parse.edgeids="canonical" parse.order="nodesfirst">
@@ -236,23 +244,24 @@
</pre>
</div>
<div class="section" id="see-also">
-<h1><a class="toc-backref" href="#id5" name="see-also">See Also</a></h1>
+<h1><a class="toc-backref" href="#id5">See Also</a></h1>
<p>_read_graphml</p>
</div>
<div class="section" id="notes">
-<h1><a class="toc-backref" href="#id6" name="notes">Notes</a></h1>
+<h1><a class="toc-backref" href="#id6">Notes</a></h1>
<blockquote>
<ul class="simple">
-<li>Note that you can use graphml file write facilities without linking
-against the <tt class="literal"><span class="pre">boost_graph</span></tt> library.</li>
+<li>Note that you can use GraphML file write facilities without linking
+against the <tt class="docutils literal"><span class="pre">boost_graph</span></tt> library.</li>
</ul>
</blockquote>
</div>
</div>
-<hr class="footer" />
<div class="footer">
-<a class="reference" href="write_graphml.rst">View document source</a>.
-Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
+<hr class="footer" />
+Generated on: 2009-06-08 13:57 UTC.
+Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
+
</div>
</body>
</html>
Modified: branches/release/libs/graph/doc/write_graphml.rst
==============================================================================
--- branches/release/libs/graph/doc/write_graphml.rst (original)
+++ branches/release/libs/graph/doc/write_graphml.rst 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -2,6 +2,14 @@
|(logo)|__ ``write_graphml``
============================
+.. Copyright (C) 2006 Tiago de Paula Peixoto <tiago_at_[hidden]>
+
+ 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)
+
+ Authors: Tiago de Paula Peixoto
+
.. |(logo)| image:: ../../../boost.png
:align: middle
:alt: Boost
@@ -21,7 +29,7 @@
const dynamic_properties& dp, bool ordered_vertices=false);
This is to write a BGL graph object into an output stream in the
-graphml_ format. Both overloads of ``write_graphml`` will emit all of
+GraphML_ format. Both overloads of ``write_graphml`` will emit all of
the properties stored in the dynamic_properties_ object, thereby
retaining the properties that have been read in through the dual
function read_graphml_. The second overload must be used when the
@@ -52,8 +60,8 @@
IN: ``dynamic_properties& dp``
- Contains all of the vertex and edge properties that should be
- emitted by the graphml writer.
+ Contains all of the vertex, edge, and graph properties that should be
+ emitted by the GraphML writer.
IN: ``bool ordered_vertices``
This tells whether or not the order of the vertices from vertices(g)
@@ -66,8 +74,8 @@
Example
-------
-This example demonstrates using BGL-graphml interface to write
-a BGL graph into a graphml format file.
+This example demonstrates using BGL-GraphML interface to write
+a BGL graph into a GraphML format file.
::
@@ -129,7 +137,7 @@
::
<?xml version="1.0" encoding="UTF-8"?>
- <graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://graphml.graphdrawing.org/xmlns/graphml/graphml-attributes-1.0rc.xsd">
+ <graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://graphml.graphdrawing.org/xmlns/graphml/graphml-attributes-1.0rc.xsd">
<key id="key0" for="node" attr.name="name" attr.type="string" />
<key id="key1" for="edge" attr.name="weight" attr.type="int" />
<graph id="G" edgedefault="directed" parse.nodeids="canonical" parse.edgeids="canonical" parse.order="nodesfirst">
@@ -246,11 +254,10 @@
Notes
-----
- - Note that you can use graphml file write facilities without linking
+ - Note that you can use GraphML file write facilities without linking
against the ``boost_graph`` library.
-.. _graphml: http://graphml.graphdrawing.org/
-
+.. _GraphML: http://graphml.graphdrawing.org/
.. _dynamic_properties: ../../property_map/doc/dynamic_property_map.html
.. _read_graphml: read_graphml.html
-.. _VertexListGraph: VertexListGraph.html
\ No newline at end of file
+.. _VertexListGraph: VertexListGraph.html
Modified: branches/release/libs/graph/example/adjacency_list.cpp
==============================================================================
--- branches/release/libs/graph/example/adjacency_list.cpp (original)
+++ branches/release/libs/graph/example/adjacency_list.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -14,7 +14,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_utility.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
/*
Sample Output
Modified: branches/release/libs/graph/example/adjacency_list_io.cpp
==============================================================================
--- branches/release/libs/graph/example/adjacency_list_io.cpp (original)
+++ branches/release/libs/graph/example/adjacency_list_io.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,4 +1,4 @@
-// (C) Copyright François Faure 2001
+// (C) Copyright Francois Faure 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)
Modified: branches/release/libs/graph/example/bfs.cpp
==============================================================================
--- branches/release/libs/graph/example/bfs.cpp (original)
+++ branches/release/libs/graph/example/bfs.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -17,7 +17,7 @@
#include <boost/graph/visitors.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/breadth_first_search.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_utility.hpp>
/*
Modified: branches/release/libs/graph/example/bfs_neighbor.cpp
==============================================================================
--- branches/release/libs/graph/example/bfs_neighbor.cpp (original)
+++ branches/release/libs/graph/example/bfs_neighbor.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -18,7 +18,7 @@
#include <boost/graph/visitors.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/neighbor_bfs.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
/*
Modified: branches/release/libs/graph/example/canonical_ordering.cpp
==============================================================================
--- branches/release/libs/graph/example/canonical_ordering.cpp (original)
+++ branches/release/libs/graph/example/canonical_ordering.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,7 +9,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/ref.hpp>
#include <vector>
Modified: branches/release/libs/graph/example/city_visitor.cpp
==============================================================================
--- branches/release/libs/graph/example/city_visitor.cpp (original)
+++ branches/release/libs/graph/example/city_visitor.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -16,7 +16,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/depth_first_search.hpp>
#include <boost/graph/breadth_first_search.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_utility.hpp> // for boost::make_list
Modified: branches/release/libs/graph/example/edge_property.cpp
==============================================================================
--- branches/release/libs/graph/example/edge_property.cpp (original)
+++ branches/release/libs/graph/example/edge_property.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -52,7 +52,7 @@
#include <iostream>
#include <boost/utility.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/adjacency_list.hpp>
Modified: branches/release/libs/graph/example/exterior_properties.cpp
==============================================================================
--- branches/release/libs/graph/example/exterior_properties.cpp (original)
+++ branches/release/libs/graph/example/exterior_properties.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -36,7 +36,7 @@
#include <boost/config.hpp>
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
template <class Graph, class Capacity, class Flow>
void print_network(Graph& G, Capacity capacity, Flow flow)
Modified: branches/release/libs/graph/example/exterior_property_map.cpp
==============================================================================
--- branches/release/libs/graph/example/exterior_property_map.cpp (original)
+++ branches/release/libs/graph/example/exterior_property_map.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,7 +12,7 @@
#include <algorithm>
#include <string>
#include <boost/graph/adjacency_list.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
using namespace std;
using namespace boost;
Modified: branches/release/libs/graph/example/interior_pmap_bundled.cpp
==============================================================================
--- branches/release/libs/graph/example/interior_pmap_bundled.cpp (original)
+++ branches/release/libs/graph/example/interior_pmap_bundled.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,7 +12,7 @@
#include <iostream>
#include <algorithm>
#include <boost/graph/adjacency_list.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <string>
using namespace std;
Modified: branches/release/libs/graph/example/interior_property_map.cpp
==============================================================================
--- branches/release/libs/graph/example/interior_property_map.cpp (original)
+++ branches/release/libs/graph/example/interior_property_map.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,7 +11,7 @@
#include <iostream>
#include <algorithm>
#include <boost/graph/adjacency_list.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <string>
using namespace std;
Modified: branches/release/libs/graph/example/iterator-property-map-eg.cpp
==============================================================================
--- branches/release/libs/graph/example/iterator-property-map-eg.cpp (original)
+++ branches/release/libs/graph/example/iterator-property-map-eg.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -6,7 +6,7 @@
// http://www.boost.org/LICENSE_1_0.txt)
//=======================================================================
#include <iostream>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
int
main()
Modified: branches/release/libs/graph/example/johnson-eg.cpp
==============================================================================
--- branches/release/libs/graph/example/johnson-eg.cpp (original)
+++ branches/release/libs/graph/example/johnson-eg.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -8,9 +8,9 @@
#include <boost/config.hpp>
#include <fstream>
#include <iostream>
-#include <iomanip>
#include <vector>
-#include <boost/property_map.hpp>
+#include <iomanip>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/graph/johnson_all_pairs_shortest.hpp>
@@ -21,11 +21,12 @@
using namespace boost;
typedef adjacency_list<vecS, vecS, directedS, no_property,
property< edge_weight_t, int, property< edge_weight2_t, int > > > Graph;
- const int V = 5;
+ const int V = 6;
typedef std::pair < int, int >Edge;
Edge edge_array[] =
- { Edge(0, 1), Edge(0, 4), Edge(0, 2), Edge(1, 3), Edge(1, 4),
- Edge(2, 1), Edge(3, 2), Edge(3, 0), Edge(4, 3)
+ { Edge(0, 1), Edge(0, 2), Edge(0, 3), Edge(0, 4), Edge(0, 5),
+ Edge(1, 2), Edge(1, 5), Edge(1, 3), Edge(2, 4), Edge(2, 5),
+ Edge(3, 2), Edge(4, 3), Edge(4, 1), Edge(5, 4)
};
const std::size_t E = sizeof(edge_array) / sizeof(Edge);
#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
@@ -38,7 +39,7 @@
#endif
property_map < Graph, edge_weight_t >::type w = get(edge_weight, g);
- int weights[] = { 3, -4, 8, 1, 7, 4, -5, 2, 6 };
+ int weights[] = { 0, 0, 0, 0, 0, 3, -4, 8, 1, 7, 4, -5, 2, 6 };
int *wp = weights;
graph_traits < Graph >::edge_iterator e, e_end;
@@ -49,14 +50,14 @@
int D[V][V];
johnson_all_pairs_shortest_paths(g, D, distance_map(&d[0]));
- std::cout << " ";
+ std::cout << " ";
for (int k = 0; k < V; ++k)
std::cout << std::setw(5) << k;
std::cout << std::endl;
for (int i = 0; i < V; ++i) {
- std::cout << i << " -> ";
+ std::cout << std::setw(3) << i << " -> ";
for (int j = 0; j < V; ++j) {
- if (D[i][j] > 20 || D[i][j] < -20)
+ if (D[i][j] == (std::numeric_limits<int>::max)())
std::cout << std::setw(5) << "inf";
else
std::cout << std::setw(5) << D[i][j];
Modified: branches/release/libs/graph/example/knights-tour.cpp
==============================================================================
--- branches/release/libs/graph/example/knights-tour.cpp (original)
+++ branches/release/libs/graph/example/knights-tour.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -13,7 +13,7 @@
#include <boost/operators.hpp>
#include <boost/graph/breadth_first_search.hpp>
#include <boost/graph/visitors.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
using namespace boost;
Modified: branches/release/libs/graph/example/kuratowski_subgraph.cpp
==============================================================================
--- branches/release/libs/graph/example/kuratowski_subgraph.cpp (original)
+++ branches/release/libs/graph/example/kuratowski_subgraph.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,7 +9,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/ref.hpp>
#include <vector>
Modified: branches/release/libs/graph/example/make_biconnected_planar.cpp
==============================================================================
--- branches/release/libs/graph/example/make_biconnected_planar.cpp (original)
+++ branches/release/libs/graph/example/make_biconnected_planar.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,7 +9,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/ref.hpp>
#include <vector>
Modified: branches/release/libs/graph/example/make_connected.cpp
==============================================================================
--- branches/release/libs/graph/example/make_connected.cpp (original)
+++ branches/release/libs/graph/example/make_connected.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,7 +9,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <vector>
#include <boost/graph/connected_components.hpp>
Modified: branches/release/libs/graph/example/make_maximal_planar.cpp
==============================================================================
--- branches/release/libs/graph/example/make_maximal_planar.cpp (original)
+++ branches/release/libs/graph/example/make_maximal_planar.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,7 +9,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/ref.hpp>
#include <vector>
Modified: branches/release/libs/graph/example/neighbor_bfs.cpp
==============================================================================
--- branches/release/libs/graph/example/neighbor_bfs.cpp (original)
+++ branches/release/libs/graph/example/neighbor_bfs.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -18,7 +18,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_utility.hpp>
#include <boost/graph/neighbor_bfs.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
/*
Modified: branches/release/libs/graph/example/planar_face_traversal.cpp
==============================================================================
--- branches/release/libs/graph/example/planar_face_traversal.cpp (original)
+++ branches/release/libs/graph/example/planar_face_traversal.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,7 +9,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/ref.hpp>
#include <vector>
Modified: branches/release/libs/graph/example/property_iterator.cpp
==============================================================================
--- branches/release/libs/graph/example/property_iterator.cpp (original)
+++ branches/release/libs/graph/example/property_iterator.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,5 +1,5 @@
-// (C) Copyright François Faure, iMAGIS-GRAVIR / UJF, 2001.
+// (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
@@ -8,7 +8,7 @@
// Revision History:
// 03 May 2001 Jeremy Siek
// Moved property iterator code to headers.
-// 02 May 2001 François Faure
+// 02 May 2001 Francois Faure
// Initial version.
#include <boost/graph/adjacency_list_io.hpp>
Modified: branches/release/libs/graph/example/put-get-helper-eg.cpp
==============================================================================
--- branches/release/libs/graph/example/put-get-helper-eg.cpp (original)
+++ branches/release/libs/graph/example/put-get-helper-eg.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -7,7 +7,7 @@
//=======================================================================
#include <vector>
#include <string>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#ifdef BOOST_NO_STD_ITERATOR_TRAITS
#error This examples requires a compiler that provides a working std::iterator_traits
Modified: branches/release/libs/graph/example/quick-tour.cpp
==============================================================================
--- branches/release/libs/graph/example/quick-tour.cpp (original)
+++ branches/release/libs/graph/example/quick-tour.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,14 +1,16 @@
//=======================================================================
-// Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee,
+// Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee,
//
// 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)
//=======================================================================
+
#include <boost/config.hpp>
#include <iostream>
#include <fstream>
#include <boost/graph/adjacency_list.hpp>
+
using namespace boost;
template < typename VertexDescriptor, typename VertexNameMap > void
Modified: branches/release/libs/graph/example/quick_tour.cpp
==============================================================================
--- branches/release/libs/graph/example/quick_tour.cpp (original)
+++ branches/release/libs/graph/example/quick_tour.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -8,11 +8,10 @@
//=======================================================================
#include <boost/config.hpp>
-#include <iostream> // for std::cout
-#include <utility> // for std::pair
-#include <algorithm> // for std::for_each
-#include <boost/utility.hpp> // for boost::tie
-#include <boost/graph/graph_traits.hpp> // for boost::graph_traits
+#include <iostream> // for std::cout
+#include <utility> // for std::pair
+#include <algorithm> // for std::for_each
+#include <boost/utility.hpp> // for boost::tie
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
@@ -24,7 +23,7 @@
void operator()(const Vertex& v) const
{
using namespace boost;
- typename property_map<Graph, vertex_index_t>::type
+ typename property_map<Graph, vertex_index_t>::type
vertex_id = get(vertex_index, g);
std::cout << "vertex: " << get(vertex_id, v) << std::endl;
@@ -32,7 +31,7 @@
std::cout << "\tout-edges: ";
typename graph_traits<Graph>::out_edge_iterator out_i, out_end;
typename graph_traits<Graph>::edge_descriptor e;
- for (tie(out_i, out_end) = out_edges(v, g);
+ for (tie(out_i, out_end) = out_edges(v, g);
out_i != out_end; ++out_i)
{
e = *out_i;
@@ -42,7 +41,7 @@
}
std::cout << std::endl;
- // Write out the incoming edges
+ // Write out the incoming edges
std::cout << "\tin-edges: ";
typename graph_traits<Graph>::in_edge_iterator in_i, in_end;
for (tie(in_i, in_end) = in_edges(v, g); in_i != in_end; ++in_i)
@@ -54,7 +53,7 @@
}
std::cout << std::endl;
- // Write out all adjacent vertices
+ // Write out all adjacent vertices
std::cout << "\tadjacent vertices: ";
typename graph_traits<Graph>::adjacency_iterator ai, ai_end;
for (tie(ai,ai_end) = adjacent_vertices(v, g); ai != ai_end; ++ai)
@@ -78,7 +77,7 @@
// writing out the edges in the graph
typedef std::pair<int,int> Edge;
- Edge edge_array[] =
+ Edge edge_array[] =
{ Edge(A,B), Edge(A,D), Edge(C,A), Edge(D,C),
Edge(C,E), Edge(B,D), Edge(D,E), };
const int num_edges = sizeof(edge_array)/sizeof(edge_array[0]);
@@ -101,7 +100,7 @@
transmission_delay, num_vertices);
#endif
- boost::property_map<Graph, vertex_index_t>::type
+ boost::property_map<Graph, vertex_index_t>::type
vertex_id = get(vertex_index, g);
boost::property_map<Graph, edge_weight_t>::type
trans_delay = get(edge_weight, g);
@@ -112,29 +111,29 @@
for (vp = vertices(g); vp.first != vp.second; ++vp.first)
std::cout << name[get(vertex_id, *vp.first)] << " ";
std::cout << std::endl;
-
+
std::cout << "edges(g) = ";
graph_traits<Graph>::edge_iterator ei, ei_end;
for (tie(ei,ei_end) = edges(g); ei != ei_end; ++ei)
std::cout << "(" << name[get(vertex_id, source(*ei, g))]
<< "," << name[get(vertex_id, target(*ei, g))] << ") ";
std::cout << std::endl;
-
+
std::for_each(vertices(g).first, vertices(g).second,
exercise_vertex<Graph>(g));
-
+
std::map<std::string,std::string> graph_attr, vertex_attr, edge_attr;
graph_attr["size"] = "3,3";
graph_attr["rankdir"] = "LR";
graph_attr["ratio"] = "fill";
vertex_attr["shape"] = "circle";
- boost::write_graphviz(std::cout, g,
+ boost::write_graphviz(std::cout, g,
make_label_writer(name),
make_label_writer(trans_delay),
- make_graph_attributes_writer(graph_attr, vertex_attr,
+ make_graph_attributes_writer(graph_attr, vertex_attr,
edge_attr));
-
+
return 0;
}
Modified: branches/release/libs/graph/example/straight_line_drawing.cpp
==============================================================================
--- branches/release/libs/graph/example/straight_line_drawing.cpp (original)
+++ branches/release/libs/graph/example/straight_line_drawing.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,7 +9,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <vector>
#include <boost/graph/planar_canonical_ordering.hpp>
Modified: branches/release/libs/graph/module.cmake
==============================================================================
--- branches/release/libs/graph/module.cmake (original)
+++ branches/release/libs/graph/module.cmake 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,3 +1,4 @@
boost_module(graph DEPENDS property_map tuple multi_index any random)
+boost_module(graph_mpi DEPENDS mpi graph)
-# any is there because of the dependency on boost/dynamic_property_map.hpp
+# any is there because of the dependency on boost/property_map/dynamic_property_map.hpp
Modified: branches/release/libs/graph/src/CMakeLists.txt
==============================================================================
--- branches/release/libs/graph/src/CMakeLists.txt (original)
+++ branches/release/libs/graph/src/CMakeLists.txt 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,3 +1,9 @@
+# Copyright (C) 2008 Michael Jackson
+#
+# Use, modification and distribution is subject to 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)
+
add_definitions(-DBOOST_GRAPH_NO_LIB=1)
if (MSVC)
@@ -24,3 +30,4 @@
LINK_LIBS ${BOOST_GRAPH_OPTIONAL_LIBRARIES}
SHARED_COMPILE_FLAGS "-DBOOST_GRAPH_DYN_LINK=1"
)
+
Modified: branches/release/libs/graph/src/graphml.cpp
==============================================================================
--- branches/release/libs/graph/src/graphml.cpp (original)
+++ branches/release/libs/graph/src/graphml.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,7 +12,7 @@
#include <boost/variant.hpp>
#include <expat.h>
#include <boost/graph/graphml.hpp>
-#include <string>
+#include <boost/algorithm/string/replace.hpp>
using namespace boost;
@@ -25,31 +25,29 @@
void run(std::istream& in)
{
const int buffer_size = 4096;
- XML_Parser parser = XML_ParserCreateNS(0,'|');
- XML_SetElementHandler(parser, &on_start_element, &on_end_element);
- XML_SetCharacterDataHandler(parser, &on_character_data);
- XML_SetUserData(parser, this);
+ m_parser = XML_ParserCreateNS(0,'|');
+ XML_SetElementHandler(m_parser, &on_start_element, &on_end_element);
+ XML_SetCharacterDataHandler(m_parser, &on_character_data);
+ XML_SetUserData(m_parser, this);
char buffer[buffer_size];
bool okay = true;
do
{
- in.read(buffer, buffer_size);
-
- okay = XML_Parse(parser, buffer, in.gcount(), in.gcount() == 0);
+ in.read(buffer, buffer_size);
+ okay = XML_Parse(m_parser, buffer, in.gcount(), in.gcount() == 0);
}
while (okay && in.good());
if (!okay)
{
std::stringstream s;
- s << "Parse error: " << XML_ErrorString(XML_GetErrorCode(parser))
- << " on line " << XML_GetCurrentLineNumber(parser)
- <<", column " << XML_GetCurrentColumnNumber(parser);
- XML_ParserFree(parser);
+ s << "on line " << XML_GetCurrentLineNumber(m_parser)
+ <<", column " << XML_GetCurrentColumnNumber(m_parser)
+ << ": " << XML_ErrorString(XML_GetErrorCode(m_parser));
throw parse_error(s.str());
}
- XML_ParserFree(parser);
+ XML_ParserFree(m_parser);
}
private:
@@ -71,46 +69,36 @@
graphml_reader* self = static_cast<graphml_reader*>(user_data);
std::string name(c_name);
- std::string::size_type pos = name.find('|');
- if (pos != std::string::npos)
- name.erase(0, pos+1);
-
- if (name == "key")
+ replace_first(name, "http://graphml.graphdrawing.org/xmlns|", "");
+
+ if (name == "edge")
{
std::string id;
- std::string key_name;
- std::string key_type;
- key_kind kind = all_key;
-
+ std::string source, target;
while (*atts)
{
std::string name = *atts++;
std::string value = *atts++;
if (name == "id") id = value;
- else if (name == "attr.name") key_name = value;
- else if (name == "attr.type") key_type = value;
- else if (name == "for")
+ else if (name == "source") source = value;
+ else if (name == "target") target = value;
+ else if (name == "directed")
{
- if (value == "graph") kind = graph_key;
- else if (value == "node") kind = node_key;
- else if (value == "edge") kind = edge_key;
- else if (value == "hyperedge") kind = hyperedge_key;
- else if (value == "port") kind = port_key;
- else if (value == "endpoint") kind = endpoint_key;
- else if (value == "all") kind = all_key;
- else
+ bool edge_is_directed = (value == "directed");
+ if (edge_is_directed != self->m_g.is_directed())
{
- throw parse_error("unrecognized key kind '" + value + "'");
+ if (edge_is_directed)
+ throw directed_graph_error();
+ else
+ throw undirected_graph_error();
}
}
}
- self->m_keys[id] = kind;
- self->m_key_name[id] = key_name;
- self->m_key_type[id] = key_type;
- self->m_active_key = id;
- }
+ self->m_active_descriptor = self->m_edge.size();
+ self->handle_edge(source, target);
+ }
else if (name == "node")
{
std::string id;
@@ -126,33 +114,55 @@
self->handle_vertex(id);
self->m_active_descriptor = id;
}
- else if (name == "edge")
+ else if (name == "data")
+ {
+ while (*atts)
+ {
+ std::string name = *atts++;
+ std::string value = *atts++;
+
+ if (name == "key") self->m_active_key = value;
+ }
+ }
+ else if (name == "key")
{
std::string id;
- std::string source, target;
+ std::string key_name;
+ std::string key_type;
+ key_kind kind = all_key;
+
while (*atts)
{
std::string name = *atts++;
std::string value = *atts++;
if (name == "id") id = value;
- else if (name == "source") source = value;
- else if (name == "target") target = value;
- else if (name == "directed")
+ else if (name == "attr.name") key_name = value;
+ else if (name == "attr.type") key_type = value;
+ else if (name == "for")
{
- bool edge_is_directed = (value == "directed");
- if (edge_is_directed != self->m_g.is_directed())
+ if (value == "graph") kind = graph_key;
+ else if (value == "node") kind = node_key;
+ else if (value == "edge") kind = edge_key;
+ else if (value == "hyperedge") kind = hyperedge_key;
+ else if (value == "port") kind = port_key;
+ else if (value == "endpoint") kind = endpoint_key;
+ else if (value == "all") kind = all_key;
+ else
{
- if (edge_is_directed)
- throw directed_graph_error();
- else
- throw undirected_graph_error();
+ std::stringstream s;
+ s << "on line " << XML_GetCurrentLineNumber(self->m_parser)
+ << ", column " << XML_GetCurrentColumnNumber(self->m_parser)
+ << ": unrecognized key kind '" << value << "'";
+ throw parse_error(s.str());
}
}
}
- self->m_active_descriptor = self->m_edge.size();
- self->handle_edge(source, target);
+ self->m_keys[id] = kind;
+ self->m_key_name[id] = key_name;
+ self->m_key_type[id] = key_type;
+ self->m_active_key = id;
}
else if (name == "graph")
{
@@ -179,16 +189,6 @@
}
self->m_active_descriptor = "";
}
- else if (name == "data")
- {
- while (*atts)
- {
- std::string name = *atts++;
- std::string value = *atts++;
-
- if (name == "key") self->m_active_key = value;
- }
- }
self->m_character_data.clear();
}
@@ -199,9 +199,7 @@
graphml_reader* self = static_cast<graphml_reader*>(user_data);
std::string name(c_name);
- std::string::size_type pos = name.find('|');
- if (pos != std::string::npos)
- name.erase(0, pos+1);
+ replace_first(name, "http://graphml.graphdrawing.org/xmlns|", "");
if (name == "data")
{
@@ -237,7 +235,11 @@
}
catch (bad_lexical_cast)
{
- throw parse_error("invalid vertex: " + v);
+ std::stringstream s;
+ s << "on line " << XML_GetCurrentLineNumber(m_parser)
+ << ", column " << XML_GetCurrentColumnNumber(m_parser)
+ << ": invalid vertex: " << v;
+ throw parse_error(s.str());
}
while(id >= m_canonical_vertex.size())
@@ -310,16 +312,27 @@
void handle_property(const std::string& key_id, const variant<std::string,size_t>& descriptor, const std::string& value)
{
- if (get<std::string>(&descriptor))
+ try
{
- if (get<std::string>(descriptor) == "")
- m_g.set_graph_property(m_key_name[key_id], value, m_key_type[key_id]);
+ if (get<std::string>(&descriptor))
+ {
+ if (get<std::string>(descriptor) == "")
+ m_g.set_graph_property(m_key_name[key_id], value, m_key_type[key_id]);
+ else
+ m_g.set_vertex_property(m_key_name[key_id], get_vertex_descriptor(get<std::string>(descriptor)), value, m_key_type[key_id]);
+ }
else
- m_g.set_vertex_property(m_key_name[key_id], get_vertex_descriptor(get<std::string>(descriptor)), value, m_key_type[key_id]);
+ {
+ m_g.set_edge_property(m_key_name[key_id], get_edge_descriptor(get<size_t>(descriptor)), value, m_key_type[key_id]);
+ }
}
- else
+ catch (parse_error &e)
{
- m_g.set_edge_property(m_key_name[key_id], get_edge_descriptor(get<size_t>(descriptor)), value, m_key_type[key_id]);
+ std::stringstream s;
+ s << "on line " << XML_GetCurrentLineNumber(m_parser)
+ << ", column " << XML_GetCurrentColumnNumber(m_parser)
+ << ": " << e.error;
+ throw parse_error(s.str());
}
}
@@ -342,6 +355,7 @@
std::string m_character_data;
bool m_canonical_vertices;
bool m_canonical_edges;
+ XML_Parser m_parser;
};
namespace boost
Modified: branches/release/libs/graph/src/read_graphviz_spirit.cpp
==============================================================================
--- branches/release/libs/graph/src/read_graphviz_spirit.cpp (original)
+++ branches/release/libs/graph/src/read_graphviz_spirit.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -26,38 +26,22 @@
# define BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
#endif
#include <boost/graph/graphviz.hpp>
+#include <iostream>
namespace boost { namespace detail { namespace graph {
+#if 0
BOOST_GRAPH_DECL
bool read_graphviz(std::istream& in, mutate_graph& graph)
{
using namespace boost;
- using namespace boost::spirit::classic;
typedef std::istream_iterator<char> is_t;
- typedef multi_pass<is_t> iterator_t;
- iterator_t first(make_multi_pass(is_t(in)));
- iterator_t last(make_multi_pass(is_t()));
+ std::string str((is_t(in)), is_t());
- // Turn off white space skipping on the stream
- in.unsetf(std::ios::skipws);
-
- typedef skip_parser_iteration_policy< boost::detail::graph::dot_skipper>
- iter_policy_t;
- typedef scanner_policies<iter_policy_t> scanner_policies_t;
- typedef scanner<iterator_t, scanner_policies_t> scanner_t;
-
- boost::detail::graph::dot_grammar p(graph);
- boost::detail::graph::dot_skipper skip_p;
-
- iter_policy_t iter_policy(skip_p);
- scanner_policies_t policies(iter_policy);
-
- scanner_t scan(first, last, policies);
-
- return p.parse(scan);
+ return read_graphviz(str.begin(), str.end());
}
+#endif
} } } // end namespace boost::detail::graph
Modified: branches/release/libs/graph/test/CMakeLists.txt
==============================================================================
--- branches/release/libs/graph/test/CMakeLists.txt (original)
+++ branches/release/libs/graph/test/CMakeLists.txt 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,3 +1,9 @@
+# Copyright (C) 2008 Michael Jackson
+#
+# Use, modification and distribution is subject to 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)
+
boost_additional_test_dependencies(graph BOOST_DEPENDS test assign)
boost_test_run(transitive_closure_test)
@@ -18,6 +24,7 @@
boost_test_run(relaxed_heap_test ARGS 5000 15000)
boost_test_compile(edge_list_cc)
boost_test_compile(filtered_graph_cc)
+boost_test_run(generator_test)
boost_test_run(graph)
boost_test_compile(graph_concepts)
boost_test_run(graphviz_test
Modified: branches/release/libs/graph/test/Jamfile.v2
==============================================================================
--- branches/release/libs/graph/test/Jamfile.v2 (original)
+++ branches/release/libs/graph/test/Jamfile.v2 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -15,12 +15,19 @@
path-constant CYCLE_RATIO_INPUT_FILE : ./cycle_ratio_s382.90.dot ;
+path-constant METIS_INPUT_FILE : ./weighted_graph.gr ;
+
if [ modules.peek : EXPAT_INCLUDE ] && [ modules.peek : EXPAT_LIBPATH ]
{
optional_tests += [ run graphml_test.cpp ../build//boost_graph : : "graphml_test.xml" ] ;
}
test-suite graph_test :
+ # test_graphs will eventually defined a framework for testing the structure
+ # and implementation of graph data structures and adaptors.
+ [ run test_graphs.cpp ]
+ [ run index_graph.cpp ] # TODO: Make this part of the test_graphs framework
+ [ run labeled_graph.cpp ]
[ run transitive_closure_test.cpp ]
[ compile adj_list_cc.cpp ]
@@ -42,15 +49,19 @@
[ compile dfs_cc.cpp ]
[ compile dijkstra_cc.cpp ]
[ run dijkstra_heap_performance.cpp : 10000 ]
+ [ run dijkstra_no_color_map_compare.cpp : 10000 ]
[ run dominator_tree_test.cpp ]
[ run relaxed_heap_test.cpp : 5000 15000 ]
[ compile edge_list_cc.cpp ]
[ compile filtered_graph_cc.cpp ]
+ [ run generator_test.cpp ]
[ run graph.cpp ]
[ compile graph_concepts.cpp ]
[ run graphviz_test.cpp
/boost/test//boost_test_exec_monitor/<link>static
- ../build//boost_graph ]
+ ../build//boost_graph
+ ../../regex/build//boost_regex ]
+ [ run metis_test.cpp : $(METIS_INPUT_FILE) ]
[ run gursoy_atun_layout_test.cpp ]
[ run layout_test.cpp : : : <test-info>always_show_run_output <toolset>intel:<debug-symbols>off ]
@@ -59,65 +70,54 @@
: : : ]
[ compile reverse_graph_cc.cpp ]
-
[ run sequential_vertex_coloring.cpp ]
+ # TODO: Merge these into a single test framework.
[ run subgraph.cpp ../../test/build//boost_test_exec_monitor ]
+ [ run subgraph_bundled.cpp ]
+ [ run subgraph_props.cpp ]
[ run isomorphism.cpp ../../test/build//boost_test_exec_monitor ]
-
[ run adjacency_matrix_test.cpp ]
-
[ compile vector_graph_cc.cpp ]
-
[ compile copy.cpp ]
-
[ compile property_iter.cpp ]
-
[ run bundled_properties.cpp ]
-
[ run floyd_warshall_test.cpp ]
-
[ run astar_search_test.cpp ]
-
[ run biconnected_components_test.cpp ]
-
[ run cuthill_mckee_ordering.cpp ]
-
[ run king_ordering.cpp ]
-
[ run matching_test.cpp ]
-
[ run max_flow_test.cpp ]
-
[ run kolmogorov_max_flow_test.cpp ]
-
- [ run cycle_ratio_tests.cpp ../build//boost_graph : $(CYCLE_RATIO_INPUT_FILE) ]
-
+ [ run cycle_ratio_tests.cpp ../build//boost_graph ../../regex/build//boost_regex : $(CYCLE_RATIO_INPUT_FILE) ]
[ run basic_planarity_test.cpp ]
-
[ run make_connected_test.cpp ]
-
[ run make_bicon_planar_test.cpp ]
-
[ run make_maximal_planar_test.cpp ]
-
[ run named_vertices_test.cpp ]
-
[ run all_planar_input_files_test.cpp
../../filesystem/build
../../system/build
: $(PLANAR_INPUT_FILES) ]
-
[ run parallel_edges_loops_test.cpp
../../filesystem/build
../../system/build
: $(PLANAR_INPUT_FILES) ]
-
- # [ run r_c_shortest_paths_test.cpp ]
+ [ run r_c_shortest_paths_test.cpp ]
[ run is_straight_line_draw_test.cpp ]
- [ run metric_tsp_approx.cpp : metric_tsp_approx.txt ]
+ [ run metric_tsp_approx.cpp : metric_tsp_approx.graph ]
[ compile dimacs.cpp ]
+ [ run bron_kerbosch_all_cliques.cpp ]
+ [ run tiernan_all_cycles.cpp ]
+ [ run closeness_centrality.cpp ]
+ [ run degree_centrality.cpp ]
+ [ run mean_geodesic.cpp ]
+ [ run eccentricity.cpp ]
+ [ run clustering_coefficient.cpp ]
+ [ run core_numbers_test.cpp ]
+ [ run read_propmap.cpp ]
$(optional_tests)
;
@@ -125,11 +125,11 @@
# Run SDB tests only when -sSDB= is set.
if [ modules.peek : SDB ] != ""
{
- local SDB_DEPENDCIES =
+ local SDB_DEPENDENCIES =
<include>$(SGB) <library-file>$(SGB)/libgb.a ;
compile stanford_graph_cc.cpp
- $(SDB_DEPENDCIES) ;
+ $(SDB_DEPENDENCIES) ;
}
# Run LEDA tests only when -sLEDA= is set.
Modified: branches/release/libs/graph/test/adj_list_invalidation.cpp
==============================================================================
--- branches/release/libs/graph/test/adj_list_invalidation.cpp (original)
+++ branches/release/libs/graph/test/adj_list_invalidation.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,3 +1,8 @@
+// (C) Copyright Andrew Sutton 2009
+//
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0 (See accompanying file
+// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
#include <iostream>
#include <string>
Modified: branches/release/libs/graph/test/adj_list_loops.cpp
==============================================================================
--- branches/release/libs/graph/test/adj_list_loops.cpp (original)
+++ branches/release/libs/graph/test/adj_list_loops.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,3 +1,8 @@
+// (C) Copyright Andrew Sutton 2009
+//
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0 (See accompanying file
+// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
#if __GNUC__ == 4 && __GNUC_MINOR__ >= 3
# define BOOST_NO_HASH
Modified: branches/release/libs/graph/test/adjacency_matrix_test.cpp
==============================================================================
--- branches/release/libs/graph/test/adjacency_matrix_test.cpp (original)
+++ branches/release/libs/graph/test/adjacency_matrix_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -16,7 +16,7 @@
* Defines the boost::property_map class template and the boost::get and
* boost::put function templates.
*/
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
/*
* Defines the boost::graph_traits class template.
@@ -42,6 +42,12 @@
#include <boost/test/minimal.hpp>
+#include <vector>
+#include <algorithm> // For std::sort
+#include <boost/type_traits/is_convertible.hpp>
+
+#include <boost/graph/iteration_macros.hpp>
+
template<typename Graph1, typename Graph2>
void run_test()
{
@@ -194,6 +200,41 @@
BOOST_CHECK(boost::get(index_map1, boost::target(*iei1, g1)) == boost::get(index_map2, boost::target(*iei2, g2)));
}
}
+
+ // Test construction from a range of pairs
+ std::vector<std::pair<int, int> > edge_pairs_g1;
+ BGL_FORALL_EDGES_T(e, g1, Graph1) {
+ edge_pairs_g1.push_back(
+ std::make_pair(get(index_map1, source(e, g1)),
+ get(index_map1, target(e, g1))));
+ }
+ Graph2 g3(edge_pairs_g1.begin(), edge_pairs_g1.end(), num_vertices(g1));
+ BOOST_CHECK(num_vertices(g1) == num_vertices(g3));
+ std::vector<std::pair<int, int> > edge_pairs_g3;
+ IndexMap2 index_map3 = boost::get(boost::vertex_index_t(), g3);
+ BGL_FORALL_EDGES_T(e, g3, Graph2) {
+ edge_pairs_g3.push_back(
+ std::make_pair(get(index_map3, source(e, g3)),
+ get(index_map3, target(e, g3))));
+ }
+ // Normalize the edge pairs for comparison
+ if (boost::is_convertible<typename boost::graph_traits<Graph1>::directed_category*, boost::undirected_tag*>::value || boost::is_convertible<typename boost::graph_traits<Graph2>::directed_category*, boost::undirected_tag*>::value) {
+ for (size_t i = 0; i < edge_pairs_g1.size(); ++i) {
+ if (edge_pairs_g1[i].first < edge_pairs_g1[i].second) {
+ std::swap(edge_pairs_g1[i].first, edge_pairs_g1[i].second);
+ }
+ }
+ for (size_t i = 0; i < edge_pairs_g3.size(); ++i) {
+ if (edge_pairs_g3[i].first < edge_pairs_g3[i].second) {
+ std::swap(edge_pairs_g3[i].first, edge_pairs_g3[i].second);
+ }
+ }
+ }
+ std::sort(edge_pairs_g1.begin(), edge_pairs_g1.end());
+ std::sort(edge_pairs_g3.begin(), edge_pairs_g3.end());
+ edge_pairs_g1.erase(std::unique(edge_pairs_g1.begin(), edge_pairs_g1.end()), edge_pairs_g1.end());
+ edge_pairs_g3.erase(std::unique(edge_pairs_g3.begin(), edge_pairs_g3.end()), edge_pairs_g3.end());
+ BOOST_CHECK(edge_pairs_g1 == edge_pairs_g3);
}
template <typename Graph>
Modified: branches/release/libs/graph/test/all_planar_input_files_test.cpp
==============================================================================
--- branches/release/libs/graph/test/all_planar_input_files_test.cpp (original)
+++ branches/release/libs/graph/test/all_planar_input_files_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -25,7 +25,7 @@
#include <utility>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/filesystem.hpp>
Modified: branches/release/libs/graph/test/basic_planarity_test.cpp
==============================================================================
--- branches/release/libs/graph/test/basic_planarity_test.cpp (original)
+++ branches/release/libs/graph/test/basic_planarity_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -9,8 +9,8 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/boyer_myrvold_planar_test.hpp>
-#include <boost/property_map.hpp>
-#include <boost/vector_property_map.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/property_map/vector_property_map.hpp>
#include <boost/test/minimal.hpp>
Modified: branches/release/libs/graph/test/betweenness_centrality_test.cpp
==============================================================================
--- branches/release/libs/graph/test/betweenness_centrality_test.cpp (original)
+++ branches/release/libs/graph/test/betweenness_centrality_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,7 +12,7 @@
#include <vector>
#include <stack>
#include <queue>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/test/minimal.hpp>
#include <boost/random/uniform_01.hpp>
#include <boost/random/linear_congruential.hpp>
Modified: branches/release/libs/graph/test/csr_graph_test.cpp
==============================================================================
--- branches/release/libs/graph/test/csr_graph_test.cpp (original)
+++ branches/release/libs/graph/test/csr_graph_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -13,6 +13,9 @@
# undef _GLIBCXX_DEBUG
#endif
+// Use new CSR interface
+#define BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+
// Test for the compressed sparse row graph type
#include <boost/graph/compressed_sparse_row_graph.hpp>
#include <boost/graph/adjacency_list.hpp>
@@ -80,6 +83,14 @@
std::sort(edges1.begin(), edges1.end());
std::sort(edges2.begin(), edges2.end());
+ if (edges1 != edges2) {
+ std::cerr << "edges1:";
+ for (size_t i = 0; i < edges1.size(); ++i) std::cerr << " " << edges1[i];
+ std::cerr << std::endl;
+ std::cerr << "edges2:";
+ for (size_t i = 0; i < edges2.size(); ++i) std::cerr << " " << edges2[i];
+ std::cerr << std::endl;
+ }
BOOST_CHECK (edges1 == edges2);
}
}
@@ -149,19 +160,29 @@
void check_consistency(const CSRGraphT& g) {
// Do a bunch of tests on the graph internal data
+#ifndef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
// Check that m_last_source is valid
BOOST_CHECK(g.m_last_source <= num_vertices(g));
+#endif // !BOOST_GRAPH_USE_NEW_CSR_INTERFACE
// Check that m_rowstart entries are valid, and that entries after
// m_last_source + 1 are all zero
BOOST_CHECK(g.m_rowstart[0] == 0);
- for (CSRGraphT::vertices_size_type i = 0; i < g.m_last_source; ++i) {
+ for (CSRGraphT::vertices_size_type i = 0;
+#ifdef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+ i < num_vertices(g);
+#else // !BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+ i < g.m_last_source;
+#endif // BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+ ++i) {
BOOST_CHECK(g.m_rowstart[i + 1] >= g.m_rowstart[i]);
BOOST_CHECK(g.m_rowstart[i + 1] <= num_edges(g));
}
+#ifndef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
for (CSRGraphT::vertices_size_type i = g.m_last_source + 1;
i < g.m_rowstart.size(); ++i) {
BOOST_CHECK(g.m_rowstart[i] == 0);
}
+#endif // !BOOST_GRAPH_USE_NEW_CSR_INTERFACE
// Check that m_column entries are within range
for (CSRGraphT::edges_size_type i = 0; i < num_edges(g); ++i) {
BOOST_CHECK(g.m_column[i] < num_vertices(g));
@@ -169,7 +190,7 @@
}
template<typename OrigGraph>
-void test(const OrigGraph& g)
+void graph_test(const OrigGraph& g)
{
// Check copying of a graph
CSRGraphT g2(g);
@@ -181,11 +202,12 @@
boost::identity_property_map());
// Check constructing a graph from iterators
- CSRGraphT g3(boost::make_transform_iterator(edges(g2).first,
- make_edge_to_index_pair(g2)),
- boost::make_transform_iterator(edges(g2).second,
- make_edge_to_index_pair(g2)),
- num_vertices(g));
+ CSRGraphT g3(boost::edges_are_sorted,
+ boost::make_transform_iterator(edges(g2).first,
+ make_edge_to_index_pair(g2)),
+ boost::make_transform_iterator(edges(g2).second,
+ make_edge_to_index_pair(g2)),
+ num_vertices(g));
check_consistency(g3);
BOOST_CHECK((std::size_t)std::distance(edges(g3).first, edges(g3).second)
== num_edges(g3));
@@ -193,6 +215,81 @@
g3, boost::identity_property_map(),
boost::identity_property_map());
+#ifdef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+ // Check constructing a graph using in-place modification of vectors
+ {
+ std::vector<std::size_t> sources(num_edges(g2));
+ std::vector<std::size_t> targets(num_edges(g2));
+ std::size_t idx = 0;
+ // Edges actually sorted
+ BGL_FORALL_EDGES(e, g2, CSRGraphT) {
+ sources[idx] = source(e, g2);
+ targets[idx] = target(e, g2);
+ ++idx;
+ }
+ CSRGraphT g3a(boost::construct_inplace_from_sources_and_targets,
+ sources,
+ targets,
+ num_vertices(g2));
+ check_consistency(g3a);
+ assert_graphs_equal(g2, boost::identity_property_map(),
+ g3a, boost::identity_property_map(),
+ boost::identity_property_map());
+ }
+ {
+ std::vector<std::size_t> sources(num_edges(g2));
+ std::vector<std::size_t> targets(num_edges(g2));
+ std::size_t idx = 0;
+ // Edges reverse-sorted
+ BGL_FORALL_EDGES(e, g2, CSRGraphT) {
+ sources[num_edges(g2) - 1 - idx] = source(e, g2);
+ targets[num_edges(g2) - 1 - idx] = target(e, g2);
+ ++idx;
+ }
+ CSRGraphT g3a(boost::construct_inplace_from_sources_and_targets,
+ sources,
+ targets,
+ num_vertices(g2));
+ check_consistency(g3a);
+ assert_graphs_equal(g2, boost::identity_property_map(),
+ g3a, boost::identity_property_map(),
+ boost::identity_property_map());
+ }
+ {
+ std::vector<std::size_t> sources(num_edges(g2));
+ std::vector<std::size_t> targets(num_edges(g2));
+ std::size_t idx = 0;
+ // Edges scrambled using Fisher-Yates shuffle (Durstenfeld variant) from
+ // Wikipedia
+ BGL_FORALL_EDGES(e, g2, CSRGraphT) {
+ sources[idx] = source(e, g2);
+ targets[idx] = target(e, g2);
+ ++idx;
+ }
+ boost::minstd_rand gen(1);
+ if (num_edges(g) != 0) {
+ for (std::size_t i = num_edges(g) - 1; i > 0; --i) {
+ std::size_t scrambled = boost::uniform_int<>(0, i)(gen);
+ if (scrambled == i) continue;
+ using std::swap;
+ swap(sources[i], sources[scrambled]);
+ swap(targets[i], targets[scrambled]);
+ }
+ }
+ CSRGraphT g3a(boost::construct_inplace_from_sources_and_targets,
+ sources,
+ targets,
+ num_vertices(g2));
+ check_consistency(g3a);
+ assert_graphs_equal(g2, boost::identity_property_map(),
+ g3a, boost::identity_property_map(),
+ boost::identity_property_map());
+ }
+#endif // BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+
+ CSRGraphT::edge_iterator ei, ei_end;
+
+#ifndef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
// Check constructing a graph using add_edge and add_vertices
CSRGraphT g4;
BOOST_CHECK(num_vertices(g4) == 0);
@@ -202,7 +299,6 @@
BOOST_CHECK(first_vert == 0);
BOOST_CHECK(num_vertices(g4) == num_vertices(g3));
- CSRGraphT::edge_iterator ei, ei_end;
int i;
for (boost::tie(ei, ei_end) = edges(g3), i = 0; ei != ei_end; ++ei, ++i) {
CSRGraphT::edge_descriptor e = add_edge(source(*ei, g3), target(*ei, g3), g4);
@@ -213,22 +309,21 @@
assert_graphs_equal(g3, boost::identity_property_map(),
g4, boost::identity_property_map(),
boost::identity_property_map());
+#endif // !BOOST_GRAPH_USE_NEW_CSR_INTERFACE
// Check edge_from_index (and implicitly the edge_index property map) for
// each edge in g2
- // This test also checks for the correct sorting of the edge iteration
std::size_t last_src = 0, last_tgt = 0;
for (boost::tie(ei, ei_end) = edges(g2); ei != ei_end; ++ei) {
BOOST_CHECK(edge_from_index(get(boost::edge_index, g2, *ei), g2) == *ei);
std::size_t src = get(boost::vertex_index, g2, source(*ei, g2));
std::size_t tgt = get(boost::vertex_index, g2, target(*ei, g2));
- BOOST_CHECK(src > last_src || (src == last_src && tgt >= last_tgt));
+ BOOST_CHECK(src >= last_src);
last_src = src;
last_tgt = tgt;
}
// Check out edge iteration and vertex iteration for sortedness
- // Also, check a few runs of edge and edge_range
CSRGraphT::vertex_iterator vi, vi_end;
std::size_t last_vertex = 0;
bool first_iter = true;
@@ -239,25 +334,8 @@
first_iter = false;
CSRGraphT::out_edge_iterator oei, oei_end;
- std::size_t last_tgt = 0;
for (boost::tie(oei, oei_end) = out_edges(*vi, g2); oei != oei_end; ++oei) {
BOOST_CHECK(source(*oei, g2) == *vi);
- CSRGraphT::vertex_descriptor tgtd = target(*oei, g2);
- std::size_t tgt = get(boost::vertex_index, g2, tgtd);
- BOOST_CHECK(tgt >= last_tgt);
- last_tgt = tgt;
-
- std::pair<CSRGraphT::edge_descriptor, bool> edge_info = edge(*vi, tgtd, g2);
- BOOST_CHECK(edge_info.second == true);
- BOOST_CHECK(source(edge_info.first, g2) == *vi);
- BOOST_CHECK(target(edge_info.first, g2) == tgtd);
- std::pair<CSRGraphT::out_edge_iterator, CSRGraphT::out_edge_iterator> er =
- edge_range(*vi, tgtd, g2);
- BOOST_CHECK(er.first != er.second);
- for (; er.first != er.second; ++er.first) {
- BOOST_CHECK(source(*er.first, g2) == *vi);
- BOOST_CHECK(target(*er.first, g2) == tgtd);
- }
}
// Find a vertex for testing
@@ -268,14 +346,6 @@
if (target(*oei2, g2) == test_vertex)
++edge_count;
}
-
- // Test edge and edge_range on an edge that may not be present
- std::pair<CSRGraphT::edge_descriptor, bool> edge_info =
- edge(*vi, test_vertex, g2);
- BOOST_CHECK(edge_info.second == (edge_count != 0));
- std::pair<CSRGraphT::out_edge_iterator, CSRGraphT::out_edge_iterator> er =
- edge_range(*vi, test_vertex, g2);
- BOOST_CHECK(er.second - er.first == edge_count);
}
// Run brandes_betweenness_centrality, which touches on a whole lot
@@ -308,12 +378,12 @@
get(boost::edge_index, g3))));
}
-void test(int nnodes, double density, int seed)
+void graph_test(int nnodes, double density, int seed)
{
boost::minstd_rand gen(seed);
std::cout << "Testing " << nnodes << " density " << density << std::endl;
GraphT g(ERGen(gen, nnodes, density), ERGen(), nnodes);
- test(g);
+ graph_test(g);
}
void test_graph_properties()
@@ -356,7 +426,7 @@
double weights[6] = { 1.0, 1.0, 0.5, 1.0, 1.0, 0.5 };
double centrality[5] = { 0.0, 1.5, 0.0, 1.0, 0.5 };
- CSRGraphWithPropsT g(&edges_init[0], &edges_init[0] + 6, &weights[0], 5, 6);
+ CSRGraphWithPropsT g(boost::edges_are_sorted, &edges_init[0], &edges_init[0] + 6, &weights[0], 5, 6);
brandes_betweenness_centrality
(g,
centrality_map(get(&Vertex::centrality, g)).
@@ -377,13 +447,14 @@
{
std::cout << "Testing empty graph" << std::endl;
CSRGraphT g;
- test(g);
+ graph_test(g);
}
- // test(1000, 0.05, seed);
- // test(1000, 0.0, seed);
- // test(1000, 0.1, seed);
- test(1000, 0.001, seed);
- test(1000, 0.0005, seed);
+ // graph_test(1000, 0.05, seed);
+ // graph_test(1000, 0.0, seed);
+ // graph_test(1000, 0.1, seed);
+ graph_test(1000, 0.001, seed);
+ graph_test(1000, 0.0005, seed);
+#ifndef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
{
std::cout << "Testing partially constructed CSR graph" << std::endl;
CSRGraphT g;
@@ -398,11 +469,21 @@
for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei) {
BOOST_CHECK(edge_from_index(get(boost::edge_index, g, *ei), g) == *ei);
}
- test(g);
+ graph_test(g);
}
+#endif // !BOOST_GRAPH_USE_NEW_CSR_INTERFACE
test_graph_properties();
test_vertex_and_edge_properties();
+#ifdef BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+ {
+ std::cout << "Testing CSR graph built from unsorted edges" << std::endl;
+ std::pair<int, int> unsorted_edges[] = {std::make_pair(5, 0), std::make_pair(3, 2), std::make_pair(4, 1), std::make_pair(4, 0), std::make_pair(0, 2), std::make_pair(5, 2)};
+ CSRGraphT g(boost::edges_are_unsorted, unsorted_edges, unsorted_edges + sizeof(unsorted_edges) / sizeof(*unsorted_edges), 6);
+ graph_test(g);
+ }
+#endif // BOOST_GRAPH_USE_NEW_CSR_INTERFACE
+
return 0;
}
Modified: branches/release/libs/graph/test/dag_longest_paths.cpp
==============================================================================
--- branches/release/libs/graph/test/dag_longest_paths.cpp (original)
+++ branches/release/libs/graph/test/dag_longest_paths.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -6,7 +6,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/dag_shortest_paths.hpp>
-#include <boost/vector_property_map.hpp>
+#include <boost/property_map/vector_property_map.hpp>
#include <boost/test/minimal.hpp>
using namespace boost;
Modified: branches/release/libs/graph/test/dijkstra_cc.cpp
==============================================================================
--- branches/release/libs/graph/test/dijkstra_cc.cpp (original)
+++ branches/release/libs/graph/test/dijkstra_cc.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -10,6 +10,7 @@
#include <boost/config.hpp>
#include <boost/concept_archetype.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>
+#include <boost/graph/dijkstra_shortest_paths_no_color_map.hpp>
#include <boost/graph/graph_archetypes.hpp>
typedef boost::default_constructible_archetype<
@@ -50,6 +51,11 @@
vertex_index_map(index).
weight_map(weight).
distance_map(distance));
+
+ dijkstra_shortest_paths_no_color_map(g, s,
+ vertex_index_map(index).
+ weight_map(weight).
+ distance_map(distance));
}
{
typedef incidence_graph_archetype<vertex_t, directed_tag,
@@ -66,6 +72,10 @@
dijkstra_shortest_paths(g, s,
predecessor_map(pred).
weight_map(weight));
+
+ dijkstra_shortest_paths_no_color_map(g, s,
+ predecessor_map(pred).
+ weight_map(weight));
}
{
typedef incidence_graph_archetype<vertex_t, directed_tag,
@@ -81,6 +91,10 @@
dijkstra_shortest_paths(g, s,
predecessor_map(pred).
vertex_index_map(index));
+
+ dijkstra_shortest_paths_no_color_map(g, s,
+ predecessor_map(pred).
+ vertex_index_map(index));
}
{
typedef incidence_graph_archetype<vertex_t, directed_tag,
@@ -109,6 +123,14 @@
distance_combine(combine).
distance_compare(compare).
visitor(vis));
+
+ dijkstra_shortest_paths_no_color_map(g, s,
+ vertex_index_map(index).
+ weight_map(weight).
+ distance_map(distance).
+ distance_combine(combine).
+ distance_compare(compare).
+ visitor(vis));
}
return 0;
}
Modified: branches/release/libs/graph/test/dijkstra_heap_performance.cpp
==============================================================================
--- branches/release/libs/graph/test/dijkstra_heap_performance.cpp (original)
+++ branches/release/libs/graph/test/dijkstra_heap_performance.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,6 +11,7 @@
#endif
#include <boost/graph/dijkstra_shortest_paths.hpp>
+#include <boost/graph/dijkstra_shortest_paths_no_color_map.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/random/linear_congruential.hpp>
#include <boost/lexical_cast.hpp>
@@ -104,8 +105,9 @@
std::vector<double> binary_heap_distances(n);
std::vector<double> relaxed_heap_distances(n);
+ std::vector<double> no_color_map_distances(n);
- // Run binary heap version
+ // Run binary or d-ary heap version
std::cout << "Running Dijkstra's with binary heap...";
std::cout.flush();
timer t;
@@ -120,7 +122,11 @@
std::cout << binary_heap_time << " seconds.\n";
// Run relaxed heap version
+#ifdef BOOST_GRAPH_DIJKSTRA_USE_RELAXED_HEAP
std::cout << "Running Dijkstra's with relaxed heap...";
+#else
+ std::cout << "Running Dijkstra's with d-ary heap (d=4)...";
+#endif
std::cout.flush();
t.restart();
#ifdef BOOST_GRAPH_DIJKSTRA_TESTING_DIETMAR
@@ -137,6 +143,40 @@
// Verify that the results are equivalent
BOOST_TEST(binary_heap_distances == relaxed_heap_distances);
+ // Run Michael's no-color-map version
+#ifdef BOOST_GRAPH_DIJKSTRA_USE_RELAXED_HEAP
+ std::cout << "Running Dijkstra's (no color map) with relaxed heap...";
+#else
+ std::cout << "Running Dijkstra's (no color map) with d-ary heap (d=4)...";
+#endif
+ std::cout.flush();
+ t.restart();
+#ifdef BOOST_GRAPH_DIJKSTRA_TESTING_DIETMAR
+ dijkstra_heap_kind = dijkstra_relaxed_heap;
+#else
+ dijkstra_relaxed_heap = true;
+#endif
+ dijkstra_shortest_paths_no_color_map
+ (g, vertex(0, g),
+ boost::dummy_property_map(),
+ boost::make_iterator_property_map(&no_color_map_distances[0],
+ get(boost::vertex_index, g),
+ 0.),
+ get(boost::edge_weight, g),
+ get(boost::vertex_index, g),
+ std::less<double>(),
+ boost::closed_plus<double>(),
+ (std::numeric_limits<double>::max)(),
+ 0,
+ make_dijkstra_visitor(null_visitor())
+ );
+ double no_color_map_time = t.elapsed();
+ std::cout << no_color_map_time << " seconds.\n"
+ << "Speedup = " << (binary_heap_time / no_color_map_time) << ".\n";
+
+ // Verify that the results are equivalent
+ BOOST_TEST(binary_heap_distances == no_color_map_distances);
+
#ifdef BOOST_GRAPH_DIJKSTRA_TESTING_DIETMAR
run_test(g, "d-ary heap (d=2)", dijkstra_d_heap_2, binary_heap_distances);
run_test(g, "d-ary heap (d=3)", dijkstra_d_heap_3, binary_heap_distances);
Modified: branches/release/libs/graph/test/dimacs.cpp
==============================================================================
--- branches/release/libs/graph/test/dimacs.cpp (original)
+++ branches/release/libs/graph/test/dimacs.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,3 +1,8 @@
+// (C) Copyright Andrew Sutton 2009
+//
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0 (See accompanying file
+// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
#include <boost/graph/read_dimacs.hpp>
#include <boost/graph/write_dimacs.hpp>
Modified: branches/release/libs/graph/test/graphml_test.cpp
==============================================================================
--- branches/release/libs/graph/test/graphml_test.cpp (original)
+++ branches/release/libs/graph/test/graphml_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -29,6 +29,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphml.hpp>
#include <fstream>
+#include <string>
using namespace std;
using namespace boost;
@@ -36,12 +37,14 @@
int main(int argc, char** argv)
{
typedef adjacency_list<vecS,vecS,directedS,
- property<vertex_color_t,int>,
+ property<vertex_color_t,int,
+ property<vertex_name_t,string> >,
property<edge_weight_t,double> > graph_t;
graph_t g;
dynamic_properties dp;
dp.property("foo",get(vertex_color_t(),g));
dp.property("weight",get(edge_weight_t(),g));
+ dp.property("name",get(vertex_name_t(),g));
ifstream ifile(argv[1]);
read_graphml(ifile, g, dp);
@@ -62,6 +65,7 @@
dynamic_properties dp2;
dp2.property("foo",get(vertex_color_t(),g2));
dp2.property("weight",get(edge_weight_t(),g2));
+ dp2.property("name",get(vertex_name_t(),g2));
ifile.open("graphml_test_out.xml");
read_graphml(ifile, g2, dp2);
ifile.close();
Modified: branches/release/libs/graph/test/graphml_test.xml
==============================================================================
--- branches/release/libs/graph/test/graphml_test.xml (original)
+++ branches/release/libs/graph/test/graphml_test.xml 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,4 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (C) 2006 Tiago de Paula Peixoto <tiago_at_[hidden]>
+
+ 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)
+
+ Authors: Tiago de Paula Peixoto
+-->
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<key id="d1" for="node" attr.name="foo" attr.type="int">
<default>42</default>
@@ -6,6 +15,9 @@
<key id="d2" for="edge" attr.name="weight" attr.type="double">
<default>0.0</default>
</key>
+ <key id="d3" for="node" attr.name="name" attr.type="string">
+ <default>hello</default>
+ </key>
<graph id="G" edgedefault="directed">
<node id="n0"/>
@@ -14,7 +26,9 @@
<data key="d1">100</data>
</node>
<node id="n3"/>
- <node id="n4"/>
+ <node id="n4">
+ <data key="d3">foo<</data>
+ </node>
<node id="n5"/>
<node id="n6">
<data key="d1">0</data>
Modified: branches/release/libs/graph/test/graphviz_test.cpp
==============================================================================
--- branches/release/libs/graph/test/graphviz_test.cpp (original)
+++ branches/release/libs/graph/test/graphviz_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,14 +11,14 @@
// Author: Ronald Garcia
-//#define BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
#define BOOST_GRAPHVIZ_USE_ISTREAM
+#include <boost/regex.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/assign/std/map.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/tuple/tuple.hpp>
-#include <boost/dynamic_property_map.hpp>
+#include <boost/property_map/dynamic_property_map.hpp>
#include <boost/test/test_tools.hpp>
#include <boost/test/floating_point_comparison.hpp>
#include <algorithm>
@@ -31,9 +31,6 @@
using namespace std;
using namespace boost;
-#ifndef BOOST_GRAPHVIZ_USE_ISTREAM
-using namespace boost::spirit;
-#endif
using namespace boost::assign;
typedef std::string node_t;
@@ -43,7 +40,8 @@
typedef std::map<edge_t,double> weight_map_t;
template <typename Directedness, typename OutEdgeList>
-bool test_graph(std::istream& dotfile, mass_map_t const& masses,
+bool test_graph(std::istream& dotfile, std::size_t correct_num_vertices,
+ mass_map_t const& masses,
weight_map_t const& weights,
std::string const& node_id = "node_id",
std::string const& g_name = std::string()) {
@@ -79,11 +77,14 @@
if(read_graphviz(dotfile,graph,dp,node_id)) {
#else
std::string data;
+ dotfile >> std::noskipws;
std::copy(std::istream_iterator<char>(dotfile),
std::istream_iterator<char>(),
std::back_inserter(data));
if(read_graphviz(data.begin(),data.end(),graph,dp,node_id)) {
#endif
+ // check correct vertex count
+ BOOST_CHECK_EQUAL(num_vertices(graph), correct_num_vertices);
// check masses
if(!masses.empty()) {
// assume that all the masses have been set
@@ -139,16 +140,25 @@
mass_map_t masses;
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
gs_t gs("digraph { a node [mass = 7.7] c e [mass = 6.66] }");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,masses,weight_map_t())));
+ BOOST_CHECK((test_graph<directedS,vecS>(gs,3,masses,weight_map_t())));
+ }
+
+ {
+ mass_map_t masses;
+ insert ( masses ) ("a",0.0f) ("e", 6.66f);
+ gs_t gs("digraph { a node [mass = 7.7] \"a\" e [mass = 6.66] }");
+ BOOST_CHECK((test_graph<directedS,vecS>(gs,2,masses,weight_map_t())));
}
{
weight_map_t weights;
insert( weights )(make_pair("a","b"),0.0)
- (make_pair("c","d"),7.7)(make_pair("e","f"),6.66);
- gs_t gs("digraph { a -> b edge [weight = 7.7] "
- "c -> d e-> f [weight = 6.66] }");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,mass_map_t(),weights)));
+ (make_pair("c","d"),7.7)(make_pair("e","f"),6.66)
+ (make_pair("d","e"),0.5)(make_pair("e","a"),0.5);
+ gs_t gs("digraph { a -> b eDge [weight = 7.7] "
+ "c -> d e-> f [weight = 6.66] "
+ "d ->e->a [weight=.5]}");
+ BOOST_CHECK((test_graph<directedS,vecS>(gs,6,mass_map_t(),weights)));
}
// undirected graph with alternate node_id property name
@@ -156,7 +166,7 @@
mass_map_t masses;
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
gs_t gs("graph { a node [mass = 7.7] c e [mass = 6.66] }");
- BOOST_CHECK((test_graph<undirectedS,vecS>(gs,masses,weight_map_t(),
+ BOOST_CHECK((test_graph<undirectedS,vecS>(gs,3,masses,weight_map_t(),
"nodenames")));
}
@@ -164,8 +174,8 @@
{
mass_map_t masses;
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
- gs_t gs("graph { a node [mass = 7.7] c e [mass = 6.66] }");
- BOOST_CHECK((test_graph<undirectedS,vecS>(gs,masses,weight_map_t())));
+ gs_t gs("graph { a node [mass = 7.7] c e [mass =\\\n6.66] }");
+ BOOST_CHECK((test_graph<undirectedS,vecS>(gs,3,masses,weight_map_t())));
}
{
@@ -174,7 +184,7 @@
(make_pair("c","d"),7.7)(make_pair("e","f"),6.66);
gs_t gs("graph { a -- b eDge [weight = 7.7] "
"c -- d e -- f [weight = 6.66] }");
- BOOST_CHECK((test_graph<undirectedS,vecS>(gs,mass_map_t(),weights)));
+ BOOST_CHECK((test_graph<undirectedS,vecS>(gs,6,mass_map_t(),weights)));
}
// Mismatch directed graph test
@@ -183,7 +193,7 @@
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
gs_t gs("graph { a nodE [mass = 7.7] c e [mass = 6.66] }");
try {
- test_graph<directedS,vecS>(gs,masses,weight_map_t());
+ test_graph<directedS,vecS>(gs,3,masses,weight_map_t());
BOOST_ERROR("Failed to throw boost::directed_graph_error.");
} catch (boost::undirected_graph_error&) {}
}
@@ -194,7 +204,7 @@
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
gs_t gs("digraph { a node [mass = 7.7] c e [mass = 6.66] }");
try {
- test_graph<undirectedS,vecS>(gs,masses,weight_map_t());
+ test_graph<undirectedS,vecS>(gs,3,masses,weight_map_t());
BOOST_ERROR("Failed to throw boost::directed_graph_error.");
} catch (boost::directed_graph_error&) {}
}
@@ -205,7 +215,7 @@
insert( weights )(make_pair("a","b"),7.7);
gs_t gs("diGraph { a -> b [weight = 7.7] a -> b [weight = 7.7] }");
try {
- test_graph<directedS,setS>(gs,mass_map_t(),weights);
+ test_graph<directedS,setS>(gs,2,mass_map_t(),weights);
BOOST_ERROR("Failed to throw boost::bad_parallel_edge.");
} catch (boost::bad_parallel_edge&) {}
}
@@ -215,16 +225,16 @@
weight_map_t weights;
insert( weights )(make_pair("a","b"),7.7);
gs_t gs("digraph { a -> b [weight = 7.7] a -> b [weight = 7.7] }");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,mass_map_t(),weights)));
+ BOOST_CHECK((test_graph<directedS,vecS>(gs,2,mass_map_t(),weights)));
}
// Graph Property Test 1
{
mass_map_t masses;
insert ( masses ) ("a",0.0f) ("c",0.0f) ("e", 6.66f);
- gs_t gs("digraph { graph [name=\"foo\"] a c e [mass = 6.66] }");
- std::string graph_name("foo");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,masses,weight_map_t(),"",
+ gs_t gs("digraph { graph [name=\"foo \\\"escaped\\\"\"] a c e [mass = 6.66] }");
+ std::string graph_name("foo \"escaped\"");
+ BOOST_CHECK((test_graph<directedS,vecS>(gs,3,masses,weight_map_t(),"",
graph_name)));
}
@@ -232,9 +242,19 @@
{
mass_map_t masses;
insert ( masses ) ("a",0.0f) ("c",0.0f) ("e", 6.66f);
- gs_t gs("digraph { name=\"foo\" a c e [mass = 6.66] }");
+ gs_t gs("digraph { name=\"fo\"+ \"\\\no\" a c e [mass = 6.66] }");
std::string graph_name("foo");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,masses,weight_map_t(),"",
+ BOOST_CHECK((test_graph<directedS,vecS>(gs,3,masses,weight_map_t(),"",
+ graph_name)));
+ }
+
+ // Graph Property Test 3 (HTML)
+ {
+ mass_map_t masses;
+ insert ( masses ) ("a",0.0f) ("c",0.0f) ("e", 6.66f);
+ std::string graph_name = "<html title=\"x'\" title2='y\"'>foo<b><![CDATA[><bad tag&>]]>bar</b>\n<br/>\nbaz</html>";
+ gs_t gs("digraph { name=" + graph_name + " a c e [mass = 6.66] }");
+ BOOST_CHECK((test_graph<directedS,vecS>(gs,3,masses,weight_map_t(),"",
graph_name)));
}
@@ -246,7 +266,7 @@
"a1 [ label = \"//depot/path/to/file_29#9\" ];"
"a0 -> a1 [ color=gray ];"
"}");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,mass_map_t(),weight_map_t())));
+ BOOST_CHECK((test_graph<directedS,vecS>(gs,2,mass_map_t(),weight_map_t())));
}
return 0;
}
Modified: branches/release/libs/graph/test/is_straight_line_draw_test.cpp
==============================================================================
--- branches/release/libs/graph/test/is_straight_line_draw_test.cpp (original)
+++ branches/release/libs/graph/test/is_straight_line_draw_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -6,7 +6,7 @@
// http://www.boost.org/LICENSE_1_0.txt)
//=======================================================================
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/test/minimal.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
Modified: branches/release/libs/graph/test/isomorphism.cpp
==============================================================================
--- branches/release/libs/graph/test/isomorphism.cpp (original)
+++ branches/release/libs/graph/test/isomorphism.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -24,7 +24,7 @@
#include <boost/test/minimal.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/isomorphism.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/random/variate_generator.hpp>
#include <boost/random/uniform_real.hpp>
#include <boost/random/uniform_int.hpp>
Modified: branches/release/libs/graph/test/johnson-test.cpp
==============================================================================
--- branches/release/libs/graph/test/johnson-test.cpp (original)
+++ branches/release/libs/graph/test/johnson-test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -27,7 +27,7 @@
#include <iostream>
#include <vector>
#include <iomanip>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/graph/johnson_all_pairs_shortest.hpp>
Modified: branches/release/libs/graph/test/kolmogorov_max_flow_test.cpp
==============================================================================
--- branches/release/libs/graph/test/kolmogorov_max_flow_test.cpp (original)
+++ branches/release/libs/graph/test/kolmogorov_max_flow_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -41,7 +41,7 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/adjacency_matrix.hpp>
#include <boost/graph/random.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/random/linear_congruential.hpp>
#include <boost/lexical_cast.hpp>
@@ -241,7 +241,7 @@
return;
typename std::list<tVertex>::const_iterator it = find(tSuper::m_orphans.begin(), tSuper::m_orphans.end(), v);
// a node is active, if its in the active_list AND (is has_a_parent, or its already in the orphans_list or its the sink, or its the source)
- bool is_active = (tSuper::m_in_active_list_map[v] && (has_parent(v) || it != tSuper::m_orphans.end() ));
+ bool is_active = (tSuper::m_in_active_list_map[v] && (tSuper::has_parent(v) || it != tSuper::m_orphans.end() ));
if(get_tree(v) != tColorTraits::gray() && !is_active){
typename graph_traits<Graph>::out_edge_iterator ei,e_end;
for(tie(ei, e_end) = out_edges(v, tSuper::m_g); ei != e_end; ++ei){
Modified: branches/release/libs/graph/test/layout_test.cpp
==============================================================================
--- branches/release/libs/graph/test/layout_test.cpp (original)
+++ branches/release/libs/graph/test/layout_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,6 +11,7 @@
#include <boost/graph/kamada_kawai_spring_layout.hpp>
#include <boost/graph/circle_layout.hpp>
#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/point_traits.hpp>
#include <boost/random/linear_congruential.hpp>
#include <boost/test/minimal.hpp>
#include <iostream>
@@ -22,30 +23,26 @@
enum vertex_position_t { vertex_position };
namespace boost { BOOST_INSTALL_PROPERTY(vertex, position); }
-struct point
-{
- double x;
- double y;
-};
+typedef square_topology<>::point_type point;
-template<typename Graph, typename PositionMap>
-void print_graph_layout(const Graph& g, PositionMap position)
+template<typename Graph, typename PositionMap, typename Topology>
+void print_graph_layout(const Graph& g, PositionMap position, const Topology& topology)
{
- typename graph_traits<Graph>::vertex_iterator vi, vi_end;
- int xmin = 0, xmax = 0, ymin = 0, ymax = 0;
- for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
- if ((int)position[*vi].x < xmin) xmin = (int)position[*vi].x;
- if ((int)position[*vi].x > xmax) xmax = (int)position[*vi].x;
- if ((int)position[*vi].y < ymin) ymin = (int)position[*vi].y;
- if ((int)position[*vi].y > ymax) ymax = (int)position[*vi].y;
+ typedef typename Topology::point_type Point;
+ // Find min/max ranges
+ Point min_point = position[*vertices(g).first], max_point = min_point;
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ min_point = topology.pointwise_min(min_point, position[v]);
+ max_point = topology.pointwise_max(max_point, position[v]);
}
- for (int y = ymin; y <= ymax; ++y) {
- for (int x = xmin; x <= xmax; ++x) {
+ for (int y = (int)min_point[1]; y <= (int)max_point[1]; ++y) {
+ for (int x = (int)min_point[0]; x <= (int)max_point[0]; ++x) {
+ typename graph_traits<Graph>::vertex_iterator vi, vi_end;
// Find vertex at this position
typename graph_traits<Graph>::vertices_size_type index = 0;
for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi, ++index) {
- if ((int)position[*vi].x == x && (int)position[*vi].y == y)
+ if ((int)position[*vi][0] == x && (int)position[*vi][1] == y)
break;
}
@@ -65,7 +62,7 @@
typename graph_traits<Graph>::vertex_iterator vi, vi_end;
for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
out << " n" << get(vertex_index, g, *vi) << "[ pos=\""
- << (int)position[*vi].x + 25 << ", " << (int)position[*vi].y + 25
+ << (int)position[*vi][0] + 25 << ", " << (int)position[*vi][1] + 25
<< "\" ];\n";
}
@@ -96,7 +93,8 @@
circle_graph_layout(g, get(vertex_position, g), 10.0);
std::cout << "Regular polygon layout with " << n << " points.\n";
- print_graph_layout(g, get(vertex_position, g));
+ square_topology<> topology;
+ print_graph_layout(g, get(vertex_position, g), topology);
}
struct simple_edge
@@ -149,6 +147,7 @@
bool ok = kamada_kawai_spring_layout(g,
get(vertex_position, g),
get(edge_weight, g),
+ square_topology<>(50.0),
side_length(50.0));
BOOST_CHECK(ok);
@@ -190,35 +189,43 @@
bool ok = kamada_kawai_spring_layout(g,
get(vertex_position, g),
get(edge_weight, g),
+ square_topology<>(50.0),
side_length(50.0),
kamada_kawai_done());
BOOST_CHECK(ok);
std::cout << "Cube layout (Kamada-Kawai).\n";
- print_graph_layout(g, get(vertex_position, g));
+ print_graph_layout(g, get(vertex_position, g), square_topology<>(50.));
dump_graph_layout("cube", g, get(vertex_position, g));
minstd_rand gen;
- random_graph_layout(g, get(vertex_position, g), -25.0, 25.0, -25.0, 25.0,
- gen);
+ typedef square_topology<> Topology;
+ Topology topology(gen, 50.0);
+ std::vector<Topology::point_difference_type> displacements(num_vertices(g));
+ Topology::point_type origin;
+ origin[0] = origin[1] = 50.0;
+ Topology::point_difference_type extent;
+ extent[0] = extent[1] = 50.0;
+ rectangle_topology<> rect_top(gen, 0, 0, 50, 50);
+ random_graph_layout(g, get(vertex_position, g), rect_top);
- std::vector<point> displacements(num_vertices(g));
fruchterman_reingold_force_directed_layout
(g,
get(vertex_position, g),
- 50.0,
- 50.0,
+ topology,
+ origin,
+ extent,
square_distance_attractive_force(),
square_distance_repulsive_force(),
all_force_pairs(),
linear_cooling<double>(100),
make_iterator_property_map(displacements.begin(),
get(vertex_index, g),
- point()));
+ Topology::point_difference_type()));
std::cout << "Cube layout (Fruchterman-Reingold).\n";
- print_graph_layout(g, get(vertex_position, g));
+ print_graph_layout(g, get(vertex_position, g), square_topology<>(50.));
dump_graph_layout("cube-fr", g, get(vertex_position, g));
}
@@ -252,37 +259,46 @@
}
std::cerr << std::endl;
+ typedef square_topology<> Topology;
+ minstd_rand gen;
+ Topology topology(gen, 50.0);
+ Topology::point_type origin;
+ origin[0] = origin[1] = 50.0;
+ Topology::point_difference_type extent;
+ extent[0] = extent[1] = 50.0;
+
circle_graph_layout(g, get(vertex_position, g), 25.0);
bool ok = kamada_kawai_spring_layout(g,
get(vertex_position, g),
get(edge_weight, g),
+ topology,
side_length(50.0),
kamada_kawai_done());
BOOST_CHECK(ok);
std::cout << "Triangular layout (Kamada-Kawai).\n";
- print_graph_layout(g, get(vertex_position, g));
+ print_graph_layout(g, get(vertex_position, g), square_topology<>(50.));
dump_graph_layout("triangular-kk", g, get(vertex_position, g));
- minstd_rand gen;
- random_graph_layout(g, get(vertex_position, g), -25.0, 25.0, -25.0, 25.0,
- gen);
+ rectangle_topology<> rect_top(gen, -25, -25, 25, 25);
+ random_graph_layout(g, get(vertex_position, g), rect_top);
dump_graph_layout("random", g, get(vertex_position, g));
- std::vector<point> displacements(num_vertices(g));
+ std::vector<Topology::point_difference_type> displacements(num_vertices(g));
fruchterman_reingold_force_directed_layout
(g,
get(vertex_position, g),
- 50.0,
- 50.0,
+ topology,
+ origin,
+ extent,
attractive_force(square_distance_attractive_force()).
cooling(linear_cooling<double>(100)));
std::cout << "Triangular layout (Fruchterman-Reingold).\n";
- print_graph_layout(g, get(vertex_position, g));
+ print_graph_layout(g, get(vertex_position, g), square_topology<>(50.));
dump_graph_layout("triangular-fr", g, get(vertex_position, g));
}
@@ -322,25 +338,33 @@
bool ok = kamada_kawai_spring_layout(g,
get(vertex_position, g),
get(edge_weight, g),
+ square_topology<>(50.0),
side_length(50.0),
kamada_kawai_done());
BOOST_CHECK(!ok);
minstd_rand gen;
- random_graph_layout(g, get(vertex_position, g), -25.0, 25.0, -25.0, 25.0,
- gen);
+ rectangle_topology<> rect_top(gen, -25, -25, 25, 25);
+ random_graph_layout(g, get(vertex_position, g), rect_top);
- std::vector<point> displacements(num_vertices(g));
+ typedef square_topology<> Topology;
+ Topology topology(gen, 50.0);
+ std::vector<Topology::point_difference_type> displacements(num_vertices(g));
+ Topology::point_type origin;
+ origin[0] = origin[1] = 50.0;
+ Topology::point_difference_type extent;
+ extent[0] = extent[1] = 50.0;
fruchterman_reingold_force_directed_layout
(g,
get(vertex_position, g),
- 50.0,
- 50.0,
+ topology,
+ origin,
+ extent,
attractive_force(square_distance_attractive_force()).
cooling(linear_cooling<double>(50)));
std::cout << "Disconnected layout (Fruchterman-Reingold).\n";
- print_graph_layout(g, get(vertex_position, g));
+ print_graph_layout(g, get(vertex_position, g), square_topology<>(50.));
dump_graph_layout("disconnected-fr", g, get(vertex_position, g));
}
Modified: branches/release/libs/graph/test/make_bicon_planar_test.cpp
==============================================================================
--- branches/release/libs/graph/test/make_bicon_planar_test.cpp (original)
+++ branches/release/libs/graph/test/make_bicon_planar_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -11,8 +11,8 @@
#include <boost/graph/make_biconnected_planar.hpp>
#include <boost/graph/biconnected_components.hpp>
#include <boost/graph/boyer_myrvold_planar_test.hpp>
-#include <boost/property_map.hpp>
-#include <boost/vector_property_map.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/property_map/vector_property_map.hpp>
#include <boost/test/minimal.hpp>
Modified: branches/release/libs/graph/test/make_connected_test.cpp
==============================================================================
--- branches/release/libs/graph/test/make_connected_test.cpp (original)
+++ branches/release/libs/graph/test/make_connected_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -10,8 +10,8 @@
#include <boost/graph/properties.hpp>
#include <boost/graph/make_connected.hpp>
#include <boost/graph/connected_components.hpp>
-#include <boost/property_map.hpp>
-#include <boost/vector_property_map.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/property_map/vector_property_map.hpp>
#include <boost/test/minimal.hpp>
Modified: branches/release/libs/graph/test/make_maximal_planar_test.cpp
==============================================================================
--- branches/release/libs/graph/test/make_maximal_planar_test.cpp (original)
+++ branches/release/libs/graph/test/make_maximal_planar_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -10,8 +10,8 @@
#include <boost/graph/properties.hpp>
#include <boost/graph/make_maximal_planar.hpp>
#include <boost/graph/boyer_myrvold_planar_test.hpp>
-#include <boost/property_map.hpp>
-#include <boost/vector_property_map.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/property_map/vector_property_map.hpp>
#include <boost/test/minimal.hpp>
Modified: branches/release/libs/graph/test/matching_test.cpp
==============================================================================
--- branches/release/libs/graph/test/matching_test.cpp (original)
+++ branches/release/libs/graph/test/matching_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -10,7 +10,7 @@
#include <boost/graph/max_cardinality_matching.hpp>
#include <iostream> // for std::cout
-#include <boost/vector_property_map.hpp>
+#include <boost/property_map/vector_property_map.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/adjacency_matrix.hpp>
#include <boost/graph/random.hpp>
@@ -353,6 +353,15 @@
matching_test<undirected_list_graph>(10, "adjacency_list (using lists)");
matching_test<undirected_adjacency_matrix_graph>(10, "adjacency_matrix");
+ matching_test<undirected_graph>(20, "adjacency_list (using vectors)");
+ matching_test<undirected_list_graph>(20, "adjacency_list (using lists)");
+ matching_test<undirected_adjacency_matrix_graph>(20, "adjacency_matrix");
+
+ matching_test<undirected_graph>(21, "adjacency_list (using vectors)");
+ matching_test<undirected_list_graph>(21, "adjacency_list (using lists)");
+ matching_test<undirected_adjacency_matrix_graph>(21, "adjacency_matrix");
+
+#if 0
matching_test<undirected_graph>(50, "adjacency_list (using vectors)");
matching_test<undirected_list_graph>(50, "adjacency_list (using lists)");
matching_test<undirected_adjacency_matrix_graph>(50, "adjacency_matrix");
@@ -360,6 +369,7 @@
matching_test<undirected_graph>(51, "adjacency_list (using vectors)");
matching_test<undirected_list_graph>(51, "adjacency_list (using lists)");
matching_test<undirected_adjacency_matrix_graph>(51, "adjacency_matrix");
+#endif
return 0;
}
Modified: branches/release/libs/graph/test/max_flow_test.cpp
==============================================================================
--- branches/release/libs/graph/test/max_flow_test.cpp (original)
+++ branches/release/libs/graph/test/max_flow_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -43,7 +43,7 @@
//boost utilities we use
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/random.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/random/linear_congruential.hpp>
#include <boost/lexical_cast.hpp>
Deleted: branches/release/libs/graph/test/metric_tsp_approx.txt
==============================================================================
--- branches/release/libs/graph/test/metric_tsp_approx.txt 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,8 +0,0 @@
-2,5
-2,3
-1,2
-4,5
-5,4
-4,3
-6,3
-3,1
\ No newline at end of file
Modified: branches/release/libs/graph/test/parallel_edges_loops_test.cpp
==============================================================================
--- branches/release/libs/graph/test/parallel_edges_loops_test.cpp (original)
+++ branches/release/libs/graph/test/parallel_edges_loops_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -23,7 +23,7 @@
#include <utility>
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/filesystem.hpp>
Modified: branches/release/libs/graph/test/property_iter.cpp
==============================================================================
--- branches/release/libs/graph/test/property_iter.cpp (original)
+++ branches/release/libs/graph/test/property_iter.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -4,7 +4,7 @@
// Railway Construction and Operation,
// University of Hanover, Germany
//
-// Author: Jürgen Hunold
+// Author: Juergen Hunold
//
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
Modified: branches/release/libs/graph/test/random_matching_test.cpp
==============================================================================
--- branches/release/libs/graph/test/random_matching_test.cpp (original)
+++ branches/release/libs/graph/test/random_matching_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -8,7 +8,7 @@
//=======================================================================
#include <cstdlib>
#include <iostream>
-#include <boost/vector_property_map.hpp>
+#include <boost/property_map/vector_property_map.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/random.hpp>
#include <ctime>
Modified: branches/release/libs/graph/test/subgraph.cpp
==============================================================================
--- branches/release/libs/graph/test/subgraph.cpp (original)
+++ branches/release/libs/graph/test/subgraph.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -12,9 +12,10 @@
#include <boost/graph/random.hpp>
#include <boost/graph/graph_test.hpp>
#include <boost/graph/iteration_macros.hpp>
-
#include <boost/random/mersenne_twister.hpp>
+#include "test_graph.hpp"
+
// UNDER CONSTRUCTION
int test_main(int argc, char* argv[])
@@ -110,6 +111,27 @@
}
}
+ // Bootstrap the test_graph framework.
+ // TODO: Subgraph is fundamentally broken for property types.
+ // TODO: Under construction.
+ {
+ using namespace boost;
+ typedef property<edge_index_t, size_t, EdgeBundle> EdgeProp;
+ typedef adjacency_list<vecS, vecS, directedS, VertexBundle, EdgeProp> BaseGraph;
+ typedef subgraph<BaseGraph> Graph;
+ typedef graph_traits<Graph>::vertex_descriptor Vertex;
+ Graph g;
+ Vertex v = add_vertex(g);
+
+ typedef property_map<Graph, int VertexBundle::*>::type BundleMap;
+ BundleMap map = get(&VertexBundle::value, g);
+ get(map, v);
+// put(map, v, 5);
+// BOOST_ASSERT(get(map, v) == 5);
+
+// test_graph(g);
+ return 0;
+ }
}
return 0;
}
Modified: branches/release/libs/property_map/CMakeLists.txt
==============================================================================
--- branches/release/libs/property_map/CMakeLists.txt (original)
+++ branches/release/libs/property_map/CMakeLists.txt 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,3 +1,9 @@
+# Copyright (C) 2008 Michael Jackson
+#
+# Use, modification and distribution is subject to 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)
+
#----------------------------------------------------------------------------
# This file was automatically generated from the original CMakeLists.txt file
# Add a variable to hold the headers for the library
Deleted: branches/release/libs/property_map/LvaluePropertyMap.html
==============================================================================
--- branches/release/libs/property_map/LvaluePropertyMap.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,149 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. Silicon Graphics makes no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>LvaluePropertyMap</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-<H2><A NAME="concept:LvaluePropertyMap"></A>
-LvaluePropertyMap
-</H2>
-
-The LvaluePropertyMap provides an interface for accessing a
-reference to a property object (instead of a copy of the object as in
-the <TT>get()</TT> function required by <a
-href="./ReadablePropertyMap.html">ReadablePropertyMap</a>). An
-LvaluePropertyMap can be <I>mutable</I> or
-<I>non-mutable</I>. The mutable LvaluePropertyMap returns a
-reference whereas the non-mutable returns a const reference.
-
-<H3>Refinement of</H3>
-
-ReadablePropertyMap
-for non-mutable or ReadWritePropertyMap for mutable property map.
-
-<h3>Notation</h3>
-
-<Table>
-<TR>
-<TD><tt>PMap</tt></TD>
-<TD>A type that is a model of LvaluePropertyMap.</TD>
-</TR>
-<TR>
-<TD><tt>pmap</tt></TD>
-<TD>An object of type <tt>PMap</tt>.</td>
-</TR>
-<TR>
-<TD><tt>key</tt></TD>
-<TD>An object of type <tt>boost::property_traits<PMap>::key_type</tt>.</td>
-</TR>
-
-</table>
-
-
-<h3>Associated Types</h3>
-
-<table border>
-
-<tr>
-<td>Reference Type</td>
-<td><TT>boost::property_traits<PMap>::reference</TT></td>
-<td>
-The reference type, which must be a reference or const reference to
-the value typeof the property map.
-</td>
-</tr>
-
-<tr>
-<td>Property Map Category
-<td><TT>boost::property_traits<PMap>::category</TT></td>
-<td>
-The category of the property: a type convertible to
-<TT>boost::lvalue_property_map_tag</TT>.
-</td>
-</tr>
-
-</table>
-
-<h3>Valid Expressions</h3>
-
-<table border>
-<tr>
-<th>Name</th><th>Expression</th><th>Return Type</th><th>Description</th>
-</tr>
-
-
-<tr>
-<td>Access Property Value </td>
-<TD><TT>pmap[key]</TT></TD>
-<TD>
-<TT>value_type&</TT> for mutable, <TT>const value_type&</TT>
-otherwise.
-</TD>
-<TD>Obtain a reference to the property identified by <TT>key</TT>.</TD>
-</TR>
-</TABLE>
-
-<h3>Concept Checking Class</h3>
-
-<pre> template <class PMap, class Key>
- struct LvaluePropertyMapConcept
- {
- typedef typename property_traits<PMap>::category Category;
- typedef boost::lvalue_property_map_tag LvalueTag;
- typedef const typename property_traits<PMap>::value_type& const_reference;
- void constraints() {
- function_requires< ReadWritePropertyMapConcept<PMap, Key> >();
- function_requires< ConvertibleConcept<Category, LvalueTag> >();
-
- const_reference ref = pmap[k];
- }
- PMap pmap;
- Key k;
- };
-
- template <class PMap, class Key>
- struct Mutable_LvaluePropertyMapConcept
- {
- typedef typename property_traits<PMap>::category Category;
- typedef boost::lvalue_property_map_tag LvalueTag;
- typedef typename property_traits<PMap>::value_type& reference;
- void constraints() {
- function_requires< ReadWritePropertyMapConcept<PMap, Key> >();
- function_requires<ConvertibleConcept<Category, LvalueTag> >();
-
- reference ref = pmap[k];
- }
- PMap pmap;
- Key k;
- };</pre>
-
-<h3>See Also</h3>
-
-Property map concepts
-
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2000</TD><TD>
-<a HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</a>, Univ.of Notre Dame (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
-</TD></TR></TABLE>
-
-</BODY>
-</HTML>
Deleted: branches/release/libs/property_map/ReadWritePropertyMap.html
==============================================================================
--- branches/release/libs/property_map/ReadWritePropertyMap.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,96 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. Silicon Graphics makes no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>Read Write Property Map</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-<H2>
-<A NAME="concept:ReadWritePropertyMap"></A>
-<BR>
-Read/Write Property Map
-</H2>
-
-A Read/Write Property Map can be used to read property values via
-the <tt>get()</tt> function and can be used to write property values
-via the <tt>put()</tt> function.
-
-<H3>Refinement of</H3>
-
-Readable Property Map
-and
-Writable Property Map
-
-
-
-<h3>Notation</h3>
-
-<Table>
-<TR>
-<TD><tt>PMap</tt></TD>
-<TD>A type that is a model of Read/Write Property Map.</TD>
-</TR>
-
-</table>
-
-<h2>Associated Types</h2>
-
-<table border>
-
-<tr>
-<td>Property Map Category
-<td><TT>boost::property_traits<PMap>::category</TT></td>
-<td>
-The category of the property map must be a type convertible to
-<TT>read_write_property_map_tag</TT>.
-</td>
-</tr>
-
-</table>
-
-
-<h3>Concept Checking Class</h3>
-
-<pre>
- template <class PMap, class Key>
- struct ReadWritePropertyMapConcept
- {
- typedef typename property_traits<PMap>::category Category;
- typedef boost::read_write_property_map_tag ReadWriteTag;
- void constraints() {
- function_requires< ReadablePropertyMapConcept<PMap, Key> >();
- function_requires< WritablePropertyMapConcept<PMap, Key> >();
- function_requires< ConvertibleConcept<Category, ReadWriteTag> >();
- }
- };
-</pre>
-
-<h3>See Also</h3>
-
-Property map concepts
-
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2000</TD><TD>
-<a HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</a>, Univ.of Notre Dame (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
-</TD></TR></TABLE>
-
-</BODY>
-</HTML>
Deleted: branches/release/libs/property_map/ReadablePropertyMap.html
==============================================================================
--- branches/release/libs/property_map/ReadablePropertyMap.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,148 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. Silicon Graphics makes no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>Readable Property Map</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-
-<H2><A NAME="concept:ReadablePropertyMap"></A>
-Readable Property Map
-</H2>
-
-A Readable Property Map provides read-access to the value object associated with a given key via a call to the <tt>get()</tt> function.
-The <tt>get()</tt> function returns a copy of the value object.
-
-<h3>Refinement of</h3>
-
-Copy Constructible
-
-<h3>Notation</h3>
-
-<Table>
-<TR>
-<TD><tt>PMap</tt></TD>
-<TD>A type that is a model of Readable Property Map.</TD>
-</TR>
-<TR>
-<TD><tt>pmap</tt></TD>
-<TD>An object of type <tt>PMap</tt>.</td>
-</TR>
-<TR>
-<TD><tt>key</tt></TD>
-<TD>An object of type <tt>boost::property_traits<PMap>::key_type</tt>.</td>
-</TR>
-
-</table>
-
-<h3>Associated Types</h3>
-
-<table border>
-
-<tr>
-<td>Value Type</td>
-<td><TT>boost::property_traits<PMap>::value_type</TT></td>
-<td>The type of the property.</td>
-</tr>
-
-<tr>
-<td>Reference Type</td>
-<td><TT>boost::property_traits<PMap>::reference</TT></td>
-<td>
-A type that is convertible to the value type.
-</td>
-</tr>
-
-<tr>
-<td>Key Type</td>
-<td><TT>boost::property_traits<PMap>::key_type</TT></td>
-<td>
-The type of the key object used to look up the property. The property
-map may be templated on the key type, in which case this
-typedef can be <TT>void</TT>.
-</td>
-</tr>
-
-<tr>
-<td>Property Map Category</td>
-<td><TT>boost::property_traits<PMap>::category</TT></td>
-<td>
-The category of the property: a type convertible to
-<TT>readable_property_map_tag</TT>.
-</td>
-</tr>
-
-</table>
-
-<h3>Valid Expressions</h3>
-
-<table border>
-<tr>
-<th>Name</th><th>Expression</th><th>Return Type</th><th>Description</th>
-</tr>
-
-<tr>
-<td>Get Property Value </td>
-<TD><TT>get(pmap, key)</TT></TD>
-<TD><TT>reference</TT></TD>
-<TD>Lookup the property of the object identified by <TT>key</TT>.</TD>
-</TR>
-
-</TABLE>
-
-<h3>Concept Checking Class</h3>
-
-<pre> template <class PMap, class Key>
- struct ReadablePropertyMapConcept
- {
- typedef typename property_traits<PMap>::key_type key_type;
- typedef typename property_traits<PMap>::category Category;
- typedef boost::readable_property_map_tag ReadableTag;
- void constraints() {
- function_requires< ConvertibleConcept<Category, ReadableTag> >();
-
- val = get(pmap, k);
- }
- PMap pmap;
- Key k;
- typename property_traits<PMap>::value_type val;
- };</pre>
-
-<h3>See Also</h3>
-
-Property map concepts
-
-<h3>Design Notes</h3>
-
-At various times the name "read-only" was considered for
-this concept. However, that name is inappropriate because concepts are
-inherently positive, not negative. This becomes obvious when we define
-the Read Write Property Map, which refines both the Readable Property
-Map and the Writable Property Map concept. It would not make much
-sense to combine "read-only" and "write-only"
-concepts!
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2000</TD><TD>
-<a HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</a>, Univ.of Notre Dame (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
-</TD></TR></TABLE>
-
-</BODY>
-</HTML>
Deleted: branches/release/libs/property_map/WritablePropertyMap.html
==============================================================================
--- branches/release/libs/property_map/WritablePropertyMap.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,155 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. Silicon Graphics makes no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>WritablePropertyMap</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-
-<H2><A NAME="concept:WritablePropertyMap"></A>
-Writable Property Map
-</H2>
-
-A Writable Property Map has the capability of setting the value
-object associated with the given key object via the <tt>put()</tt>
-function.
-
-<h3>Refinement of</h3>
-
-Copy Constructible
-
-
-<h3>Notation</h3>
-
-<Table>
-<TR>
-<TD><tt>PMap</tt></TD>
-<TD>A type that is a model of Writable Property Map.</TD>
-</TR>
-<TR>
-<TD><tt>pmap</tt></TD>
-<TD>An object of type <tt>PMap</tt>.</td>
-</TR>
-<TR>
-<TD><tt>key</tt></TD>
-<TD>An object of type <tt>boost::property_traits<PMap>::key_type</tt>.</td>
-</TR>
-<TR>
-<TD><tt>val</tt></TD>
-<TD>An object of type <tt>boost::property_traits<PMap>::value_type</tt>.</td>
-</TR>
-</table>
-
-<h3>Associated Types</h3>
-
-<table border>
-
-<tr>
-<td>Value Type</td>
-<td><TT>boost::property_traits<PMap>::value_type</TT></td>
-<td>
-The type of the property.
-</td>
-</tr>
-
-<tr>
-<td>Key Type</td>
-<td><TT>boost::property_traits<PMap>::key_type</TT></td>
-<td>
-The type of the key object used to look up the property. The property
-map may be templated on the key type, in which case this typedef
-can be <TT>void</TT>.
-</td>
-</tr>
-
-<tr>
-<td>Property Map Category </td>
-<td><TT>boost::property_traits<PMap>::category</TT></td>
-<td>
-The category of the property: a type convertible to
-<TT>writable_property_map_tag</TT>.
-</td>
-</tr>
-
-</table>
-
-
-<h3>Valid Expressions</h3>
-
-<table border>
-<tr>
-<th>Name</th><th>Expression</th><th>Return Type</th><th>Description</th>
-</tr>
-
-<tr>
-<td>Put Property Value[1]</td>
-<TD><TT>put(pmap, key, val)</TT></TD>
-<TD><TT>void</TT></TD>
-<TD>
-Assign <TT>val</TT> to the property associated with <TT>k</TT>.
-</TD>
-</TR>
-
-</TABLE>
-
-
-<h3>Notes</h3>
-
-<a name="1">[1]</a> The function <tt>put()</tt> was originally named
-<tt>set()</tt>, but was changed to avoid name conflicts with the
-<tt>std::set</tt> class when using a compiler (Microsoft Visual C++)
-with non-standard name lookup rules. The following example demonstrates
-the problem.
-<pre>#include <set>
-using namespace std;
-namespace boost {
- void set() { }
-}</pre>
-
-
-<h3>Concept Checking Class</h3>
-
-<pre> template <class PMap, class Key>
- struct WritablePropertyMapConcept
- {
- typedef typename property_traits<PMap>::key_type key_type;
- typedef typename property_traits<PMap>::category Category;
- typedef boost::writable_property_map_tag WritableTag;
- void constraints() {
- function_requires< ConvertibleConcept<Category, WritableTag> >();
- put(pmap, k, val);
- }
- PMap pmap;
- Key k;
- typename property_traits<PMap>::value_type val;
- };</pre>
-
-<h3>See Also</h3>
-
-Property map concepts
-
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2000</TD><TD>
-<a HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</a>, Univ.of Notre Dame (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
-</TD></TR></TABLE>
-
-</BODY>
-</HTML>
Deleted: branches/release/libs/property_map/associative_property_map.html
==============================================================================
--- branches/release/libs/property_map/associative_property_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,194 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. We make no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>Iterator Property Map Adaptor</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-
-<H2><A NAME="sec:associative-property-map"></A>
-</h2>
-<PRE>
-associative_property_map<UniquePairAssociativeContainer>
-</PRE>
-
-<P>
-This property map is an adaptor that converts any type that is a model
-of both <a
-href="http://www.sgi.com/tech/stl/PairAssociativeContainer.html">Pair
-Associative Container</a> and <a
-href="http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html">Unique
-Associative Container</a> such as <a
-href="http://www.sgi.com/tech/stl/Map.html"><tt>std::map</tt></a> into
-a mutable Lvalue Property Map.
-Note that the adaptor only retains a reference to the container, so
-the lifetime of the container must encompass the use of the adaptor.
-</P>
-
-<h3>Example</h3>
-
-example1.cpp:
-<pre>#include <iostream>
-#include <map>
-#include <string>
-#include <boost/property_map.hpp>
-
-
-template <typename AddressMap>
-void foo(AddressMap address)
-{
- typedef typename boost::property_traits<AddressMap>::value_type value_type;
- typedef typename boost::property_traits<AddressMap>::key_type key_type;
-
- value_type old_address, new_address;
- key_type fred = "Fred";
- old_address = get(address, fred);
- new_address = "384 Fitzpatrick Street";
- put(address, fred, new_address);
-
- key_type joe = "Joe";
- value_type& joes_address = address[joe];
- joes_address = "325 Cushing Avenue";
-}
-
-int
-main()
-{
- std::map<std::string, std::string> name2address;
- boost::associative_property_map< std::map<std::string, std::string> >
- address_map(name2address);
-
- name2address.insert(make_pair(std::string("Fred"),
- std::string("710 West 13th Street")));
- name2address.insert(make_pair(std::string("Joe"),
- std::string("710 West 13th Street")));
-
- foo(address_map);
-
- for (std::map<std::string, std::string>::iterator i = name2address.begin();
- i != name2address.end(); ++i)
- std::cout << i->first << ": " << i->second << "\n";
-
- return EXIT_SUCCESS;
-}</pre>
-
-<H3>Where Defined</H3>
-
-<P>
-boost/property_map.hpp
-
-<p>
-<H3>Model Of</H3>
-
-Lvalue Property Map
-
-<P>
-
-<H3>Template Parameters</H3>
-
-<P>
-
-<TABLE border>
-<TR>
-<th>Parameter</th><th>Description</th><th>Default</th>
-</tr>
-
-
-<TR>
-<TD><TT>UniquePairAssociativeContainer</TT></TD>
-<TD>Must be a model of both <a
-href="http://www.sgi.com/tech/stl/PairAssociativeContainer.html">Pair
-Associative Container</a> and <a
-href="http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html">Unique
-Associative Container</a> .</TD>
-<TD> </td>
-</tr>
-
-</TABLE>
-<P>
-
-<H3>Members</H3>
-
-<P>
-In addition to the methods and functions required by <a
-href="./LvaluePropertyMap.html">Lvalue Property Map</a>, this
-class has the following members.
-
-<hr>
-
-<pre>
-property_traits<associative_property_map>::value_type
-</pre>
-This is the same type as
-<TT>UniquePairAssociativeContainer::data_type</TT>.
-
-<hr>
-
-<pre>
-associative_property_map()
-</pre>
-Default Constructor.
-
-<pre>
-associative_property_map(UniquePairAssociativeContainer& c)
-</pre>
-Constructor.
-
-<hr>
-
-<pre>
-data_type& operator[](const key_type& k) const
-</pre>
-The operator bracket for property access.
-The <TT>key_type</TT> and
-<TT>data_type</TT> types are from the typedefs inside of
-<TT>UniquePairAssociativeContainer</TT>.
-
-<hr>
-
-<h3>Non-Member functions</h3>
-
-<hr>
-
-<pre>
- template <typename UniquePairAssociativeContainer>
- associative_property_map<UniquePairAssociativeContainer>
- make_assoc_property_map(UniquePairAssociativeContainer& c);
-</pre>
-A function for conveniently creating an associative property map.
-
-
-
-<hr>
-
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2002</TD><TD>
-Jeremy Siek,
-Indiana University (<A
-HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
-<A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Indiana University (<A HREF="mailto:llee1_at_[hidden]">llee1_at_[hidden]</A>)<br>
-Andrew Lumsdaine,
-Indiana University (<A
-HREF="mailto:lums_at_[hidden]">lums_at_[hidden]</A>)
-</TD></TR></TABLE>
-
-</BODY>
-</HTML>
Deleted: branches/release/libs/property_map/const_assoc_property_map.html
==============================================================================
--- branches/release/libs/property_map/const_assoc_property_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,194 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. We make no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>Iterator Property Map Adaptor</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-
-<H2><A NAME="sec:const-associative-property-map"></A>
-</h2>
-<PRE>
-const_associative_property_map<UniquePairAssociativeContainer>
-</PRE>
-
-<P>
-This property map is an adaptor that converts any type that is a model
-of both <a
-href="http://www.sgi.com/tech/stl/PairAssociativeContainer.html">Pair
-Associative Container</a> and <a
-href="http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html">Unique
-Associative Container</a> such as <a
-href="http://www.sgi.com/tech/stl/Map.html"><tt>std::map</tt></a> into
-a constant Lvalue Property Map.
-Note that the adaptor only retains a reference to the container, so
-the lifetime of the container must encompass the use of the adaptor.
-</P>
-
-<h3>Example</h3>
-
-example1.cpp:
-<pre>
-<font color="#008040">#include <iostream></font>
-<font color="#008040">#include <map></font>
-<font color="#008040">#include <string></font>
-<font color="#008040">#include <boost/property_map.hpp></font>
-
-
-<B>template</B> <<B>typename</B> ConstAddressMap>
-<B>void</B> display(ConstAddressMap address)
-{
- <B>typedef</B> <B>typename</B> boost::property_traits<ConstAddressMap>::value_type
- value_type;
- <B>typedef</B> <B>typename</B> boost::property_traits<ConstAddressMap>::key_type key_type;
-
- key_type fred = <font color="#0000FF">"Fred"</font>;
- key_type joe = <font color="#0000FF">"Joe"</font>;
-
- value_type freds_address = get(address, fred);
- value_type joes_address = get(address, joe);
-
- std::cout << fred << <font color="#0000FF">": "</font> << freds_address << <font color="#0000FF">"\n"</font>
- << joe << <font color="#0000FF">": "</font> << joes_address << <font color="#0000FF">"\n"</font>;
-}
-
-<B>int</B>
-main()
-{
- std::map<std::string, std::string> name2address;
- boost::const_associative_property_map< std::map<std::string, std::string> >
- address_map(name2address);
-
- name2address.insert(make_pair(std::string(<font color="#0000FF">"Fred"</font>),
- std::string(<font color="#0000FF">"710 West 13th Street"</font>)));
- name2address.insert(make_pair(std::string(<font color="#0000FF">"Joe"</font>),
- std::string(<font color="#0000FF">"710 West 13th Street"</font>)));
-
- display(address_map);
-
- <B>return</B> EXIT_SUCCESS;
-}
-
-
-</PRE>
-
-<H3>Where Defined</H3>
-
-<P>
-boost/property_map.hpp
-
-<p>
-<H3>Model Of</H3>
-
-Lvalue Property Map
-
-<P>
-
-<H3>Template Parameters</H3>
-
-<P>
-
-<TABLE border>
-<TR>
-<th>Parameter</th><th>Description</th><th>Default</th>
-</tr>
-
-
-<TR>
-<TD><TT>UniquePairAssociativeContainer</TT></TD>
-<TD>Must be a model of both <a
-href="http://www.sgi.com/tech/stl/PairAssociativeContainer.html">Pair
-Associative Container</a> and <a
-href="http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html">Unique
-Associative Container</a> .</TD>
-<TD> </td>
-</tr>
-
-</TABLE>
-<P>
-
-<H3>Members</H3>
-
-<P>
-In addition to the methods and functions required by <a
-href="./LvaluePropertyMap.html">Lvalue Property Map</a>, this
-class has the following members.
-
-<hr>
-
-<pre>
-property_traits<const_associative_property_map>::value_type
-</pre>
-This is the same type as
-<TT>UniquePairAssociativeContainer::data_type</TT>.
-
-<hr>
-
-<pre>
-const_associative_property_map()
-</pre>
-Default Constructor.
-
-<pre>
-const_associative_property_map(const UniquePairAssociativeContainer& c)
-</pre>
-Constructor.
-
-<hr>
-
-<pre>
-const data_type& operator[](const key_type& k) const
-</pre>
-The operator bracket for property access.
-The <TT>key_type</TT> and
-<TT>data_type</TT> types are from the typedefs inside of
-<TT>UniquePairAssociativeContainer</TT>.
-
-<hr>
-
-<h3>Non-Member functions</h3>
-
-<hr>
-
-<pre>
- template <typename UniquePairAssociativeContainer>
- const_associative_property_map<UniquePairAssociativeContainer>
- make_assoc_property_map(const UniquePairAssociativeContainer& c);
-</pre>
-A function for conveniently creating an associative property map.
-
-
-
-<hr>
-
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2002</TD><TD>
-Jeremy Siek,
-Indiana University (<A
-HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
-<A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Indiana University (<A HREF="mailto:llee1_at_[hidden]">llee1_at_[hidden]</A>)<br>
-Andrew Lumsdaine,
-Indiana University (<A
-HREF="mailto:lums_at_[hidden]">lums_at_[hidden]</A>)
-</TD></TR></TABLE>
-
-</BODY>
-</HTML>
Modified: branches/release/libs/property_map/doc/dynamic_property_map.html
==============================================================================
--- branches/release/libs/property_map/doc/dynamic_property_map.html (original)
+++ branches/release/libs/property_map/doc/dynamic_property_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!-- Copyright 2004-5 The Trustees of Indiana University.
+
+ Use, modification and distribution is subject to 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)
+-->
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Modified: branches/release/libs/property_map/doc/dynamic_property_map.rst
==============================================================================
--- branches/release/libs/property_map/doc/dynamic_property_map.rst (original)
+++ branches/release/libs/property_map/doc/dynamic_property_map.rst 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -2,6 +2,12 @@
|(logo)|__ Dynamic Property Maps
================================
+.. Copyright 2004-5 The Trustees of Indiana University.
+
+ Use, modification and distribution is subject to 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)
+
.. |(logo)| image:: ../../../boost.png
:align: middle
:alt: Boost
Deleted: branches/release/libs/property_map/example1.cpp
==============================================================================
--- branches/release/libs/property_map/example1.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,48 +0,0 @@
-// (C) Copyright Jeremy Siek 2002.
-// 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)
-
-#include <iostream>
-#include <map>
-#include <string>
-#include <boost/property_map.hpp>
-
-
-template <typename AddressMap>
-void foo(AddressMap address)
-{
- typedef typename boost::property_traits<AddressMap>::value_type value_type;
- typedef typename boost::property_traits<AddressMap>::key_type key_type;
-
- value_type old_address, new_address;
- key_type fred = "Fred";
- old_address = get(address, fred);
- new_address = "384 Fitzpatrick Street";
- put(address, fred, new_address);
-
- key_type joe = "Joe";
- value_type& joes_address = address[joe];
- joes_address = "325 Cushing Avenue";
-}
-
-int
-main()
-{
- std::map<std::string, std::string> name2address;
- boost::associative_property_map< std::map<std::string, std::string> >
- address_map(name2address);
-
- name2address.insert(make_pair(std::string("Fred"),
- std::string("710 West 13th Street")));
- name2address.insert(make_pair(std::string("Joe"),
- std::string("710 West 13th Street")));
-
- foo(address_map);
-
- for (std::map<std::string, std::string>::iterator i = name2address.begin();
- i != name2address.end(); ++i)
- std::cout << i->first << ": " << i->second << "\n";
-
- return EXIT_SUCCESS;
-}
Deleted: branches/release/libs/property_map/example2.cpp
==============================================================================
--- branches/release/libs/property_map/example2.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,48 +0,0 @@
-// (C) Copyright Ronald Garcia, Jeremy Siek 2002.
-// Permission to copy, use, modify,
-// sell and distribute this software is granted provided this
-// copyright notice appears in all copies. This software is provided
-// "as is" without express or implied warranty, and with no claim as
-// to its suitability for any purpose.
-
-#include <iostream>
-#include <map>
-#include <string>
-#include <boost/property_map.hpp>
-
-
-template <typename ConstAddressMap>
-void display(ConstAddressMap address)
-{
- typedef typename boost::property_traits<ConstAddressMap>::value_type
- value_type;
- typedef typename boost::property_traits<ConstAddressMap>::key_type key_type;
-
- key_type fred = "Fred";
- key_type joe = "Joe";
-
- value_type freds_address = get(address, fred);
- value_type joes_address = get(address, joe);
-
- std::cout << fred << ": " << freds_address << "\n"
- << joe << ": " << joes_address << "\n";
-}
-
-int
-main()
-{
- std::map<std::string, std::string> name2address;
- boost::const_associative_property_map< std::map<std::string, std::string> >
- address_map(name2address);
-
- name2address.insert(make_pair(std::string("Fred"),
- std::string("710 West 13th Street")));
- name2address.insert(make_pair(std::string("Joe"),
- std::string("710 West 13th Street")));
-
- display(address_map);
-
- return EXIT_SUCCESS;
-}
-
-
Deleted: branches/release/libs/property_map/example3.cpp
==============================================================================
--- branches/release/libs/property_map/example3.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,21 +0,0 @@
-// Copyright Vladimir Prus 2003.
-// 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)
-
-#include <boost/vector_property_map.hpp>
-#include <string>
-#include <iostream>
-
-int main()
-{
- boost::vector_property_map<std::string> m;
-
- // Assign string to '4'.
- m[4] = "e";
- std::cout << "'" << m[4] << "'\n";
-
- // Grab string from '10'. Since none is associated,
- // "" will be returned.
- std::cout << "'" << m[10] << "'\n";
-}
Deleted: branches/release/libs/property_map/identity_property_map.html
==============================================================================
--- branches/release/libs/property_map/identity_property_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,149 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. We make no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>Identity Property Map</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-<H2><A NAME="sec:identity-property-map"></A>
-</h2>
-<PRE>
-identity_property_map
-</PRE>
-
-This property map applies the identity function, that is, it just
-returns a copy of the key object that was input.
-
-<H3>Where Defined</H3>
-
-<P>
-boost/property_map.hpp
-
-<h3>Model of</h3>
-
-Readable Property Map
-
-<h3>Associated Types</h3>
-
-<table border>
-<tr>
-<th>Type</th><th>Description</th>
-</tr>
-
-<tr>
-<td><tt>
-boost::property_traits<identity_property_map>::value_type
-</tt></td>
-<td>
-This type is <tt>std::size_t</tt>; the map functions are templated.
-</td>
-</tr>
-
-<tr>
-<td><tt>
-boost::property_traits<identity_property_map>::key_type
-</tt></td>
-<td>
-This type is <tt>std::size_t</tt>; the map functions are templated.
-</td>
-</tr>
-
-<tr>
-<td><tt>
-boost::property_traits<identity_property_map>::category
-</tt></td>
-<td>
-This type is <tt>boost::readable_op_bracket_tag</tt>.
-</td>
-</tr>
-
-</table>
-
-<h3>Member Functions</h3>
-
-<table border>
-<tr>
-<th>Member</th><th>Description</th>
-</tr>
-
-
-<tr>
-<td><tt>
-identity_property_map()
-</tt></td>
-<td>
-Default constructor.
-</td>
-</tr>
-
-<tr>
-<td><tt>
-identity_property_map(const identity_property_map& x)
-</tt></td>
-<td>
-Copy constructor.
-</td>
-</tr>
-
-<tr>
-<td><tt>
-template <class T><br>
-T operator[](T x) const
-</tt></td>
-<td>
-Returns a copy of object <tt>x</tt>.
-</td>
-</tr>
-
-</table>
-
-<h3>Non-Member Functions</h3>
-
-<table border>
-<tr>
-<th>Member</th><th>Description</th>
-</tr>
-
-<tr>
-<td><tt>
-template <class T><br>
-T get(const identity_property_map& pmap, T x)
-</tt></td>
-<td>
-Returns a copy of object <tt>x</tt>.
-</td>
-</tr>
-
-</table>
-
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2000</TD><TD>
-Jeremy Siek,
-Univ.of Notre Dame (<A
-HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
-<A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Univ.of Notre Dame (<A HREF="mailto:llee1_at_[hidden]">llee1_at_[hidden]</A>)<br>
-Andrew Lumsdaine,
-Univ.of Notre Dame (<A
-HREF="mailto:lums_at_[hidden]">lums_at_[hidden]</A>)
-</TD></TR></TABLE>
-
-</BODY>
-</HTML>
Modified: branches/release/libs/property_map/index.html
==============================================================================
--- branches/release/libs/property_map/index.html (original)
+++ branches/release/libs/property_map/index.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,13 +1,13 @@
<html>
<head>
-<meta http-equiv="refresh" content="0; URL=property_map.html">
+<meta http-equiv="refresh" content="0; URL=doc/property_map.html">
</head>
<body>
Automatic redirection failed, please go to
-property_map.html. <hr>
-<p>© Copyright Beman Dawes, 2001</p>
+doc/property_map.html. <hr>
+<p>© Copyright Beman Dawes, 2001</p>
<p>Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy
at www.boost.org/LICENSE_1_0.txt)</p>
</body>
-</html>
\ No newline at end of file
+</html>
Deleted: branches/release/libs/property_map/iterator_property_map.html
==============================================================================
--- branches/release/libs/property_map/iterator_property_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,238 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. We make no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>Iterator Property Map Adaptor</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-
-<H2><A NAME="sec:iterator-property-map"></A>
-</h2>
-<PRE>
-iterator_property_map<RandomAccessIterator, OffsetMap, T, R>
-</PRE>
-
-<P>
-This property map is an adaptor that converts any random access
-iterator into a <a
-href="./LvaluePropertyMap.html">Lvalue Property Map</a>.
-The <tt>OffsetMap</tt> type is responsible for converting
-key objects to integers that can be used as offsets with the
-random access iterator.
-
-<P>
-
-<h3>Example</h3>
-
-<pre>
-// print out the capacity and flow for all the edges in the graph
-template <class Graph, class CapacityPMap, class FlowPMap>
-void print_network(Graph& G, CapacityPMap capacity, FlowPMap flow)
-{
- typedef typename boost::graph_traits<Graph>::vertex_iterator Viter;
- typedef typename boost::graph_traits<Graph>::out_edge_iterator OutEdgeIter;
- typedef typename boost::graph_traits<Graph>::in_edge_iterator InEdgeIter;
-
- Viter ui, uiend;
- for (boost::tie(ui, uiend) = vertices(G); ui != uiend; ++ui) {
- OutEdgeIter out, out_end;
- std::cout << *ui << "\t";
-
- for(boost::tie(out, out_end) = out_edges(*ui, G); out != out_end; ++out)
- std::cout << "--(" << get(capacity, *out) << ", "
- << get(flow, *out) << ")--> " << target(*out,G) << "\t";
- std::cout << std::endl << "\t";
-
- InEdgeIter in, in_end;
- for(boost::tie(in, in_end) = in_edges(*ui, G); in != in_end; ++in)
- std::cout << "<--(" << get(capacity, *in) << "," << get(flow, *in) << ")-- "
- << source(*in,G) << "\t";
- std::cout << std::endl;
- }
-}
-
-int main(int, char*[])
-{
- typedef boost::adjacency_list<boost::vecS, boost::vecS,
- boost::bidirectionalS, boost::no_plugin,
- boost::plugin<boost::id_tag, std::size_t> > Graph;
-
- const int num_vertices = 9;
- Graph G(num_vertices);
-
- int capacity[] = { 10, 20, 20, 20, 40, 40, 20, 20, 20, 10 };
- int flow[] = { 8, 12, 12, 12, 12, 12, 16, 16, 16, 8 };
-
- // add edges to the graph, and assign each edge an ID number
- // to index into the property arrays
- add_edge(G, 0, 1, 0);
- // ...
-
- typedef boost::graph_traits<Graph>::edge_descriptor Edge;
- typedef boost::property_map<Graph, boost::id_tag>::type EdgeID_PMap;
- EdgeID_PMap edge_id = get(boost::edge_index(), G);
-
- boost::iterator_property_map<int*, EdgeID_PMap, int, int&>
- capacity_pa(capacity, edge_id),
- flow_pa(flow, edge_id);
-
- print_network(G, capacity_pa, flow_pa);
-
- return 0;
-}
-</pre>
-
-<H3>Where Defined</H3>
-
-<P>
-boost/property_map.hpp
-
-<p>
-<H3>Model Of</H3>
-
-Lvalue Property Map
-
-<P>
-
-<H3>Template Parameters</H3>
-
-<P>
-
-<TABLE border>
-<TR>
-<th>Parameter</th><th>Description</th><th>Default</th>
-</tr>
-
-
-<TR>
-<TD><TT>Iterator</TT></TD>
-<TD>Must be a model of Random Access Iterator.</TD>
-<TD> </td>
-</tr>
-
-<TR>
-<TD><TT>OffsetMap</TT></TD> <TD>Must be a model of <a
-href="./ReadablePropertyMap.html">Readable Property Map</a>
-and the value type must be convertible to the difference type of the
-iterator.</TD> <TD> </TD>
-</TR>
-
-<TR>
-<TD><TT>T</TT></TD>
-<TD>The value type of the iterator.</TD>
-<TD><TT>std::iterator_traits<RandomAccessIterator>::value_type</TT></TD>
-</TR>
-
-
-<TR>
-<TD><TT>R</TT></TD>
-<TD>The reference type of the iterator.</TD>
-<TD><TT>std::iterator_traits<RandomAccessIterator>::reference</TT></TD>
-</TR>
-
-</TABLE>
-<P>
-
-<H3>Members</H3>
-
-<P>
-In addition to the methods and functions required by <a
-href="./LvaluePropertyMap.html">Lvalue Property Map</a>, this
-class has the following members.
-
-<hr>
-
-<pre>
-property_traits<iterator_property_map>::value_type
-</pre>
-This is the same type as
-<TT>std::iterator_traits<Iterator>::value_type</TT>.
-
-<hr>
-
-<pre>
-iterator_property_map(Iterator i)
-</pre>
-Constructor. The OffsetMap is default constructed.
-
-<hr>
-
-<pre>
-iterator_property_map(Iterator i, OffsetMap m)
-</pre>
-Constructor.
-
-<hr>
-
-<pre>
-reference operator[](difference_type v) const
-</pre>
-The operator bracket for property access. The <TT>reference</TT> and
-<TT>difference_type</TT> types are from
-<TT>std::iterator_traits<Iterator></TT>.
-
-<hr>
-
-<h3>Non-Member functions</h3>
-
-<hr>
-
-<pre>
- template <class RAIter, class OffsetMap>
- iterator_property_map<RAIter, OffsetMap,
- typename std::iterator_traits<RAIter>::value_type,
- typename std::iterator_traits<RAIter>::reference
- >
- make_iterator_property_map(RAIter iter, OffsetMap omap)
-</pre>
-A function for conveniently creating an iterator map.
-
-
-<hr>
-
-<pre>
- template <class RAIter, class OffsetMap, class ValueType>
- iterator_property_map<RAIter, OffsetMap,
- typename std::iterator_traits<RAIter>::value_type,
- typename std::iterator_traits<RAIter>::reference
- >
- make_iterator_property_map(RAIter iter, OffsetMap omap, ValueType dummy_arg)
-</pre>
-Use this function instead of the 2-argument version if
-your compiler does not support partial specialization
-(like Visual C++).
-
-
-<hr>
-
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2000-2002</TD><TD>
-Jeremy Siek,
-Univ.of Notre Dame (<A
-HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
-<A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Univ.of Notre Dame (<A HREF="mailto:llee1_at_[hidden]">llee1_at_[hidden]</A>)<br>
-Andrew Lumsdaine,
-Univ.of Notre Dame (<A
-HREF="mailto:lums_at_[hidden]">lums_at_[hidden]</A>)
-</TD></TR></TABLE>
-
-</BODY>
-</HTML>
Deleted: branches/release/libs/property_map/property_map.html
==============================================================================
--- branches/release/libs/property_map/property_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,338 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. Silicon Graphics makes no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>Property Map Library</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-<H1><A NAME="sec:property-maps"></A>
-Boost Property Map Library
-</H1>
-
-<p>The Boost Property Map Library consists mainly of interface
-specifications in the form of concepts (similar to the iterator
-concepts in the STL <a
-href="http://www.sgi.com/tech/stl/stl_introduction.html">[2]</a>).
-These interface specifications are intended for use by implementors of
-generic libraries in communicating requirements on template parameters
-to their users. In particular, the Boost Property Map concepts define
-a general purpose interface for mapping key objects to corresponding
-value objects, thereby hiding the details of how the mapping is
-implemented from algorithms. The implementation of types fulfilling
-the property map interface is up to the client of the algorithm to
-provide. The property map requirements are purposefully vague on the
-type of the key and value objects to allow for the utmost genericity
-in the function templates of the generic library.
-</p>
-
-<p>
-The need for the property map interface came from the <a
-href="../graph/doc/index.html">Boost Graph Library</a> (BGL), which
-contains many examples of algorithms that use the property map
-concepts to specify their interface. For an example, note the
-<tt>ColorMap</tt> template parameter of the <a
-href="../graph/doc/breadth_first_search.html">
-<tt>breadth_first_search</tt></a>. In addition, the BGL contains many
-examples of concrete types that implement the property map interface.
-The <a href="../graph/doc/adjacency_list.html">
-<tt>adjacency_list</tt></a> class implements property maps for
-accessing objects (properties) that are attached to vertices and edges
-of the graph.
-</p>
-
-<p>
-The Boost Property Map Library also contains a <a
-href="#sec:property-map-types"> few adaptors</a> that convert commonly
-used data-structures that implement a mapping operation, such as
-builtin arrays (pointers), iterators, and <a
-href="http://www.sgi.com/tech/stl/Map.html"> <tt>std::map</tt></a>, to
-have the property map interface. These adaptors are not meant to
-fulfill all mapping needs, but are to serve as an example of how to
-implement the interface as well as covering a few common cases. See
-the header files for details.
-</p>
-
-<p>Property maps are statically-typed entities. If you need to access
-property maps in a more dynamic setting (e.g., because you're reading
-an unknown set of attributes from a file), you can use the <a
-href="doc/dynamic_property_map.html"><code>dynamic_properties</code></a>
-class to access a set of property maps through a dynamically-typed
-interface. </p>
-
-<h2><A NAME="sec:property-map-concepts"></A>
-Property Map Concepts
-</h2>
-
-The property map interface consists of a set of concepts (see
-definition of "concept" in <a
-href="../concept_check/concept_check.htm#introduction">[1]</a> and <a
-href="http://www.sgi.com/tech/stl/stl_introduction.html">[2]</a>) that
-define a syntax for mapping key objects to corresponding value
-objects. Since the property map operations are global functions
-(actually they don't have to be global, but they are always called
-unqualified and may be found via argument dependent lookup), it is
-possible to overload the map functions such that nearly arbitrary
-property map types and key types can be used. The interface for
-property maps consists of three functions: <tt>get()</tt>,
-<tt>put()</tt>, and <tt>operator[]</tt>. The following concrete
-example from example1.cpp shows how the
-three functions could be used to access the addresses associated with
-various people. We use a separate function template here to highlight
-the parts of the program that use the property map concept
-interface. In the <tt>main()</tt> function we use <tt>std::map</tt>
-and <tt>boost::associative_property_map</tt>, but it would have been
-OK to use any type (including a custom type that you create) that
-fulfills the property map requirements.
-
-<pre>#include <iostream>
-#include <map>
-#include <string>
-#include <boost/property_map.hpp>
-
-
-template <typename AddressMap>
-void foo(AddressMap address)
-{
- typedef typename boost::property_traits<AddressMap>::value_type value_type;
- typedef typename boost::property_traits<AddressMap>::key_type key_type;
-
- value_type old_address, new_address;
- key_type fred = "Fred";
- old_address = get(address, fred);
- new_address = "384 Fitzpatrick Street";
- put(address, fred, new_address);
-
- key_type joe = "Joe";
- value_type& joes_address = address[joe];
- joes_address = "325 Cushing Avenue";
-}
-
-int
-main()
-{
- std::map<std::string, std::string> name2address;
- boost::associative_property_map< std::map<std::string, std::string> >
- address_map(name2address);
-
- name2address.insert(make_pair(std::string("Fred"),
- std::string("710 West 13th Street")));
- name2address.insert(make_pair(std::string("Joe"),
- std::string("710 West 13th Street")));
-
- foo(address_map);
-
- for (std::map<std::string, std::string>::iterator i = name2address.begin();
- i != name2address.end(); ++i)
- std::cout << i->first << ": " << i->second << "\n";
-
- return EXIT_SUCCESS;
-}</pre>
-
-<p>
-For each property map object there is a set of <i>valid keys</i>
-for which the mapping to value objects is defined. Invoking a
-property map function on an <i>invalid</i> key results in
-undefined behavior. The property map concepts do not specify how
-this set of valid keys is created or modified. A function that uses a
-property map must specify the expected set of valid keys in its
-preconditions.
-
-<p>
-The need for property maps came out of the design of the Boost
-Graph Library, whose algorithms needed an interface for accessing
-properties attached to vertices and edges in a graph. In this context
-the vertex and edge descriptors are the key type of the property
-maps.
-
-<!-- historical note about Decorators and Data Maps -->
-
-<P>
-Several categories of property maps provide
-different access capabilities:
-<DL>
-<DT><STRONG>readable</STRONG></DT>
-<DD>The associated property data can only be read.
- The data is returned by-value. Many property maps defining the
- problem input (such as edge weight) can be defined as readable
- property maps.
-
-<P>
-</DD>
-<DT><STRONG>writeable</STRONG></DT>
-<DD>The associated property can only be written to.
- The parent array used to record the paths in a bread-first search tree
- is an example of a property map that would be defined writeable.
-
-<P>
-</DD>
-<DT><STRONG>read/write</STRONG></DT>
-<DD>The associated property can both be written and read.
- The distance property use in Dijkstra's shortest paths algorithm
- would need to provide both read and write capabilities.
-
-<P>
-</DD>
-<DT><STRONG>lvalue</STRONG></DT>
-<DD>The associated property is actually represented in
- memory and it is possible to get a reference to it.
- The property maps in the lvalue
- category also support the requirements for read/write property
- maps.
-
-<P>
-</DD>
-</DL>
-
-<P>
-There is a separate concept defined for each of the four property
-map categories. These property map concepts are listed
-below, with links to the documentation for each of them.
-
-<ul>
-<li>ReadablePropertyMap</li>
-<li>WritablePropertyMap</li>
-<li>ReadWritePropertyMap</li>
-<li>LvaluePropertyMap</li>
-</ul>
-
-<h2><a name="sec:property-map-tags">Property Map Category Tags</a></h2>
-
-<P>
-There is a tag struct for each of the categories of property
-maps, which is defined in the header
-<tt><boost/property_map.hpp></tt>.
-
-<PRE>namespace boost {
-
- struct readable_property_map_tag { };
-
- struct writable_property_map_tag { };
-
- struct read_write_property_map_tag :
- public readable_property_map_tag,
- public writable_property_map_tag { };
-
- struct lvalue_property_map_tag :
- public read_write_property_map_tag { };
-
-}</PRE>
-
-<h2><a name="sec:property-map-traits">Property Map Traits</a></h2>
-
-<P>
-Similar to the <TT>std::iterator_traits</TT> class of the STL, there
-is a <TT>boost::property_traits</TT> class that can be used to deduce
-the types associated with a property map type: the key and value
-types, and the property map category. There is a specialization
-of <TT>boost::property_traits</TT> so that pointers can be used as
-property map objects. In addition, the property map
-functions are overloaded for pointers. These traits classes and
-functions are defined in <tt><boost/property_map.hpp></tt>.
-
-<PRE>namespace boost {
-
- template <typename PropertyMap>
- struct property_traits {
- typedef typename PropertyMap::key_type key_type;
- typedef typename PropertyMap::value_type value_type;
- typedef typename PropertyMap::category category;
- };
-
-}</PRE>
-
-<h2><a name="sec:property-map-types">Property Map Types</a></h2>
-
-<ul>
- <li>Builtin C++ pointer types.<br>
-
- The following specialization of the <tt>property_traits</tt> class
- and the overloads of <tt>put()</tt> and <tt>get()</tt> make it
- possible to use builtin C++ pointer types as property maps. These
- are defined in <tt>boost/property_map.hpp</tt>. More specifically,
- it means that <tt>T*</tt> is a model of <a
- href="./LvaluePropertyMap.html">LvaluePropertyMap</a>, given a key
- type that is at least convertible <tt>std::ptrdiff_t</tt>.
-
-<PRE>namespace boost {
- // specialization for using pointers as property maps
- template <typename T>
- struct property_traits<T*> {
- typedef T value_type;
- typedef std::ptrdiff_t key_type;
- typedef random_access_iterator_pa_tag category;
- };
-
- // overloads of the property map functions for pointers
- template<>
- void put(T* pmap, std::ptrdiff_t k, const T& val) { pmap[k] = val; }
-
- template<>
- const T& get(const T* pmap, std::ptrdiff_t k) { return pmap[k]; }
-
-}</PRE>
- </li>
- <li>identity_property_map </li>
- <li>iterator_property_map</li>
- <li>associative_property_map</li>
- <li>const_associative_property_map</li>
- <li>vector_property_map</li>
- <li>ref_property_map </li>
-</ul>
-
-<h3>History</h3>
-
-The property map interface originated as <i>data accessors</i> in
-Dietmar Kühl's Masters Thesis on generic graph algorithms. The
-property map idea also appeared under the guise of <i>decorators</i>
-in early versions of the Generic Graph Component Library (GGCL), which
-is now the Boost Graph Library (BGL). The main motivation for the
-property map interface was to support the access of data associated
-with vertices and edges in a graph, though the applicability of
-property maps goes beyond this.
-
-<h3>Acknowledgments</h3>
-
-Thanks go to Dietmar Kühl for coming up with this mechanism, and
-thanks go to the Boost members who helped refine and improve the
-property map interface. Thanks to Dave Abrahams for managing the
-formal review of the BGL which included the property map library.
-
-<h3>Notes to Implementors</h3>
-
-Copying a property map should be inexpensive since they are often
-passed by value.
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2000-2002</TD><TD>
-<a HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</a>, Indiana University (<A HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)
-</TD></TR></TABLE>
-
-</BODY>
-</HTML>
-<!-- LocalWords: ALT STL html genericity BGL ColorMap htm cpp iostream hpp hl
- -->
-<!-- LocalWords: typename AddressMap foo fred joe joes int writeable lvalue
- -->
-<!-- LocalWords: ReadablePropertyMap WritablePropertyMap ReadWritePropertyMap
- -->
-<!-- LocalWords: LvaluePropertyMap struct namespace PropertyMap pmap const
- -->
-<!-- LocalWords: val Dietmar hl's GGCL Abrahams
- -->
Deleted: branches/release/libs/property_map/ref_property_map.html
==============================================================================
--- branches/release/libs/property_map/ref_property_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,114 +0,0 @@
-<HTML>
-<!--
- -- Copyright 2006 The Trustees of Indiana University
- --
- -- Use, modification and distribution is subject to 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)
- --
- -->
-<Head>
-<Title>Reference Property Map</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-<H2><A NAME="sec:identity-property-map"></A>
-</h2>
-<PRE>
-template <typename KeyType, typename ValueType>
-class ref_property_map
-</PRE>
-
-This property map wraps a reference to some particular object, and
-returns that reference whenever a key object is input.
-
-<H3>Where Defined</H3>
-
-<P>
-boost/property_map.hpp
-
-<h3>Model of</h3>
-
-Lvalue Property Map
-
-<h3>Associated Types</h3>
-
-<table border>
-<tr>
-<th>Type</th><th>Description</th>
-</tr>
-
-<tr>
-<td><tt>
-boost::property_traits<ref_property_map>::value_type
-</tt></td>
-<td>
-This type is the <tt>ValueType</tt> with which the template instantiated.
-</td>
-</tr>
-
-<tr>
-<td><tt>
-boost::property_traits<ref_property_map>::key_type
-</tt></td>
-<td>
-This type is the <tt>KeyType</tt> with which the template instantiated.
-</td>
-</tr>
-
-<tr>
-<td><tt>
-boost::property_traits<ref_property_map>::category
-</tt></td>
-<td>
-This type is <tt>boost::lvalue_property_map_tag</tt>.
-</td>
-</tr>
-
-</table>
-
-<h3>Member Functions</h3>
-
-<table border>
-<tr>
-<th>Member</th><th>Description</th>
-</tr>
-
-
-<tr>
-<td><tt>
-ref_property_map(ValueType& v)
-</tt></td>
-<td>
-The constructor for ref_property_map is provided the reference that
-the property map will return when queried.
-</td>
-</tr>
-
-<tr>
-<td><tt>
-ref_property_map(const ref_property_map& x)
-</tt></td>
-<td>
-Copy constructor.
-</td>
-</tr>
-
-<tr>
-<td><tt>
-ValueType& operator[](KeyType const&) const
-</tt></td>
-<td>
-Returns the contained reference.
-</td>
-</tr>
-
-</table>
-
-
-</BODY>
-</HTML>
Modified: branches/release/libs/property_map/test/CMakeLists.txt
==============================================================================
--- branches/release/libs/property_map/test/CMakeLists.txt (original)
+++ branches/release/libs/property_map/test/CMakeLists.txt 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -1,3 +1,9 @@
+# Copyright (C) 2008 Michael Jackson
+#
+# Use, modification and distribution is subject to 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)
+
boost_additional_test_dependencies(property_map BOOST_DEPENDS test concept_check any)
boost_test_compile(property_map_cc)
Modified: branches/release/libs/property_map/test/dynamic_properties_test.cpp
==============================================================================
--- branches/release/libs/property_map/test/dynamic_properties_test.cpp (original)
+++ branches/release/libs/property_map/test/dynamic_properties_test.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -18,8 +18,8 @@
#endif
#include <boost/test/minimal.hpp>
-#include <boost/dynamic_property_map.hpp>
-#include <boost/property_map.hpp>
+#include <boost/property_map/dynamic_property_map.hpp>
+#include <boost/property_map/property_map.hpp>
#include <map>
#include <iostream>
#include <string>
Modified: branches/release/libs/property_map/test/property_map_cc.cpp
==============================================================================
--- branches/release/libs/property_map/test/property_map_cc.cpp (original)
+++ branches/release/libs/property_map/test/property_map_cc.cpp 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
@@ -3,7 +3,8 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#include <boost/property_map.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/property_map/shared_array_property_map.hpp>
#include <map>
// This file checks the property map concepts against the property map
@@ -103,5 +104,13 @@
typedef dummy_property_map PMap;
function_requires<ReadWritePropertyMapConcept<PMap, int> >();
}
+ {
+ typedef sgi_assignable_archetype<> Key; // ?
+ typedef sgi_assignable_archetype<> Value;
+ typedef random_access_iterator_archetype<Value> Iterator;
+ typedef readable_property_map_archetype<Key, std::ptrdiff_t> IndexMap;
+ typedef shared_array_property_map<Value, IndexMap> PMap;
+ function_requires<Mutable_LvaluePropertyMapConcept<PMap, Key> >();
+ }
return 0;
}
Deleted: branches/release/libs/property_map/vector_property_map.html
==============================================================================
--- branches/release/libs/property_map/vector_property_map.html 2009-06-08 11:45:46 EDT (Mon, 08 Jun 2009)
+++ (empty file)
@@ -1,225 +0,0 @@
-<HTML>
-<!--
- -- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
- --
- -- Permission to use, copy, modify, distribute and sell this software
- -- and its documentation for any purpose is hereby granted without fee,
- -- provided that the above copyright notice appears in all copies and
- -- that both that copyright notice and this permission notice appear
- -- in supporting documentation. We make no
- -- representations about the suitability of this software for any
- -- purpose. It is provided "as is" without express or implied warranty.
- -->
-<Head>
-<Title>Vector Property Map</Title>
-<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
- ALINK="#ff0000">
-<IMG SRC="../../boost.png"
- ALT="C++ Boost" width="277" height="86">
-
-<BR Clear>
-
-
-<H2><A NAME="sec:vector-property-map"></A>
-</h2>
-<PRE>
-template<typename T, typename IndexMap = identity_property_map>
-class vector_property_map;
-</PRE>
-
-<P>
-This property map is used to efficiently store properties for a variable
-number of elements. It's somewhere between <a
-href="associative_property_map.html">associative_property_map</a> and
-iterator_property_map. The latter
-is very fast, but requires that the number of stored elements is known
-when creating property map. The former does not have this requirement, but
-is slower, and requires stored elements to be comparable.
-
-<p>
-The <tt>vector_property_map</tt> uses mapping from key to indices,
-and allows to add new elements. It accoplishes this by storing values
-in a vector, which is resized on demand.
-
-<p>
-Note that <tt>vector_property_map</tt> does not provide reference/pointer
-stability for stored values.
-
-<h3>Example</h3>
-
-example3.cpp:
-
-<p>
-<pre>
-#include <boost/vector_property_map.hpp>
-#include <string>
-#include <iostream>
-
-int main()
-{
- boost::vector_property_map<std::string> m;
-
- // Assign string to '4'.
- m[4] = "e";
- std::cout << "'" << m[4] << "'\n";
-
- // Grab string from '10'. Since none is associated,
- // "" will be returned.
- std::cout << "'" << m[10] << "'\n";
-}
-</pre>
-
-<H3>Where Defined</H3>
-
-<P>
-boost/vector_property_map.hpp
-
-<p>
-<H3>Model Of</H3>
-
-Lvalue Property Map
-
-<P>
-
-<H3>Template Parameters</H3>
-
-<P>
-
-<TABLE border>
-<TR>
-<th>Parameter</th><th>Description</th><th>Default</th>
-</tr>
-
-
-<TR>
-<TD><TT>T</TT></TD>
-<TD>The type of property value. Must be both <a
-href="http://www.sgi.com/tech/stl/Assignable.html">Assignable</a>
-and <a
-href="http://www.sgi.com/tech/stl/DefaultConstructible.html">DefaultConstructible</a>.
-</TD>
-<TD> </td>
-</tr>
-
-<TR>
-<TD><TT>IndexMap</TT></TD> <TD>Must be a model of <a
-href="./ReadablePropertyMap.html">Readable Property Map</a>
-and the value type must be convertible to
-<tt>std::vector<T>::size_type</tt>.</TD>
-<TD>identity_property_map</TD>
-</TR>
-
-</TABLE>
-<P>
-
-<H3>Members</H3>
-
-<P>
-In addition to the methods and functions required by <a
-href="./LvaluePropertyMap.html">Lvalue Property Map</a>, this
-class has the following members.
-
-<hr>
-
-<pre>
-vector_property_map(const IndexMap& index = IndexMap())
-</pre>
-Constructor which takes an index map.
-
-<hr>
-
-<pre>
-vector_property_map(unsigned initial_size, const IndexMap& index = IndexMap())
-</pre>
-This constructor version allows to specify maximum index of element
-that will be stored. Correct number will improve performance, but semantic
-is always the same.
-
-<hr>
-
-<pre>
-vector_property_map(const vector_property_map&)
-</pre>
-Copy constructor. The copy will share the same data and changes
-made to it will affect original property map.
-
-<hr>
-
-<pre>
-vector_property_map& operator=(const vector_property_map&)
-</pre>
-Assignment operator. The semantic is the same as for copy constructor.
-
-<hr>
-
-<pre>
-reference operator[](const key_type& v) const
-</pre>
-The operator bracket for property access.
-
-<hr>
-
-<pre>
-std::vector<T>::iterator storage_begin()
-std::vector<T>::iterator storage_end()
-std::vector<T>::const_iterator storage_begin()
-std::vector<T>::const_iterator storage_end()
-</pre>
-
-<p>This group of methods gives access to begin and end iterators of the
-underlying vector.</p>
-
-<p><b>Rationale:</b> The methods are handy, for example, when it's needed to
-specify a single value for all elements in a freshly created property map. The
-methods are not called simply "begin" and "end" since
-conceptually, <tt>vector_property_map</tt> is unbounded map, and has no end
-iterator. The direct access to the underlying method is not provided, since
-it would decrease encapsulation and make future performance tuning dangerous.
-
-<p><b>Acknolegements:</b> Matthias Troyer suggested adding those functions.
-
-<hr>
-
-<pre>
-void reserve(unsigned size)
-</pre>
-Reserve the space for storing elements with maximum index of 'size'. Unless
-element with greater index is accesses, all accesses will be take O(1) time.
-
-
-<hr>
-
-<h3>Non-Member functions</h3>
-
-<hr>
-
-<pre>
-template<typename T, typename IndexMap>
-vector_property_map<T, IndexMap>
-make_vector_property_map(IndexMap index)
-{
- return vector_property_map<T, IndexMap>(index);
-}
-</pre>
-A function for conveniently creating a vector property map.
-
-<br>
-<HR>
-<TABLE>
-<TR valign=top>
-<TD nowrap>Copyright © 2002</TD><TD>
-Jeremy Siek,
-Indiana University (<A
-HREF="mailto:jsiek_at_[hidden]">jsiek_at_[hidden]</A>)<br>
-<A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Indiana University (<A HREF="mailto:llee1_at_[hidden]">llee1_at_[hidden]</A>)<br>
-Andrew Lumsdaine,
-Indiana University (<A
-HREF="mailto:lums_at_[hidden]">lums_at_[hidden]</A>)
-</TD></TR>
-<tr>
-<td nowrap>Copyright © 2003</td><td>Vladimir Prus</td>
-</tr>
-</TABLE>
-
-</BODY>
-</HTML>
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk