Boost logo

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>("&lt;"); break;
+ case Ch('>'): r += boost::graph_detail_from_property_tree::widen<Ch>("&gt;"); break;
+ case Ch('&'): r += boost::graph_detail_from_property_tree::widen<Ch>("&amp;"); break;
+ case Ch('"'): r += boost::graph_detail_from_property_tree::widen<Ch>("&quot;"); break;
+ case Ch('\''): r += boost::graph_detail_from_property_tree::widen<Ch>("&apos;"); 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 &current; }
+
+ 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 &current; }
-
- 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 &copy 2004</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2004</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &lt;boost/property_map.hpp&gt;
+#include &lt;boost/property_map/property_map.hpp&gt;
 #include &lt;vector&gt;
 
 ...
@@ -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 &copy 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright &copy; 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&lt;G, PropertyTag&gt;::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&lt;G, PropertyTag&gt;::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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2008</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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&nbsp;first, EdgeIterator&nbsp;last,
                EdgePropertyIterator&nbsp;ep_iter,
                vertices_size_type&nbsp;n,
- vertices_size_type&nbsp;m = 0,
+ edges_size_type&nbsp;m = 0,
                const&nbsp;GraphProperty&amp;&nbsp;p&nbsp;=&nbsp;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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2004</TD><TD>
+<TD nowrap>Copyright &copy; 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 &lt;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&gt;
+inline void
+astar_search_no_init
+ (VertexListGraph &amp;g,
+ typename graph_traits&lt;VertexListGraph&gt;::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 &copy 2004</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2004</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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&lt;Edge&gt;</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 &copy 2004</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2004</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &#8212; 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>&lt;<span class="bold"><b>typename</b></span> VertexListGraph, <span class="bold"><b>typename</b></span> PositionMap, <span class="bold"><b>typename</b></span> Radius&gt;
@@ -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 &copy 2004</TD><TD>
+<TD nowrap>Copyright &copy; 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>&lt;boost/graph/compressed_sparse_row_graph.hpp&gt;</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&lt;typename MultiPassInputIterator&gt;
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin, MultiPassInputIterator edge_end,
+ vertices_size_type numverts,
+ const GraphProperty&amp; prop = GraphProperty());
+
+ template&lt;typename MultiPassInputIterator, typename EdgePropertyIterator&gt;
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin, MultiPassInputIterator edge_end,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type numverts,
+ const GraphProperty&amp; prop = GraphProperty());
+
+ <i>// Old sorted edge list constructors <b>(old interface only)</b></i>
   template&lt;typename InputIterator&gt;
- 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&amp; prop = GraphProperty());
 
   template&lt;typename InputIterator, typename EdgePropertyIterator&gt;
- 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&amp; prop = GraphProperty());
 
+ <i>// New sorted edge list constructors <b>(both interfaces)</b></i>
+ template&lt;typename InputIterator&gt;
+ 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&amp; prop = GraphProperty());
+
+ template&lt;typename InputIterator, typename EdgePropertyIterator&gt;
+ 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&amp; prop = GraphProperty());
+
+ <i>// In-place unsorted edge list constructors <b>(new interface only)</b></i>
+ template&lt;typename InputIterator&gt;
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector&lt;vertex_descriptor&gt;&amp; sources,
+ std::vector&lt;vertex_descriptor&gt;&amp; targets,
+ vertices_size_type numverts,
+ const GraphProperty&amp; prop = GraphProperty());
+
+ template&lt;typename InputIterator&gt;
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector&lt;vertex_descriptor&gt;&amp; sources,
+ std::vector&lt;vertex_descriptor&gt;&amp; targets,
+ std::vector&lt;EdgeProperty&gt;&amp; edge_props,
+ vertices_size_type numverts,
+ const GraphProperty&amp; prop = GraphProperty());
+
+ <i>// Miscellaneous constructors <b>(both interfaces)</b></i>
   template&lt;typename Graph, typename VertexIndexMap&gt;
   <a href="#graph-const">compressed_sparse_row_graph</a>(const Graph&amp; g, const VertexIndexMap&amp; vi,
                               vertices_size_type numverts,
@@ -127,7 +186,7 @@
   template&lt;typename Graph&gt;
   explicit compressed_sparse_row_graph(const Graph&amp; g);
 
- <i>// Graph mutators</i>
+ <i>// Graph mutators (both interfaces)</i>
   template&lt;typename Graph, typename VertexIndexMap&gt;
   void assign(const Graph&amp; g, const VertexIndexMap&amp; vi,
               vertices_size_type numverts, edges_size_type numedges);
@@ -138,43 +197,46 @@
   template&lt;typename Graph&gt;
   void assign(const Graph&amp; g);
 
- <i>// Property Access</i>
+ <i>// Property Access (both interfaces)</i>
   VertexProperty&amp; operator[](vertex_descriptor v);
   const VertexProperty&amp; operator[](vertex_descriptor v) const;
   EdgeProperty&amp; operator[](edge_descriptor v);
   const EdgeProperty&amp; 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&amp;);
 vertex_descriptor target(edge_descriptor, const compressed_sparse_row_graph&amp;);
 std::pair&lt;out_edge_iterator, out_edge_iterator&gt;
   out_edges(vertex_descriptor, const compressed_sparse_row_graph&amp;);
 degree_size_type out_degree(vertex_descriptor v, const compressed_sparse_row_graph&amp;);
 
-<i>// Adjacency Graph requirements</i>
+<i>// Adjacency Graph requirements (both interfaces)</i>
 std::pair&lt;adjacency_iterator, adjacency_iterator&gt;
   adjacent_vertices(vertex_descriptor, const compressed_sparse_row_graph&amp;);
 
-<i>// Vertex List Graph requirements</i>
+<i>// Vertex List Graph requirements (both interfaces)</i>
 std::pair&lt;vertex_iterator, vertex_iterator&gt; vertices(const compressed_sparse_row_graph&amp;);
 vertices_size_type num_vertices(const compressed_sparse_row_graph&amp;);
 
-<i>// Edge List Graph requirements</i>
+<i>// Edge List Graph requirements (both interfaces)</i>
 std::pair&lt;edge_iterator, edge_iterator&gt; edges(const compressed_sparse_row_graph&amp;);
 edges_size_type num_edges(const compressed_sparse_row_graph&amp;);
 
-<i>// Vertex access</i>
+<i>// Vertex access (both interfaces)</i>
 vertex_descriptor vertex(vertices_size_type i, const compressed_sparse_row_graph&amp;);
 
 <i>// Edge access</i>
+<b>(old interface only)</b>
 std::pair&lt;out_edge_iterator, out_edge_iterator&gt;
   <a href="#edge_range">edge_range</a>(vertex_descriptor u, vertex_descriptor v, const compressed_sparse_row_graph&amp;);
+<b>(old interface only)</b>
 std::pair&lt;edge_descriptor, bool&gt;
   <a href="#edge">edge</a>(vertex_descriptor u, vertex_descriptor v, const compressed_sparse_row_graph&amp;);
+<b>(both interfaces)</b>
 edge_descriptor edge_from_index(edges_size_type i, const compressed_sparse_row_graph&amp;);
 
-<i>// Property map accessors</i>
+<i>// Property map accessors (both interfaces)</i>
 template&lt;typename PropertyTag&gt;
 property_map&lt;compressed_sparse_row_graph, PropertyTag&gt;::type
 <a href="#get">get</a>(PropertyTag, compressed_sparse_row_graph&amp; g)
@@ -202,7 +264,7 @@
 void set_property(const compressed_sparse_row_graph&amp; g, GraphPropertyTag,
                   const typename graph_property&lt;compressed_sparse_row_graph, GraphPropertyTag&gt;::type&amp; value);
 
-<i>// Incremental construction functions</i>
+<i>// Incremental construction functions (old interface only)</i>
 template&lt;typename Graph&gt;
 vertex_descriptor add_vertex(compressed_sparse_row_graph&amp; g);
 
@@ -210,7 +272,7 @@
 vertex_descriptor add_vertices(vertices_size_type count, compressed_sparse_row_graph&amp; g);
 
 template&lt;typename Graph&gt;
-edge_descriptor add_vertices(vertex_descriptor src, vertex_descriptor tgt, compressed_sparse_row_graph&amp; g);
+edge_descriptor add_edge(vertex_descriptor src, vertex_descriptor tgt, compressed_sparse_row_graph&amp; g);
 
 } <i>// end namespace boost</i>
    </pre>
@@ -339,8 +401,64 @@
     <hr></hr>
 
     <pre><a name="edge-const"></a>
+ template&lt;typename MultiPassInputIterator&gt;
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin, MultiPassInputIterator edge_end,
+ vertices_size_type numverts,
+ const GraphProperty&amp; 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&lt;typename MultiPassInputIterator, typename EdgePropertyIterator&gt;
+ compressed_sparse_row_graph(edges_are_unsorted_t,
+ MultiPassInputIterator edge_begin, MultiPassInputIterator edge_end,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type numverts,
+ const GraphProperty&amp; 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&lt;typename InputIterator&gt;
- 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&amp; 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 &gt; i</i>.
+ vertices <i>j</i> where <i>j &gt; 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&lt;typename InputIterator, typename EdgePropertyIterator&gt;
- 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&lt;typename InputIterator&gt;
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector&lt;vertex_descriptor&gt;&amp; sources,
+ std::vector&lt;vertex_descriptor&gt;&amp; targets,
+ vertices_size_type numverts,
+ const GraphProperty&amp; 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&lt;typename InputIterator&gt;
+ compressed_sparse_row_graph(construct_inplace_from_sources_and_targets_t,
+ std::vector&lt;vertex_descriptor&gt;&amp; sources,
+ std::vector&lt;vertex_descriptor&gt;&amp; targets,
+ std::vector&lt;EdgeProperty&gt;&amp; edge_props,
+ vertices_size_type numverts,
+ const GraphProperty&amp; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &lt;class Graph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistZero, class ColorMap&gt;
+void
+dijkstra_shortest_paths_no_init
+ (const Graph&amp; g,
+ typename graph_traits&lt;Graph&gt;::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&lt;D&gt;</tt> with
+ <b>Default:</b> <tt>closed_plus&lt;D&gt;</tt> with
    <tt>D=typename property_traits&lt;DistanceMap&gt;::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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2009</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy; 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&ouml;s-Renyi Generator</Title>
@@ -142,7 +142,7 @@
 <HR>
 <TABLE>
 <TR valign=top>
-<TD nowrap>Copyright &copy 2005</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2002-2004</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2004</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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&uuml;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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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&lt;TGraph&gt;::edge_descriptor&gt;* 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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)&nbsp;[<A
+same sense as the Standard Template Library (STL)&nbsp;[<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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">aaron.windsor_at_[hidden]</a>)
+Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &lt;boost/config.hpp&gt;
 #include &lt;iostream&gt;
 #include &lt;string&gt;
-#include &lt;boost/graph/kolmogorov_map_flow.hpp&gt;
+#include &lt;boost/graph/kolmogorov_max_flow.hpp&gt;
 #include &lt;boost/graph/adjacency_list.hpp&gt;
 #include &lt;boost/graph/read_dimacs.hpp&gt;
+#include &lt;boost/graph/graph_utility.hpp&gt;
 
 int
 main()
 {
   using namespace boost;
 
- typedef adjacency_list_traits&lt;vecS, vecS, directedS&gt; Traits;
- typedef adjacency_list&lt;vecS, vecS, directedS,
- property&lt;vertex_name_t, std::string&gt;,
- property&lt;edge_capacity_t, long,
- property&lt;edge_residual_capacity_t, long,
- property&lt;edge_reverse_t, Traits::edge_descriptor&gt; &gt; &gt;
- &gt; Graph;
-
+ typedef adjacency_list_traits &lt; vecS, vecS, directedS &gt; Traits;
+ typedef adjacency_list &lt; vecS, vecS, directedS,
+ property &lt; vertex_name_t, std::string,
+ property &lt; vertex_index_t, long,
+ property &lt; vertex_color_t, boost::default_color_type,
+ property &lt; vertex_distance_t, long,
+ property &lt; vertex_predecessor_t, Traits::edge_descriptor &gt; &gt; &gt; &gt; &gt;,
+
+ property &lt; edge_capacity_t, long,
+ property &lt; edge_residual_capacity_t, long,
+ property &lt; edge_reverse_t, Traits::edge_descriptor &gt; &gt; &gt; &gt; Graph;
+
   Graph g;
- long flow;
-
- property_map&lt;Graph, edge_capacity_t&gt;::type
- capacity = get(edge_capacity, g);
- property_map&lt;Graph, edge_reverse_t&gt;::type
- rev = get(edge_reverse, g);
- property_map&lt;Graph, edge_residual_capacity_t&gt;::type
- residual_capacity = get(edge_residual_capacity, g);
-
+ property_map &lt; Graph, edge_capacity_t &gt;::type
+ capacity = get(edge_capacity, g);
+ property_map &lt; Graph, edge_residual_capacity_t &gt;::type
+ residual_capacity = get(edge_residual_capacity, g);
+ property_map &lt; Graph, edge_reverse_t &gt;::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 &lt;&lt; &quot;c The total flow:&quot; &lt;&lt; std::endl;
- std::cout &lt;&lt; &quot;s &quot; &lt;&lt; flow &lt;&lt; std::endl &lt;&lt; std::endl;
-
- std::cout &lt;&lt; &quot;c flow values:&quot; &lt;&lt; std::endl;
- graph_traits&lt;Graph&gt;::vertex_iterator u_iter, u_end;
- graph_traits&lt;Graph&gt;::out_edge_iterator ei, e_end;
+ std::vector&lt;default_color_type&gt; color(num_vertices(g));
+ std::vector&lt;long&gt; distance(num_vertices(g));
+ long flow = kolmogorov_max_flow(g ,s, t);
+
+ std::cout &lt;&lt; "c The total flow:" &lt;&lt; std::endl;
+ std::cout &lt;&lt; "s " &lt;&lt; flow &lt;&lt; std::endl &lt;&lt; std::endl;
+
+ std::cout &lt;&lt; "c flow values:" &lt;&lt; std::endl;
+ graph_traits &lt; Graph &gt;::vertex_iterator u_iter, u_end;
+ graph_traits &lt; Graph &gt;::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] &gt; 0)
- std::cout &lt;&lt; &quot;f &quot; &lt;&lt; *u_iter &lt;&lt; &quot; &quot; &lt;&lt; target(*ei, g) &lt;&lt; &quot; &quot;
- &lt;&lt; (capacity[*ei] - residual_capacity[*ei]) &lt;&lt; std::endl;
- return 0;
+ std::cout &lt;&lt; "f " &lt;&lt; *u_iter &lt;&lt; " " &lt;&lt; target(*ei, g) &lt;&lt; " "
+ &lt;&lt; (capacity[*ei] - residual_capacity[*ei]) &lt;&lt; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &#8212; 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>&lt;<span class="bold"><b>typename</b></span> T = double&gt;
 <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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright &copy; 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 &copy 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright &copy; 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 &copy 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright &copy; 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&lt;Graph&gt;::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 &copy 2008</TD><TD>
+<TD nowrap>Copyright &copy; 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> &nbsp(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> &nbsp(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> &nbsp(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> &nbsp(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> &nbsp(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 &copy 2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright &copy; 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 &copy 2007 Aaron Windsor (<a href="mailto:aaron.windsor_at_[hidden]">
+Copyright &copy; 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 &copy 2005</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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 &copy 2000-2001</TD><TD>
+<TD nowrap>Copyright &copy; 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&amp; 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&amp; 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&lt;Graph&gt;::vertex_descriptor s</tt>
 <blockquote>
@@ -567,7 +563,7 @@
 <table>
 <tr valign=top>
 <td
-nowrap>Copyright &copy 2006</td>
+nowrap>Copyright &copy; 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&amp; 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&amp; in, MutableGraph&amp; graph,
                   dynamic_properties&amp; 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">&lt;boost/graph/graphml.hpp&gt;</span></tt></p>
+<h1><a class="toc-backref" href="#id2">Where Defined</a></h1>
+<p><tt class="docutils literal"><span class="pre">&lt;boost/graph/graphml.hpp&gt;</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&lt;setS,vecS&gt;</span></tt>,
+One example of such a graph is <tt class="docutils literal"><span class="pre">boost::adjacency_list&lt;setS,vecS&gt;</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=&quot;directed&quot;</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=&quot;undirected&quot;</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 &quot;bgl-graphml&quot; 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 &quot;boost_graph&quot; 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 &lt;typename MutableGraph&gt;
-bool read_graphviz(std::istream&amp; in, MutableGraph&amp; graph,
- dynamic_properties&amp; dp,
- const std::string&amp; node_id = &quot;node_id&quot;);
-
-// Only available if BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS is defined
-template &lt;typename MultiPassIterator, typename MutableGraph&gt;
-bool read_graphviz(MultiPassIterator begin, MultiPassIterator end,
- MutableGraph&amp; graph, dynamic_properties&amp; dp,
- const std::string&amp; node_id = &quot;node_id&quot;);
-
-// Deprecated GraphViz readers
-void read_graphviz(const std::string&amp; file, GraphvizDigraph&amp; g);
-void read_graphviz(FILE* file, GraphvizDigraph&amp; g);
-void read_graphviz(const std::string&amp; file, GraphvizGraph&amp; g);
-void read_graphviz(FILE* file, GraphvizGraph&amp; g);
+namespace boost {
+
+ template &lt;typename MutableGraph&gt;
+ bool read_graphviz(std::istream&amp; in, MutableGraph&amp; graph,
+ dynamic_properties&amp; dp,
+ const std::string&amp; node_id = &quot;node_id&quot;);
+
+ template &lt;typename MutableGraph&gt;
+ bool read_graphviz(std::string&amp; str, MutableGraph&amp; graph,
+ dynamic_properties&amp; dp,
+ const std::string&amp; node_id = &quot;node_id&quot;);
+
+ template &lt;typename InputIterator, typename MutableGraph&gt;
+ bool read_graphviz(InputIterator begin, InputIterator end,
+ MutableGraph&amp; graph, dynamic_properties&amp; dp,
+ const std::string&amp; node_id = &quot;node_id&quot;);
+
+}
 </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">&lt;boost/graph/graphviz.hpp&gt;</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">&lt;boost/graph/graphviz.hpp&gt;</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&amp;);
+ 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 &lt; vertex_name_t, std::string,
- property &lt; vertex_color_t, float &gt; &gt; vertex_p;
+ property &lt; vertex_color_t, float &gt; &gt; vertex_p;
 // Edge properties
 typedef property &lt; edge_weight_t, double &gt; edge_p;
 // Graph properties
@@ -162,7 +167,7 @@
 dp.property(&quot;weight&quot;,weight);
 
 // Use ref_property_map to turn a graph property into a property map
-boost::ref_property_map&lt;graph_t*,std::string&gt;
+boost::ref_property_map&lt;graph_t*,std::string&gt;
   gname(get_property(graph,graph_name));
 dp.property(&quot;name&quot;,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 &quot;boost_graph&quot; 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">-&gt;</span> <span class="pre">subgraph</span> <span class="pre">{b</span> <span class="pre">-&gt;</span> <span class="pre">c}</span> <span class="pre">-&gt;</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">-&gt;</span> <span class="pre">b</span> <span class="pre">-&gt;</span> <span class="pre">e</span> <span class="pre">;</span> <span class="pre">a</span> <span class="pre">-&gt;</span> <span class="pre">c</span> <span class="pre">-&gt;</span> <span class="pre">e</span> <span class="pre">;</span> <span class="pre">b</span> <span class="pre">-&gt;</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">-&gt;</span> <span class="pre">subgraph</span> <span class="pre">{b</span> <span class="pre">-&gt;</span> <span class="pre">c}</span> <span class="pre">-&gt;</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">-&gt;</span> <span class="pre">b</span> <span class="pre">-&gt;</span> <span class="pre">e</span> <span class="pre">;</span> <span class="pre">a</span> <span class="pre">-&gt;</span> <span class="pre">c</span> <span class="pre">-&gt;</span> <span class="pre">e</span> <span class="pre">;</span> <span class="pre">b</span> <span class="pre">-&gt;</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 &quot;ID&am