|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r65766 - in branches/release: . boost boost/algorithm/string boost/archive boost/bimap boost/config boost/detail boost/filesystem boost/functional/hash boost/fusion boost/gil boost/graph boost/graph/detail boost/graph/distributed boost/integer boost/interprocess boost/intrusive boost/io boost/iostreams boost/math boost/msm boost/numeric/ublas boost/pending boost/program_options boost/property_tree boost/python boost/range boost/regex boost/serialization boost/signals boost/signals2 boost/spirit boost/spirit/home boost/spirit/home/karma boost/spirit/home/support boost/statechart boost/system boost/thread boost/tr1 boost/type_traits boost/unordered boost/utility boost/uuid boost/variant boost/wave doc libs libs/algorithm/string libs/array/doc libs/array/test libs/bimap libs/config libs/filesystem libs/functional/hash libs/fusion libs/graph/test libs/graph_parallel libs/graph_parallel/test libs/integer libs/interprocess libs/intrusive libs/iostreams libs/math libs/math/doc/sf_and_dist libs/mpi/build libs/mpl/doc/refmanual libs/mpl/doc/src/refmanual libs/msm libs/numeric/ublas libs/numeric/ublas/doc libs/program_options libs/property_tree libs/python libs/range libs/regex libs/serialization libs/serialization/doc libs/serialization/test libs/signals libs/signals2 libs/spirit libs/spirit/classic/example libs/spirit/doc libs/spirit/example libs/spirit/phoenix libs/spirit/test libs/spirit/test/qi libs/statechart libs/static_assert libs/system libs/thread libs/timer libs/tr1 libs/type_traits libs/type_traits/doc libs/unordered libs/utility libs/utility/swap/test libs/uuid libs/wave more more/getting_started status tools tools/bcp tools/boostbook tools/build/v2 tools/inspect tools/quickbook tools/regression tools/release tools/wave
From: jewillco_at_[hidden]
Date: 2010-10-05 13:42:58
Author: jewillco
Date: 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
New Revision: 65766
URL: http://svn.boost.org/trac/boost/changeset/65766
Log:
Merged r64074, r64645, r64935, r65198, r65385, r65764 (all related to bundled graph properties as far as I remember)
Properties modified:
branches/release/ (props changed)
branches/release/INSTALL (props changed)
branches/release/Jamroot (props changed)
branches/release/LICENSE_1_0.txt (props changed)
branches/release/boost/ (props changed)
branches/release/boost-build.jam (props changed)
branches/release/boost.css (props changed)
branches/release/boost.png (props changed)
branches/release/boost/algorithm/string/ (props changed)
branches/release/boost/archive/ (props changed)
branches/release/boost/archive/basic_archive.hpp (props changed)
branches/release/boost/array.hpp (props changed)
branches/release/boost/bimap/ (props changed)
branches/release/boost/config/ (props changed)
branches/release/boost/config.hpp (props changed)
branches/release/boost/detail/ (props changed)
branches/release/boost/detail/endian.hpp (props changed)
branches/release/boost/filesystem/ (props changed)
branches/release/boost/filesystem.hpp (props changed)
branches/release/boost/functional/hash/ (props changed)
branches/release/boost/fusion/ (props changed)
branches/release/boost/gil/ (props changed)
branches/release/boost/graph/ (props changed)
branches/release/boost/integer/ (props changed)
branches/release/boost/interprocess/ (props changed)
branches/release/boost/intrusive/ (props changed)
branches/release/boost/io/ (props changed)
branches/release/boost/iostreams/ (props changed)
branches/release/boost/math/ (props changed)
branches/release/boost/math_fwd.hpp (props changed)
branches/release/boost/msm/ (props changed)
branches/release/boost/numeric/ublas/ (props changed)
branches/release/boost/numeric/ublas/functional.hpp (props changed)
branches/release/boost/program_options/ (props changed)
branches/release/boost/property_tree/ (props changed)
branches/release/boost/python/ (props changed)
branches/release/boost/range/ (props changed)
branches/release/boost/regex/ (props changed)
branches/release/boost/serialization/ (props changed)
branches/release/boost/signals/ (props changed)
branches/release/boost/signals2/ (props changed)
branches/release/boost/signals2.hpp (props changed)
branches/release/boost/spirit/ (props changed)
branches/release/boost/spirit/home/ (props changed)
branches/release/boost/spirit/home/karma/ (props changed)
branches/release/boost/spirit/home/support/attributes.hpp (props changed)
branches/release/boost/statechart/ (props changed)
branches/release/boost/system/ (props changed)
branches/release/boost/thread/ (props changed)
branches/release/boost/thread.hpp (props changed)
branches/release/boost/tr1/ (props changed)
branches/release/boost/type_traits/ (props changed)
branches/release/boost/unordered/ (props changed)
branches/release/boost/utility/ (props changed)
branches/release/boost/utility/value_init.hpp (props changed)
branches/release/boost/uuid/ (props changed)
branches/release/boost/variant/ (props changed)
branches/release/boost/version.hpp (props changed)
branches/release/boost/wave/ (props changed)
branches/release/bootstrap.bat (props changed)
branches/release/bootstrap.sh (props changed)
branches/release/doc/ (props changed)
branches/release/index.htm (props changed)
branches/release/index.html (props changed)
branches/release/libs/ (props changed)
branches/release/libs/algorithm/string/ (props changed)
branches/release/libs/array/doc/array.xml (props changed)
branches/release/libs/array/test/array0.cpp (props changed)
branches/release/libs/array/test/array2.cpp (props changed)
branches/release/libs/bimap/ (props changed)
branches/release/libs/config/ (props changed)
branches/release/libs/filesystem/ (props changed)
branches/release/libs/functional/hash/ (props changed)
branches/release/libs/fusion/ (props changed)
branches/release/libs/graph_parallel/ (props changed)
branches/release/libs/integer/ (props changed)
branches/release/libs/interprocess/ (props changed)
branches/release/libs/intrusive/ (props changed)
branches/release/libs/iostreams/ (props changed)
branches/release/libs/libraries.htm (props changed)
branches/release/libs/maintainers.txt (props changed)
branches/release/libs/math/ (props changed)
branches/release/libs/math/doc/sf_and_dist/ (props changed)
branches/release/libs/mpi/build/ (props changed)
branches/release/libs/mpl/doc/refmanual/broken-compiler-workarounds.html (props changed)
branches/release/libs/mpl/doc/refmanual/categorized-index-concepts.html (props changed)
branches/release/libs/mpl/doc/refmanual/cfg-no-preprocessed-headers.html (props changed)
branches/release/libs/mpl/doc/refmanual/composition-and-argument-binding.html (props changed)
branches/release/libs/mpl/doc/refmanual/data-types-concepts.html (props changed)
branches/release/libs/mpl/doc/refmanual/data-types-miscellaneous.html (props changed)
branches/release/libs/mpl/doc/refmanual/extensible-associative-sequence.html (props changed)
branches/release/libs/mpl/doc/refmanual/inserter-class.html (props changed)
branches/release/libs/mpl/doc/refmanual/tag-dispatched-metafunction.html (props changed)
branches/release/libs/mpl/doc/refmanual/trivial-metafunctions-summary.html (props changed)
branches/release/libs/mpl/doc/src/refmanual/Iterators-Iterator.rst (props changed)
branches/release/libs/msm/ (props changed)
branches/release/libs/numeric/ublas/ (props changed)
branches/release/libs/numeric/ublas/doc/ (props changed)
branches/release/libs/program_options/ (props changed)
branches/release/libs/property_tree/ (props changed)
branches/release/libs/python/ (props changed)
branches/release/libs/range/ (props changed)
branches/release/libs/regex/ (props changed)
branches/release/libs/serialization/ (props changed)
branches/release/libs/serialization/doc/ (props changed)
branches/release/libs/serialization/test/ (props changed)
branches/release/libs/serialization/test/A.cpp (props changed)
branches/release/libs/serialization/test/A.hpp (props changed)
branches/release/libs/serialization/test/A.ipp (props changed)
branches/release/libs/serialization/test/B.hpp (props changed)
branches/release/libs/serialization/test/C.hpp (props changed)
branches/release/libs/serialization/test/D.hpp (props changed)
branches/release/libs/serialization/test/J.hpp (props changed)
branches/release/libs/serialization/test/Jamfile.v2 (props changed)
branches/release/libs/serialization/test/base.hpp (props changed)
branches/release/libs/serialization/test/binary_archive.hpp (props changed)
branches/release/libs/serialization/test/binary_warchive.hpp (props changed)
branches/release/libs/serialization/test/derived2.hpp (props changed)
branches/release/libs/serialization/test/dll_a.cpp (props changed)
branches/release/libs/serialization/test/dll_base.cpp (props changed)
branches/release/libs/serialization/test/dll_derived2.cpp (props changed)
branches/release/libs/serialization/test/polymorphic_array_binary_archive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_base.cpp (props changed)
branches/release/libs/serialization/test/polymorphic_base.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_binary_archive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_derived1.cpp (props changed)
branches/release/libs/serialization/test/polymorphic_derived1.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_derived2.cpp (props changed)
branches/release/libs/serialization/test/polymorphic_derived2.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_text_archive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_text_warchive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_xml_archive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_xml_warchive.hpp (props changed)
branches/release/libs/serialization/test/portable_binary_archive.hpp (props changed)
branches/release/libs/serialization/test/test_array.cpp (props changed)
branches/release/libs/serialization/test/test_binary.cpp (props changed)
branches/release/libs/serialization/test/test_bitset.cpp (props changed)
branches/release/libs/serialization/test/test_check.cpp (props changed)
branches/release/libs/serialization/test/test_class_info_load.cpp (props changed)
branches/release/libs/serialization/test/test_class_info_save.cpp (props changed)
branches/release/libs/serialization/test/test_codecvt_null.cpp (props changed)
branches/release/libs/serialization/test/test_complex.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail1.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail1_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail2.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail2_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail3.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail3_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_pass.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn1.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn1_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn2.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn2_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn3.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn3_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn4.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn4_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_contained_class.cpp (props changed)
branches/release/libs/serialization/test/test_cyclic_ptrs.cpp (props changed)
branches/release/libs/serialization/test/test_decl.hpp (props changed)
branches/release/libs/serialization/test/test_delete_pointer.cpp (props changed)
branches/release/libs/serialization/test/test_deque.cpp (props changed)
branches/release/libs/serialization/test/test_derived.cpp (props changed)
branches/release/libs/serialization/test/test_derived_class.cpp (props changed)
branches/release/libs/serialization/test/test_derived_class_ptr.cpp (props changed)
branches/release/libs/serialization/test/test_diamond.cpp (props changed)
branches/release/libs/serialization/test/test_diamond_complex.cpp (props changed)
branches/release/libs/serialization/test/test_dll_exported.cpp (props changed)
branches/release/libs/serialization/test/test_dll_plugin.cpp (props changed)
branches/release/libs/serialization/test/test_dll_simple.cpp (props changed)
branches/release/libs/serialization/test/test_exported.cpp (props changed)
branches/release/libs/serialization/test/test_inclusion.cpp (props changed)
branches/release/libs/serialization/test/test_iterators.cpp (props changed)
branches/release/libs/serialization/test/test_iterators_base64.cpp (props changed)
branches/release/libs/serialization/test/test_list.cpp (props changed)
branches/release/libs/serialization/test/test_list_ptrs.cpp (props changed)
branches/release/libs/serialization/test/test_map.cpp (props changed)
branches/release/libs/serialization/test/test_mi.cpp (props changed)
branches/release/libs/serialization/test/test_mult_archive_types.cpp (props changed)
branches/release/libs/serialization/test/test_multiple_inheritance.cpp (props changed)
branches/release/libs/serialization/test/test_multiple_ptrs.cpp (props changed)
branches/release/libs/serialization/test/test_new_operator.cpp (props changed)
branches/release/libs/serialization/test/test_no_rtti.cpp (props changed)
branches/release/libs/serialization/test/test_non_default_ctor.cpp (props changed)
branches/release/libs/serialization/test/test_non_default_ctor2.cpp (props changed)
branches/release/libs/serialization/test/test_non_intrusive.cpp (props changed)
branches/release/libs/serialization/test/test_not_serializable.cpp (props changed)
branches/release/libs/serialization/test/test_null_ptr.cpp (props changed)
branches/release/libs/serialization/test/test_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_object.cpp (props changed)
branches/release/libs/serialization/test/test_optional.cpp (props changed)
branches/release/libs/serialization/test/test_pimpl.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic2.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic2.hpp (props changed)
branches/release/libs/serialization/test/test_polymorphic2imp.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic_A.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic_A.hpp (props changed)
branches/release/libs/serialization/test/test_primitive.cpp (props changed)
branches/release/libs/serialization/test/test_private_base.cpp (props changed)
branches/release/libs/serialization/test/test_private_ctor.cpp (props changed)
branches/release/libs/serialization/test/test_recursion.cpp (props changed)
branches/release/libs/serialization/test/test_registered.cpp (props changed)
branches/release/libs/serialization/test/test_reset_object_address.cpp (props changed)
branches/release/libs/serialization/test/test_set.cpp (props changed)
branches/release/libs/serialization/test/test_shared_ptr.cpp (props changed)
branches/release/libs/serialization/test/test_shared_ptr_132.cpp (props changed)
branches/release/libs/serialization/test/test_shared_ptr_multi_base.cpp (props changed)
branches/release/libs/serialization/test/test_simple_class.cpp (props changed)
branches/release/libs/serialization/test/test_simple_class_ptr.cpp (props changed)
branches/release/libs/serialization/test/test_singleton.cpp (props changed)
branches/release/libs/serialization/test/test_smart_cast.cpp (props changed)
branches/release/libs/serialization/test/test_split.cpp (props changed)
branches/release/libs/serialization/test/test_static_warning.cpp (props changed)
branches/release/libs/serialization/test/test_tools.hpp (props changed)
branches/release/libs/serialization/test/test_tracking.cpp (props changed)
branches/release/libs/serialization/test/test_traits_fail.cpp (props changed)
branches/release/libs/serialization/test/test_traits_pass.cpp (props changed)
branches/release/libs/serialization/test/test_unregistered.cpp (props changed)
branches/release/libs/serialization/test/test_utf8_codecvt.cpp (props changed)
branches/release/libs/serialization/test/test_valarray.cpp (props changed)
branches/release/libs/serialization/test/test_variant.cpp (props changed)
branches/release/libs/serialization/test/test_vector.cpp (props changed)
branches/release/libs/serialization/test/test_void_cast.cpp (props changed)
branches/release/libs/serialization/test/text_archive.hpp (props changed)
branches/release/libs/serialization/test/text_warchive.hpp (props changed)
branches/release/libs/serialization/test/xml_archive.hpp (props changed)
branches/release/libs/serialization/test/xml_warchive.hpp (props changed)
branches/release/libs/signals/ (props changed)
branches/release/libs/signals2/ (props changed)
branches/release/libs/spirit/ (props changed)
branches/release/libs/spirit/classic/example/ (props changed)
branches/release/libs/spirit/doc/ (props changed)
branches/release/libs/spirit/example/ (props changed)
branches/release/libs/spirit/phoenix/ (props changed)
branches/release/libs/spirit/test/ (props changed)
branches/release/libs/spirit/test/qi/optional.cpp (props changed)
branches/release/libs/statechart/ (props changed)
branches/release/libs/static_assert/ (props changed)
branches/release/libs/system/ (props changed)
branches/release/libs/thread/ (props changed)
branches/release/libs/timer/ (props changed)
branches/release/libs/tr1/ (props changed)
branches/release/libs/type_traits/ (props changed)
branches/release/libs/type_traits/doc/ (props changed)
branches/release/libs/unordered/ (props changed)
branches/release/libs/utility/ (props changed)
branches/release/libs/utility/swap.html (props changed)
branches/release/libs/utility/swap/test/std_bitset.cpp (props changed)
branches/release/libs/utility/value_init.htm (props changed)
branches/release/libs/utility/value_init_test.cpp (props changed)
branches/release/libs/uuid/ (props changed)
branches/release/libs/wave/ (props changed)
branches/release/more/ (props changed)
branches/release/more/getting_started/ (props changed)
branches/release/rst.css (props changed)
branches/release/status/ (props changed)
branches/release/status/Jamfile.v2 (props changed)
branches/release/tools/ (props changed)
branches/release/tools/bcp/ (props changed)
branches/release/tools/boostbook/ (props changed)
branches/release/tools/build/v2/ (props changed)
branches/release/tools/inspect/ (props changed)
branches/release/tools/quickbook/ (props changed)
branches/release/tools/regression/ (props changed)
branches/release/tools/release/ (props changed)
branches/release/tools/wave/ (props changed)
Text files modified:
branches/release/boost/graph/adjacency_list.hpp | 124 ++++++++---------
branches/release/boost/graph/adjacency_matrix.hpp | 111 +++++++--------
branches/release/boost/graph/compressed_sparse_row_graph.hpp | 37 +++-
branches/release/boost/graph/detail/adjacency_list.hpp | 77 +++-------
branches/release/boost/graph/directed_graph.hpp | 24 ++-
branches/release/boost/graph/distributed/adjacency_list.hpp | 7 +
branches/release/boost/graph/distributed/compressed_sparse_row_graph.hpp | 6
branches/release/boost/graph/edge_list.hpp | 40 ++--
branches/release/boost/graph/graph_traits.hpp | 64 ++++++--
branches/release/boost/graph/labeled_graph.hpp | 7
branches/release/boost/graph/properties.hpp | 92 +++++++++----
branches/release/boost/graph/reverse_graph.hpp | 30 +++-
branches/release/boost/graph/undirected_graph.hpp | 21 ++
branches/release/boost/graph/vector_as_graph.hpp | 6
branches/release/boost/pending/container_traits.hpp | 69 +++++++++
branches/release/boost/pending/property.hpp | 2
branches/release/libs/graph/test/csr_graph_test.cpp | 6
branches/release/libs/graph/test/test_graph.hpp | 9 +
branches/release/libs/graph/test/test_graphs.cpp | 269 +++++++++++++++++++++------------------
branches/release/libs/graph/test/test_properties.hpp | 78 +++++++---
branches/release/libs/graph/test/typestr.hpp | 9
branches/release/libs/graph_parallel/test/process_group_serialization.cpp | 4
22 files changed, 639 insertions(+), 453 deletions(-)
Modified: branches/release/boost/graph/adjacency_list.hpp
==============================================================================
--- branches/release/boost/graph/adjacency_list.hpp (original)
+++ branches/release/boost/graph/adjacency_list.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -28,6 +28,8 @@
# endif
#endif
+#include <boost/scoped_ptr.hpp>
+
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/graph_mutability_traits.hpp>
#include <boost/graph/graph_selectors.hpp>
@@ -368,37 +370,24 @@
EdgeListS>::vertex_descriptor,
VertexProperty>
{
- public: // TODO Remove me
+ public:
#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
- typedef typename detail::retag_property_list<vertex_bundle_t,
- VertexProperty>::retagged
- maybe_vertex_bundled;
-
- typedef typename detail::retag_property_list<edge_bundle_t,
- EdgeProperty>::retagged
- maybe_edge_bundled;
-#endif
+ typedef typename graph_detail::graph_prop<GraphProperty>::property graph_property_type;
+ typedef typename graph_detail::graph_prop<GraphProperty>::bundle graph_bundled;
- public:
-#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
- typedef typename detail::retag_property_list<vertex_bundle_t,
- VertexProperty>::type
- vertex_property_type;
- typedef typename detail::retag_property_list<edge_bundle_t,
- EdgeProperty>::type
- edge_property_type;
-
- // The types that are actually bundled
- typedef typename mpl::if_c<(is_same<maybe_vertex_bundled, no_property>::value),
- no_vertex_bundle,
- maybe_vertex_bundled>::type vertex_bundled;
- typedef typename mpl::if_c<(is_same<maybe_edge_bundled, no_property>::value),
- no_edge_bundle,
- maybe_edge_bundled>::type edge_bundled;
+ typedef typename graph_detail::vertex_prop<VertexProperty>::property vertex_property_type;
+ typedef typename graph_detail::vertex_prop<VertexProperty>::bundle vertex_bundled;
+
+ typedef typename graph_detail::edge_prop<EdgeProperty>::property edge_property_type;
+ typedef typename graph_detail::edge_prop<EdgeProperty>::bundle edge_bundled;
#else
+ typedef GraphProperty graph_property_type;
+ typedef no_graph_bundle graph_bundled;
+
typedef VertexProperty vertex_property_type;
- typedef EdgeProperty edge_property_type;
typedef no_vertex_bundle vertex_bundled;
+
+ typedef EdgeProperty edge_property_type;
typedef no_edge_bundle edge_bundled;
#endif
@@ -421,44 +410,51 @@
typedef DirectedS directed_selector;
typedef EdgeListS edge_list_selector;
- typedef GraphProperty graph_property_type;
- inline adjacency_list(const GraphProperty& p = GraphProperty())
- : m_property(p) { }
+ adjacency_list(const GraphProperty& p = GraphProperty())
+ : m_property(new graph_property_type(p))
+ { }
+
+ adjacency_list(const adjacency_list& x)
+ : Base(x), m_property(new graph_property_type(*x.m_property))
+ { }
- inline adjacency_list(const adjacency_list& x)
- : Base(x), m_property(x.m_property) { }
-
- inline adjacency_list& operator=(const adjacency_list& x) {
+ adjacency_list& operator=(const adjacency_list& x) {
// TBD: probably should give the strong guarantee
if (&x != this) {
Base::operator=(x);
- m_property = x.m_property;
+
+ // Copy/swap the ptr since we can't just assign it...
+ property_ptr p(new graph_property_type(*x.m_property));
+ m_property.swap(p);
}
return *this;
}
// Required by Mutable Graph
- inline adjacency_list(vertices_size_type num_vertices,
+ adjacency_list(vertices_size_type num_vertices,
const GraphProperty& p = GraphProperty())
- : Base(num_vertices), m_property(p) { }
+ : Base(num_vertices), m_property(new graph_property_type(p))
+ { }
#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
// Required by Iterator Constructible Graph
template <class EdgeIterator>
- inline adjacency_list(EdgeIterator first, EdgeIterator last,
+ adjacency_list(EdgeIterator first, EdgeIterator last,
vertices_size_type n,
edges_size_type = 0,
const GraphProperty& p = GraphProperty())
- : Base(n, first, last), m_property(p) { }
+ : Base(n, first, last), m_property(new graph_property_type(p))
+ { }
template <class EdgeIterator, class EdgePropertyIterator>
- inline adjacency_list(EdgeIterator first, EdgeIterator last,
+ adjacency_list(EdgeIterator first, EdgeIterator last,
EdgePropertyIterator ep_iter,
vertices_size_type n,
edges_size_type = 0,
const GraphProperty& p = GraphProperty())
- : Base(n, first, last, ep_iter), m_property(p) { }
+ : Base(n, first, last, ep_iter), m_property(new graph_property_type(p))
+ { }
#endif
void swap(adjacency_list& x) {
@@ -487,35 +483,39 @@
const edge_bundled& operator[](edge_descriptor e) const
{ return get(edge_bundle, *this)[e]; }
+
+ graph_bundled& operator[](graph_bundle_t)
+ { return get_property(*this); }
+
+ graph_bundled const& operator[](graph_bundle_t) const
+ { return get_property(*this); }
#endif
// protected: (would be protected if friends were more portable)
- GraphProperty m_property;
+ typedef scoped_ptr<graph_property_type> property_ptr;
+ property_ptr m_property;
};
- template <class OEL, class VL, class DirS, class VP,class EP, class GP,
- class EL, class Tag, class Value>
- inline void
- set_property(adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>& g, Tag,
- const Value& value) {
- get_property_value(g.m_property, Tag()) = value;;
+#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, typename Tag, typename Value>
+ inline void set_property(ADJLIST& g, Tag, Value const& value) {
+ get_property_value(*g.m_property, Tag()) = value;
}
- template <class OEL, class VL, class DirS, class VP, class EP, class GP,
- class Tag, class EL>
- inline
- typename graph_property<adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>, Tag>::type&
- get_property(adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>& g, Tag) {
- return get_property_value(g.m_property, Tag());
+ template<ADJLIST_PARAMS, typename Tag>
+ inline typename graph_property<ADJLIST, Tag>::type&
+ get_property(ADJLIST& g, Tag) {
+ return get_property_value(*g.m_property, Tag());
}
- template <class OEL, class VL, class DirS, class VP, class EP, class GP,
- class Tag, class EL>
- inline
- const
- typename graph_property<adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>, Tag>::type&
- get_property(const adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>& g, Tag) {
- return get_property_value(g.m_property, Tag());
+ template<ADJLIST_PARAMS, typename Tag>
+ inline typename graph_property<ADJLIST, Tag>::type const&
+ get_property(ADJLIST const& g, Tag) {
+ return get_property_value(*g.m_property, Tag());
}
// dwa 09/25/00 - needed to be more explicit so reverse_graph would work.
@@ -598,10 +598,6 @@
#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;
Modified: branches/release/boost/graph/adjacency_matrix.hpp
==============================================================================
--- branches/release/boost/graph/adjacency_matrix.hpp (original)
+++ branches/release/boost/graph/adjacency_matrix.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -25,7 +25,7 @@
#include <boost/graph/detail/edge.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/iterator/filter_iterator.hpp>
-#include <boost/pending/integer_range.hpp>
+#include <boost/range/irange.hpp>
#include <boost/graph/properties.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/static_assert.hpp>
@@ -80,36 +80,36 @@
}
-
+ // NOTE: These functions collide with the get_property function for
+ // accessing bundled graph properties. Be excplicit when using them.
template <typename EdgeProperty>
const EdgeProperty&
- get_property(const std::pair<bool, EdgeProperty>& stored_edge) {
+ get_edge_property(const std::pair<bool, EdgeProperty>& stored_edge) {
return stored_edge.second;
}
template <typename EdgeProperty>
EdgeProperty&
- get_property(std::pair<bool, EdgeProperty>& stored_edge) {
+ get_edge_property(std::pair<bool, EdgeProperty>& stored_edge) {
return stored_edge.second;
}
template <typename StoredEdgeProperty, typename EdgeProperty>
inline void
- set_property(std::pair<bool, StoredEdgeProperty>& stored_edge,
- const EdgeProperty& ep, int) {
+ set_edge_property(std::pair<bool, StoredEdgeProperty>& stored_edge,
+ const EdgeProperty& ep, int) {
stored_edge.second = ep;
}
- inline const no_property& get_property(const char&) {
+ inline const no_property& get_edge_property(const char&) {
static no_property s_prop;
return s_prop;
}
- inline no_property& get_property(char&) {
+ inline no_property& get_edge_property(char&) {
static no_property s_prop;
return s_prop;
}
template <typename EdgeProxy, typename EdgeProperty>
- inline void
- set_property(EdgeProxy, const EdgeProperty&, ...) {}
+ inline void set_edge_property(EdgeProxy, const EdgeProperty&, ...) {}
//=======================================================================
// Directed Out Edge Iterator
@@ -155,8 +155,9 @@
inline EdgeDescriptor
dereference() const
{
- return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src, m_targ,
- &get_property(*this->base()));
+ return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+ m_src, m_targ,
+ &get_edge_property(*this->base()));
}
VertexDescriptor m_src, m_targ;
VerticesSizeType m_n;
@@ -211,8 +212,9 @@
inline EdgeDescriptor
dereference() const
{
- return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src, m_targ,
- &get_property(*this->base()));
+ return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+ m_src, m_targ,
+ &get_edge_property(*this->base()));
}
MatrixIter m_last;
VertexDescriptor m_src, m_targ;
@@ -276,10 +278,9 @@
inline EdgeDescriptor
dereference() const
{
- return EdgeDescriptor(
- get_edge_exists(*this->base(), 0), m_src, m_targ
- , &get_property(*this->base())
- );
+ return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+ m_src, m_targ,
+ &get_edge_property(*this->base()));
}
VertexDescriptor m_src, m_inc, m_targ;
@@ -343,10 +344,9 @@
inline EdgeDescriptor
dereference() const
{
- return EdgeDescriptor(
- get_edge_exists(*this->base(), 0), m_targ, m_src
- , &get_property(*this->base())
- );
+ return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+ m_targ, m_src,
+ &get_edge_property(*this->base()));
}
VertexDescriptor m_src, m_inc, m_targ;
@@ -418,10 +418,9 @@
inline EdgeDescriptor
dereference() const
{
- return EdgeDescriptor(
- get_edge_exists(
- *this->base(), 0), m_src, m_targ, &get_property(*this->base())
- );
+ return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+ m_src, m_targ,
+ &get_edge_property(*this->base()));
}
MatrixIter m_start;
@@ -485,34 +484,25 @@
BOOST_STATIC_ASSERT(!(is_same<Directed, bidirectionalS>::value));
#endif
-#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
- typedef typename detail::retag_property_list<vertex_bundle_t, VertexProperty>::type
- vertex_property_type;
- typedef typename detail::retag_property_list<edge_bundle_t, EdgeProperty>::type
- edge_property_type;
-
- private:
- typedef typename detail::retag_property_list<vertex_bundle_t, VertexProperty>::retagged
- maybe_vertex_bundled;
+#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
+ typedef typename graph_detail::graph_prop<GraphProperty>::property graph_property_type;
+ typedef typename graph_detail::graph_prop<GraphProperty>::bundle graph_bundled;
- typedef typename detail::retag_property_list<edge_bundle_t, EdgeProperty>::retagged
- maybe_edge_bundled;
+ typedef typename graph_detail::vertex_prop<VertexProperty>::property vertex_property_type;
+ typedef typename graph_detail::vertex_prop<VertexProperty>::bundle vertex_bundled;
- public:
- // The types that are actually bundled
- typedef typename mpl::if_c<(is_same<maybe_vertex_bundled, no_property>::value),
- no_vertex_bundle,
- maybe_vertex_bundled>::type vertex_bundled;
- typedef typename mpl::if_c<(is_same<maybe_edge_bundled, no_property>::value),
- no_edge_bundle,
- maybe_edge_bundled>::type edge_bundled;
+ typedef typename graph_detail::edge_prop<EdgeProperty>::property edge_property_type;
+ typedef typename graph_detail::edge_prop<EdgeProperty>::bundle edge_bundled;
#else
- typedef EdgeProperty edge_property_type;
- typedef VertexProperty vertex_property_type;
+ typedef GraphProperty graph_property_type;
+ typedef no_graph_bundle graph_bundled;
+
+ typedef VertexProperty vertex_property_type;
typedef no_vertex_bundle vertex_bundled;
- typedef no_edge_bundle edge_bundled;
+
+ typedef EdgeProperty edge_property_type;
+ 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,
@@ -660,6 +650,12 @@
const edge_bundled& operator[](edge_descriptor e) const
{ return get(edge_bundle, *this)[e]; }
+
+ graph_bundled& operator[](graph_bundle_t)
+ { return get_property(*this); }
+
+ const graph_bundled& operator[](graph_bundle_t) const
+ { return get_property(*this); }
#endif
//private: if friends worked, these would be private
@@ -689,7 +685,7 @@
VertexList m_vertex_set;
std::vector<vertex_property_type> m_vertex_properties;
size_type m_num_edges;
- GraphProperty m_property;
+ graph_property_type m_property;
};
//=========================================================================
@@ -704,7 +700,7 @@
{
bool exists = detail::get_edge_exists(g.get_edge(u,v), 0);
typename adjacency_matrix<D,VP,EP,GP,A>::edge_descriptor
- e(exists, u, v, &detail::get_property(g.get_edge(u,v)));
+ e(exists, u, v, &detail::get_edge_property(g.get_edge(u,v)));
return std::make_pair(e, exists);
}
@@ -937,14 +933,14 @@
edge_descriptor;
if (detail::get_edge_exists(g.get_edge(u,v), 0) == false) {
++(g.m_num_edges);
- detail::set_property(g.get_edge(u,v), EP(ep), 0);
+ detail::set_edge_property(g.get_edge(u,v), EP(ep), 0);
detail::set_edge_exists(g.get_edge(u,v), true, 0);
return std::make_pair
- (edge_descriptor(true, u, v, &detail::get_property(g.get_edge(u,v))),
+ (edge_descriptor(true, u, v, &detail::get_edge_property(g.get_edge(u,v))),
true);
} else
return std::make_pair
- (edge_descriptor(true, u, v, &detail::get_property(g.get_edge(u,v))),
+ (edge_descriptor(true, u, v, &detail::get_edge_property(g.get_edge(u,v))),
false);
}
// O(1)
@@ -1050,8 +1046,7 @@
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&
+ 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());
@@ -1059,9 +1054,7 @@
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&
+ 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());
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 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -38,6 +38,7 @@
#include <boost/iterator/iterator_facade.hpp>
#include <boost/mpl/if.hpp>
#include <boost/graph/graph_selectors.hpp>
+#include <boost/graph/properties.hpp>
#include <boost/static_assert.hpp>
#include <boost/functional/hash.hpp>
#include <boost/utility.hpp>
@@ -170,7 +171,7 @@
* Vertex and EdgeIndex should be unsigned integral types and should
* specialize numeric_limits.
*/
-template<typename Directed = directedS,
+template<typename Directed = directedS,
typename VertexProperty = no_property,
typename EdgeProperty = no_property,
typename GraphProperty = no_property,
@@ -194,13 +195,14 @@
public:
// For Property Graph
- typedef GraphProperty graph_property_type;
+ typedef typename graph_detail::graph_prop<GraphProperty>::property graph_property_type;
+ typedef typename graph_detail::graph_prop<GraphProperty>::bundle graph_bundled;
typedef detail::compressed_sparse_row_structure<EdgeProperty, Vertex, EdgeIndex> forward_type;
public:
/* At this time, the compressed sparse row graph can only be used to
- * create directed and bidirectional graphs. In the future,
+ * create directed and bidirectional graphs. In the future,
* undirected CSR graphs will also be supported.
*/
// BOOST_STATIC_ASSERT((is_same<Directed, directedS>::value));
@@ -623,7 +625,7 @@
m_forward.add_edges_sorted_internal(first_sorted, last_sorted, detail::default_construct_iterator<edge_bundled>(), global_to_local);
}
- template <typename BidirectionalIteratorOrig, typename EPIterOrig,
+ template <typename BidirectionalIteratorOrig, typename EPIterOrig,
typename GlobalToLocal>
void
add_edges_sorted_internal_global(
@@ -637,7 +639,7 @@
// Add edges from a range of (source, target) pairs that are unsorted
template <typename InputIterator, typename GlobalToLocal>
inline void
- add_edges_internal(InputIterator first, InputIterator last,
+ add_edges_internal(InputIterator first, InputIterator last,
const GlobalToLocal& global_to_local) {
typedef compressed_sparse_row_graph Graph;
typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_t;
@@ -711,6 +713,13 @@
const edge_push_back_type& operator[](const edge_descriptor& v) const
{ return m_forward.m_edge_properties[get(edge_index, *this, v)]; }
+ // Directly access a graph bundle
+ graph_bundled& operator[](graph_bundle_t)
+ { return get_property(*this); }
+
+ const graph_bundled& operator[](graph_bundle_t) const
+ { return get_property(*this); }
+
// private: non-portable, requires friend templates
inherited_vertex_properties& vertex_properties() {return *this;}
const inherited_vertex_properties& vertex_properties() const {return *this;}
@@ -737,7 +746,9 @@
public:
// For Property Graph
- typedef GraphProperty graph_property_type;
+ typedef typename graph_detail::graph_prop<GraphProperty>::property graph_property_type;
+ typedef typename graph_detail::graph_prop<GraphProperty>::bundle graph_bundled;
+ // typedef GraphProperty graph_property_type;
typedef detail::compressed_sparse_row_structure<EdgeProperty, Vertex, EdgeIndex> forward_type;
typedef EdgeIndex /* typename boost::mpl::if_c<boost::is_same<EdgeProperty, boost::no_property>, boost::no_property, EdgeIndex> */ backward_edge_property;
@@ -990,7 +1001,7 @@
m_forward.add_edges_sorted_internal(first_sorted, last_sorted, detail::default_construct_iterator<edge_bundled>(), global_to_local);
}
- template <typename BidirectionalIteratorOrig, typename EPIterOrig,
+ template <typename BidirectionalIteratorOrig, typename EPIterOrig,
typename GlobalToLocal>
void
add_edges_sorted_internal_global(
@@ -1004,7 +1015,7 @@
// Add edges from a range of (source, target) pairs that are unsorted
template <typename InputIterator, typename GlobalToLocal>
inline void
- add_edges_internal(InputIterator first, InputIterator last,
+ add_edges_internal(InputIterator first, InputIterator last,
const GlobalToLocal& global_to_local) {
typedef compressed_sparse_row_graph Graph;
typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_t;
@@ -1098,7 +1109,7 @@
template<BOOST_DIR_CSR_GRAPH_TEMPLATE_PARMS>
inline Vertex
-add_vertex(BOOST_DIR_CSR_GRAPH_TYPE& g,
+add_vertex(BOOST_DIR_CSR_GRAPH_TYPE& g,
typename BOOST_DIR_CSR_GRAPH_TYPE::vertex_bundled const& p) {
Vertex old_num_verts_plus_one = g.m_forward.m_rowstart.size();
g.m_forward.m_rowstart.push_back(g.m_forward.m_rowstart.back());
@@ -1108,7 +1119,7 @@
template<BOOST_BIDIR_CSR_GRAPH_TEMPLATE_PARMS>
inline Vertex
-add_vertex(BOOST_BIDIR_CSR_GRAPH_TYPE& g,
+add_vertex(BOOST_BIDIR_CSR_GRAPH_TYPE& g,
typename BOOST_BIDIR_CSR_GRAPH_TYPE::vertex_bundled const& p) {
Vertex old_num_verts_plus_one = g.m_forward.m_rowstart.size();
g.m_forward.m_rowstart.push_back(g.m_forward.m_rowstart.back());
@@ -1160,7 +1171,7 @@
EPIterOrig ep_iter_sorted,
const GlobalToLocal& global_to_local,
BOOST_DIR_CSR_GRAPH_TYPE& g) {
- g.add_edges_sorted_internal_global(first_sorted, last_sorted, ep_iter_sorted,
+ g.add_edges_sorted_internal_global(first_sorted, last_sorted, ep_iter_sorted,
global_to_local);
}
@@ -1180,7 +1191,7 @@
template <BOOST_DIR_CSR_GRAPH_TEMPLATE_PARMS, typename InputIterator,
typename GlobalToLocal>
inline void
- add_edges_global(InputIterator first, InputIterator last,
+ add_edges_global(InputIterator first, InputIterator last,
const GlobalToLocal& global_to_local, BOOST_DIR_CSR_GRAPH_TYPE& g) {
g.add_edges_internal(first, last, global_to_local);
}
@@ -1303,7 +1314,7 @@
// Extra, common functions
template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
inline typename graph_traits<BOOST_CSR_GRAPH_TYPE>::vertex_descriptor
-vertex(typename graph_traits<BOOST_CSR_GRAPH_TYPE>::vertex_descriptor i,
+vertex(typename graph_traits<BOOST_CSR_GRAPH_TYPE>::vertex_descriptor i,
const BOOST_CSR_GRAPH_TYPE&)
{
return i;
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 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -17,7 +17,7 @@
#include <boost/detail/workaround.hpp>
#include <boost/operators.hpp>
#include <boost/property_map/property_map.hpp>
-#include <boost/pending/integer_range.hpp>
+#include <boost/range/irange.hpp>
#include <boost/graph/graph_traits.hpp>
#include <memory>
#include <algorithm>
@@ -993,10 +993,19 @@
typename Config::OutEdgeList& el = g.out_edge_list(u);
typename Config::OutEdgeList::iterator
ei = el.begin(), ei_end = el.end();
- for (; ei != ei_end; ++ei) {
- detail::erase_from_incidence_list
- (g.out_edge_list((*ei).get_target()), u, Cat());
- g.m_edges.erase((*ei).get_iter());
+ for (; ei != ei_end; /* Increment below */ ) {
+ bool is_self_loop = (*ei).get_target() == u;
+ // Don't erase from our own incidence list in the case of a self-loop
+ // since we're clearing it anyway.
+ if (!is_self_loop) {
+ detail::erase_from_incidence_list
+ (g.out_edge_list((*ei).get_target()), u, Cat());
+ typename Config::OutEdgeList::iterator ei_copy = ei;
+ ++ei;
+ if (!is_self_loop) g.m_edges.erase((*ei_copy).get_iter());
+ } else {
+ ++ei;
+ }
}
g.out_edge_list(u).clear();
}
@@ -1505,51 +1514,6 @@
typedef typename Config::global_edgelist_selector
global_edgelist_selector;
-
- // protected:
-
- // The edge_dispatch() functions should be static, but
- // Borland gets confused about constness.
-
- // O(E/V)
- inline std::pair<edge_descriptor,bool>
- edge_dispatch(const AdjList& g,
- vertex_descriptor u, vertex_descriptor v,
- boost::allow_parallel_edge_tag) const
- {
- bool found;
- const typename Config::OutEdgeList& el = g.out_edge_list(u);
- typename Config::OutEdgeList::const_iterator
- i = std::find_if(el.begin(), el.end(),
- detail::target_is<vertex_descriptor>(v));
- found = (i != g.out_edge_list(u).end());
- if (found)
- return std::make_pair(edge_descriptor(u, v, &(*i).get_property()),
- true);
- else
- return std::make_pair(edge_descriptor(u, v, 0), false);
- }
- // O(log(E/V))
- inline std::pair<edge_descriptor,bool>
- edge_dispatch(const AdjList& g,
- vertex_descriptor u, vertex_descriptor v,
- boost::disallow_parallel_edge_tag) const
- {
- bool found;
- /* According to the standard, this should be iterator, not const_iterator,
- but the VC++ std::set::find() const returns const_iterator.
- And since iterator should be convertible to const_iterator, the
- following should work everywhere. -Jeremy */
- typename Config::OutEdgeList::const_iterator
- i = g.out_edge_list(u).find(StoredEdge(v)),
- end = g.out_edge_list(u).end();
- found = (i != end);
- if (found)
- return std::make_pair(edge_descriptor(u, v, &(*i).get_property()),
- true);
- else
- return std::make_pair(edge_descriptor(u, v, 0), false);
- }
};
template <class Config, class Base>
@@ -1630,9 +1594,16 @@
const adj_list_helper<Config, Base>& g_)
{
typedef typename Config::graph_type Graph;
- typedef typename Config::edge_parallel_category Cat;
- const Graph& g = static_cast<const Graph&>(g_);
- return g_.edge_dispatch(g, u, v, Cat());
+ typedef typename Config::StoredEdge StoredEdge;
+ const Graph& cg = static_cast<const Graph&>(g_);
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ const typename Config::OutEdgeList& el = cg.out_edge_list(u);
+ typename Config::OutEdgeList::const_iterator it = graph_detail::
+ find(el, StoredEdge(v));
+ return std::make_pair(
+ typename Config::edge_descriptor
+ (u, v, (it == el.end() ? 0 : &(*it).get_property())),
+ (it != el.end()));
}
template <class Config, class Base>
Modified: branches/release/boost/graph/directed_graph.hpp
==============================================================================
--- branches/release/boost/graph/directed_graph.hpp (original)
+++ branches/release/boost/graph/directed_graph.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -33,9 +33,13 @@
class directed_graph
{
public:
- typedef typename graph_detail::vertex_prop<VertexProp>::type vertex_property_type;
+ typedef typename graph_detail::graph_prop<GraphProp>::property graph_property_type;
+ typedef typename graph_detail::graph_prop<GraphProp>::bundle graph_bundled;
+
+ typedef typename graph_detail::vertex_prop<VertexProp>::property vertex_property_type;
typedef typename graph_detail::vertex_prop<VertexProp>::bundle vertex_bundled;
- typedef typename graph_detail::edge_prop<EdgeProp>::type edge_property_type;
+
+ typedef typename graph_detail::edge_prop<EdgeProp>::property edge_property_type;
typedef typename graph_detail::edge_prop<EdgeProp>::bundle edge_bundled;
private:
@@ -58,9 +62,6 @@
typedef typename graph_type::directed_selector directed_selector;
public:
- typedef directed_graph_tag graph_tag;
- typedef typename graph_type::graph_property_type graph_property_type;
-
// more commonly used graph types
typedef typename graph_type::stored_vertex stored_vertex;
typedef typename graph_type::vertices_size_type vertices_size_type;
@@ -77,6 +78,7 @@
typedef typename graph_type::adjacency_iterator adjacency_iterator;
// miscellaneous types
+ typedef directed_graph_tag graph_tag;
typedef typename graph_type::directed_category directed_category;
typedef typename graph_type::edge_parallel_category edge_parallel_category;
typedef typename graph_type::traversal_category traversal_category;
@@ -283,6 +285,12 @@
edge_bundled const& operator[](edge_descriptor e) const
{ return m_graph[e]; }
+
+ graph_bundled& operator[](graph_bundle_t)
+ { return get_property(*this); }
+
+ graph_bundled const& operator[](graph_bundle_t) const
+ { return get_property(*this); }
#endif
// Graph concepts
@@ -345,14 +353,12 @@
// IncidenceGraph concepts
template <DIRECTED_GRAPH_PARAMS>
inline typename DIRECTED_GRAPH::vertex_descriptor
-source(typename DIRECTED_GRAPH::edge_descriptor e,
- DIRECTED_GRAPH const& g)
+source(typename DIRECTED_GRAPH::edge_descriptor e, DIRECTED_GRAPH const& g)
{ return source(e, g.impl()); }
template <DIRECTED_GRAPH_PARAMS>
inline typename DIRECTED_GRAPH::vertex_descriptor
-target(typename DIRECTED_GRAPH::edge_descriptor e,
- DIRECTED_GRAPH const& g)
+target(typename DIRECTED_GRAPH::edge_descriptor e, DIRECTED_GRAPH const& g)
{ return target(e, g.impl()); }
template <DIRECTED_GRAPH_PARAMS>
Modified: branches/release/boost/graph/distributed/adjacency_list.hpp
==============================================================================
--- branches/release/boost/graph/distributed/adjacency_list.hpp (original)
+++ branches/release/boost/graph/distributed/adjacency_list.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -1371,6 +1371,7 @@
typedef typename inherited::graph_property_type graph_property_type;
typedef typename inherited::vertex_bundled vertex_bundled;
typedef typename inherited::edge_bundled edge_bundled;
+ typedef typename inherited::graph_bundled graph_bundled;
typedef typename container_gen<edge_list_selector, edge_descriptor>::type
local_edge_list_type;
@@ -1713,6 +1714,12 @@
return base()[e.local];
}
+ graph_bundled& operator[](graph_bundle_t)
+ { return get_property(*this); }
+
+ graph_bundled const& operator[](graph_bundle_t) const
+ { return get_property(*this); }
+
template<typename OStreamConstructibleArchive>
void save(std::string const& filename) const;
Modified: branches/release/boost/graph/distributed/compressed_sparse_row_graph.hpp
==============================================================================
--- branches/release/boost/graph/distributed/compressed_sparse_row_graph.hpp (original)
+++ branches/release/boost/graph/distributed/compressed_sparse_row_graph.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -129,14 +129,20 @@
// -----------------------------------------------------------------
// Workarounds
+ // NOTE: This graph type does not have old-style graph properties. It only
+ // accepts bundles.
typedef no_property vertex_property_type;
typedef no_property edge_property_type;
+ typedef no_property graph_property_type;
typedef typename mpl::if_<is_void<VertexProperty>,
void****,
VertexProperty>::type vertex_bundled;
typedef typename mpl::if_<is_void<EdgeProperty>,
void****,
EdgeProperty>::type edge_bundled;
+ typedef typename mpl::if_<is_void<GraphProperty>,
+ void****,
+ GraphProperty>::type graph_bundled;
// -----------------------------------------------------------------
// Useful types
Modified: branches/release/boost/graph/edge_list.hpp
==============================================================================
--- branches/release/boost/graph/edge_list.hpp (original)
+++ branches/release/boost/graph/edge_list.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -15,7 +15,7 @@
#include <boost/config.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/bool.hpp>
-#include <boost/pending/integer_range.hpp>
+#include <boost/range/irange.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/properties.hpp>
@@ -37,7 +37,7 @@
// If the iterators are random access, then Graph::edge_descriptor
// is of Integral type, otherwise it is a struct, though it is
// convertible to an Integral type.
- //
+ //
struct edge_list_tag { };
@@ -129,7 +129,7 @@
typedef type const_type;
};
};
- template <>
+ template <>
struct edge_property_selector<edge_list_tag> {
typedef edge_list_edge_property_selector type;
};
@@ -137,7 +137,7 @@
template <class G, class EI, class T, class D>
typename property_map< edge_list_impl<G,EI,T,D>, edge_index_t>::type
get(edge_index_t, const edge_list_impl<G,EI,T,D>&) {
- typedef typename property_map< edge_list_impl<G,EI,T,D>,
+ typedef typename property_map< edge_list_impl<G,EI,T,D>,
edge_index_t>::type EdgeIndexMap;
return EdgeIndexMap();
}
@@ -180,7 +180,7 @@
const G& g = static_cast<const G&>(g_);
typedef typename edge_list_impl_ra<G,EI,T,D>::edge_iterator edge_iterator;
return std::make_pair(edge_iterator(0), edge_iterator(g._last - g._first));
- }
+ }
template <class G, class EI, class T, class D>
typename edge_list_impl_ra<G,EI,T,D>::vertex_descriptor
source(typename edge_list_impl_ra<G,EI,T,D>::edge_descriptor e,
@@ -217,22 +217,22 @@
typedef type const_type;
};
};
- template <>
+ template <>
struct edge_property_selector<edge_list_ra_tag> {
typedef edge_list_ra_edge_property_selector type;
};
template <class G, class EI, class T, class D>
- inline
+ inline
typename property_map< edge_list_impl_ra<G,EI,T,D>, edge_index_t>::type
get(edge_index_t, const edge_list_impl_ra<G,EI,T,D>&) {
- typedef typename property_map< edge_list_impl_ra<G,EI,T,D>,
+ typedef typename property_map< edge_list_impl_ra<G,EI,T,D>,
edge_index_t>::type EdgeIndexMap;
return EdgeIndexMap();
}
template <class G, class EI, class T, class D>
inline D
- get(edge_index_t, const edge_list_impl_ra<G,EI,T,D>&,
+ get(edge_index_t, const edge_list_impl_ra<G,EI,T,D>&,
typename edge_list_impl_ra<G,EI,T,D>::edge_descriptor e) {
return e;
}
@@ -241,31 +241,31 @@
// Some helper classes for determining if the iterators are random access
template <class Cat>
struct is_random {
- enum { RET = false };
- typedef mpl::false_ type;
+ enum { RET = false };
+ typedef mpl::false_ type;
};
template <>
- struct is_random<std::random_access_iterator_tag> {
- enum { RET = true }; typedef mpl::true_ type;
+ struct is_random<std::random_access_iterator_tag> {
+ enum { RET = true }; typedef mpl::true_ type;
};
// The edge_list class conditionally inherits from one of the
// above two classes.
- template <class EdgeIter,
+ template <class EdgeIter,
#if !defined BOOST_NO_STD_ITERATOR_TRAITS
class T = typename std::iterator_traits<EdgeIter>::value_type,
class D = typename std::iterator_traits<EdgeIter>::difference_type,
class Cat = typename std::iterator_traits<EdgeIter>::iterator_category>
#else
class T,
- class D,
+ class D,
class Cat>
#endif
class edge_list
: public mpl::if_< typename is_random<Cat>::type,
edge_list_impl_ra< edge_list<EdgeIter,T,D,Cat>, EdgeIter,T,D>,
- edge_list_impl< edge_list<EdgeIter,T,D,Cat>, EdgeIter,T,D>
+ edge_list_impl< edge_list<EdgeIter,T,D,Cat>, EdgeIter,T,D>
>::type
{
public:
@@ -275,12 +275,12 @@
typedef std::size_t edges_size_type;
typedef std::size_t vertices_size_type;
typedef std::size_t degree_size_type;
- edge_list(EdgeIter first, EdgeIter last) : _first(first), _last(last) {
+ edge_list(EdgeIter first, EdgeIter last) : _first(first), _last(last) {
m_num_edges = std::distance(first, last);
}
edge_list(EdgeIter first, EdgeIter last, edges_size_type E)
- : _first(first), _last(last), m_num_edges(E) { }
-
+ : _first(first), _last(last), m_num_edges(E) { }
+
EdgeIter _first, _last;
edges_size_type m_num_edges;
};
@@ -298,7 +298,7 @@
return edge_list<EdgeIter>(first, last);
}
#endif
-
+
} /* namespace boost */
#endif /* BOOST_GRAPH_EDGE_LIST_HPP */
Modified: branches/release/boost/graph/graph_traits.hpp
==============================================================================
--- branches/release/boost/graph/graph_traits.hpp (original)
+++ branches/release/boost/graph/graph_traits.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -218,30 +218,36 @@
typedef boost::forward_traversal_tag multi_pass_input_iterator_tag;
template <typename G>
- struct edge_property_type {
- typedef typename G::edge_property_type type;
+ struct graph_property_type {
+ typedef typename G::graph_property_type type;
};
template <typename G>
- struct vertex_property_type {
- typedef typename G::vertex_property_type type;
+ struct edge_property_type {
+ typedef typename G::edge_property_type type;
};
template <typename G>
- struct graph_property_type {
- typedef typename G::graph_property_type type;
+ struct vertex_property_type {
+ typedef typename G::vertex_property_type type;
};
struct no_bundle { };
+ struct no_graph_bundle : no_bundle { };
struct no_vertex_bundle : no_bundle { };
struct no_edge_bundle : no_bundle { };
template<typename G>
+ struct graph_bundle_type {
+ typedef typename G::graph_bundled type;
+ };
+
+ template<typename G>
struct vertex_bundle_type {
- typedef typename G::vertex_bundled type;
+ typedef typename G::vertex_bundled type;
};
template<typename G>
struct edge_bundle_type {
- typedef typename G::edge_bundled type;
+ typedef typename G::edge_bundled type;
};
namespace graph { namespace detail {
@@ -258,12 +264,11 @@
} } // 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>
- { };
+ // 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
@@ -272,24 +277,43 @@
* edges.
*/
//@{
- template <typename Graph>
- struct has_vertex_property
- : mpl::not_<
- typename detail::is_no_property<typename vertex_property_type<Graph>::type>
+ template<typename Graph>
+ struct has_graph_property
+ : mpl::not_<
+ typename detail::is_no_property<
+ typename graph_property_type<Graph>::type
>::type
+ >::type
+ { };
+
+ template<typename Graph>
+ struct has_bundled_graph_property
+ : mpl::not_<
+ graph_detail::is_no_bundle<typename graph_bundle_type<Graph>::type>
+ >
{ };
+
template <typename Graph>
- struct has_edge_property
+ struct has_vertex_property
: mpl::not_<
- typename detail::is_no_property<typename edge_property_type<Graph>::type>
+ typename detail::is_no_property<typename vertex_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_edge_property
+ : mpl::not_<
+ typename detail::is_no_property<typename edge_property_type<Graph>::type>
+ >::type
+ { };
+
template <typename Graph>
struct has_bundled_edge_property
: mpl::not_<
Modified: branches/release/boost/graph/labeled_graph.hpp
==============================================================================
--- branches/release/boost/graph/labeled_graph.hpp (original)
+++ branches/release/boost/graph/labeled_graph.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -278,10 +278,13 @@
typedef typename graph_traits<graph_type>::edge_iterator edge_iterator;
typedef typename graph_traits<graph_type>::edges_size_type edges_size_type;
- typedef typename graph_type::vertex_property_type vertex_property_type;
- typedef typename graph_type::edge_property_type edge_property_type;
typedef typename graph_type::graph_property_type graph_property_type;
+ typedef typename graph_type::graph_bundled graph_bundled;
+
+ typedef typename graph_type::vertex_property_type vertex_property_type;
typedef typename graph_type::vertex_bundled vertex_bundled;
+
+ typedef typename graph_type::edge_property_type edge_property_type;
typedef typename graph_type::edge_bundled edge_bundled;
typedef typename Base::label_type label_type;
Modified: branches/release/boost/graph/properties.hpp
==============================================================================
--- branches/release/boost/graph/properties.hpp (original)
+++ branches/release/boost/graph/properties.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -126,6 +126,7 @@
BOOST_DEF_PROPERTY(graph, visitor);
// These tags are used for property bundles
+ BOOST_DEF_PROPERTY(graph, bundle);
BOOST_DEF_PROPERTY(vertex, bundle);
BOOST_DEF_PROPERTY(edge, bundle);
@@ -199,6 +200,7 @@
};
template <class Graph, class PropertyTag>
class vertex_property_map {
+ public:
typedef typename vertex_property_type<Graph>::type Property;
typedef typename graph_tag_or_void<Graph>::type graph_tag;
typedef typename vertex_property_selector<graph_tag>::type Selector;
@@ -242,7 +244,7 @@
template <class Graph, class Property>
struct property_map {
- private:
+ // private:
typedef typename property_kind<Property>::type Kind;
typedef typename detail::property_map_kind_selector<Kind>::type Selector;
typedef typename Selector::template bind_<Graph, Property> Bind;
@@ -263,8 +265,9 @@
template <class Graph, class Property>
class graph_property {
public:
- typedef typename property_value<typename Graph::graph_property_type,
- Property>::type type;
+ typedef typename property_value<
+ typename Graph::graph_property_type, Property
+ >::type type;
};
template <class Graph>
@@ -432,44 +435,71 @@
// These metafunctions help implement the process of determining the vertex
// and edge properties of a graph.
namespace graph_detail {
- template <typename Retag>
+ template<typename Retag>
struct retagged_property {
typedef typename Retag::type type;
};
- template <typename Retag, typename With, typename Without>
+ // Search the normalized PropList (as returned by retagged<>::type) for
+ // the given bundle. Return the type error if no such bundle can be found.
+ template <typename PropList, typename Bundle>
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;
+ typedef typename property_value<PropList, Bundle>::type Value;
+ typedef typename mpl::if_<
+ is_same<Value, detail::error_property_not_found>, no_bundle, Value
+ >::type type;
};
- template <typename Prop>
- struct edge_prop {
-// private:
- typedef detail::retag_property_list<edge_bundle_t, Prop> Retag;
+ template<typename Prop, typename Bundle>
+ class normal_property {
+ // Normalize the property into a property list.
+ typedef detail::retag_property_list<Bundle, Prop> List;
public:
- typedef typename Retag::retagged retagged;
- typedef typename retagged_property<Retag>::type type;
- typedef typename retagged_bundle<
- Retag, Prop, no_edge_bundle
- >::type bundle;
- };
+ // Extract the normalized property and bundle types.
+ typedef typename retagged_property<List>::type property;
+ typedef typename retagged_bundle<property, Bundle>::type bundle;
+ };
+
+ template<typename Prop>
+ struct graph_prop : normal_property<Prop, graph_bundle_t>
+ { };
+
+ template<typename Prop>
+ struct vertex_prop : normal_property<Prop, vertex_bundle_t>
+ { };
+
+ template<typename Prop>
+ struct edge_prop : normal_property<Prop, edge_bundle_t>
+ { };
} // namespace graph_detail
+// NOTE: These functions are declared, but never defined since they need to
+// be overloaded by graph implementations. However, we need them to be
+// declared for the functions below.
+template<typename Graph, typename Tag>
+typename graph_property<Graph, graph_bundle_t>::type&
+get_property(Graph& g, Tag);
+
+template<typename Graph, typename Tag>
+typename graph_property<Graph, graph_bundle_t>::type const&
+get_property(Graph const& g, Tag);
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+// NOTE: This operation is a simple adaptor over the overloaded get_property
+// operations.
+template<typename Graph>
+inline typename graph_property<Graph, graph_bundle_t>::type&
+get_property(Graph& g) {
+ return get_property(g, graph_bundle);
+}
+
+template<typename Graph>
+inline typename graph_property<Graph, graph_bundle_t>::type const&
+get_property(Graph const& g) {
+ return get_property(g, graph_bundle);
+}
+#endif
+
} // namespace boost
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Modified: branches/release/boost/graph/reverse_graph.hpp
==============================================================================
--- branches/release/boost/graph/reverse_graph.hpp (original)
+++ branches/release/boost/graph/reverse_graph.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -79,19 +79,33 @@
typedef reverse_graph_tag graph_tag;
+ // Graph, vertex, and edge properties
+ typedef typename graph_property_type<base_type>::type graph_property_type;
+ typedef typename graph_bundle_type<base_type>::type graph_bundled;
+
+ typedef typename vertex_property_type<base_type>::type vertex_property_type;
+ typedef typename vertex_bundle_type<base_type>::type vertex_bundled;
+
+ typedef typename edge_property_type<base_type>::type edge_property_type;
+ typedef typename edge_bundle_type<base_type>::type edge_bundled;
+
#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
// Bundled properties support
template<typename Descriptor>
- typename graph::detail::bundled_result<BidirectionalGraph,
- Descriptor>::type&
+ typename graph::detail::bundled_result<BidirectionalGraph, Descriptor>::type&
operator[](Descriptor x)
{ return m_g[x]; }
template<typename Descriptor>
- typename graph::detail::bundled_result<BidirectionalGraph,
- Descriptor>::type const&
+ typename graph::detail::bundled_result<BidirectionalGraph, Descriptor>::type const&
operator[](Descriptor x) const
{ return m_g[x]; }
+
+ graph_bundled& operator[](graph_bundle_t)
+ { return get_property(*this); }
+
+ graph_bundled const& operator[](graph_bundle_t) const
+ { return get_property(*this); }
#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
static vertex_descriptor null_vertex()
@@ -116,11 +130,11 @@
#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
template<typename Graph, typename GraphRef>
- struct vertex_bundle_type<reverse_graph<Graph, GraphRef> >
+ struct vertex_bundle_type<reverse_graph<Graph, GraphRef> >
: vertex_bundle_type<Graph> { };
template<typename Graph, typename GraphRef>
- struct edge_bundle_type<reverse_graph<Graph, GraphRef> >
+ struct edge_bundle_type<reverse_graph<Graph, GraphRef> >
: edge_bundle_type<Graph> { };
#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
@@ -194,7 +208,7 @@
}
template <class BidirectionalGraph, class GRef>
-inline std::pair<typename graph_traits<BidirectionalGraph>::edge_descriptor,
+inline std::pair<typename graph_traits<BidirectionalGraph>::edge_descriptor,
bool>
edge(const typename graph_traits<BidirectionalGraph>::vertex_descriptor u,
const typename graph_traits<BidirectionalGraph>::vertex_descriptor v,
@@ -318,7 +332,7 @@
template<typename BidirectionalGraph, typename GRef, typename Tag,
typename Value>
inline void
-set_property(const reverse_graph<BidirectionalGraph,GRef>& g, Tag tag,
+set_property(const reverse_graph<BidirectionalGraph,GRef>& g, Tag tag,
const Value& value)
{
set_property(g.m_g, tag, value);
Modified: branches/release/boost/graph/undirected_graph.hpp
==============================================================================
--- branches/release/boost/graph/undirected_graph.hpp (original)
+++ branches/release/boost/graph/undirected_graph.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -33,17 +33,22 @@
*/
template <
typename VertexProp = no_property,
- typename EdgeProp= no_property,
+ typename EdgeProp = no_property,
typename GraphProp = no_property>
class undirected_graph
{
public:
- typedef typename graph_detail::vertex_prop<VertexProp>::type vertex_property_type;
+ typedef typename graph_detail::graph_prop<GraphProp>::property graph_property_type;
+ typedef typename graph_detail::graph_prop<GraphProp>::bundle graph_bundled;
+
+ typedef typename graph_detail::vertex_prop<VertexProp>::property vertex_property_type;
typedef typename graph_detail::vertex_prop<VertexProp>::bundle vertex_bundled;
- typedef typename graph_detail::edge_prop<EdgeProp>::type edge_property_type;
+
+ typedef typename graph_detail::edge_prop<EdgeProp>::property edge_property_type;
typedef typename graph_detail::edge_prop<EdgeProp>::bundle edge_bundled;
private:
+ // Embed indices into the vertex type.
typedef property<vertex_index_t, unsigned, vertex_property_type> vertex_property;
typedef property<edge_index_t, unsigned, edge_property_type> edge_property;
public:
@@ -62,9 +67,6 @@
typedef typename graph_type::directed_selector directed_selector;
public:
- typedef undirected_graph_tag graph_tag;
- typedef typename graph_type::graph_property_type graph_property_type;
-
// more commonly used graph types
typedef typename graph_type::stored_vertex stored_vertex;
typedef typename graph_type::vertices_size_type vertices_size_type;
@@ -81,6 +83,7 @@
typedef typename graph_type::adjacency_iterator adjacency_iterator;
// miscellaneous types
+ typedef undirected_graph_tag graph_tag;
typedef typename graph_type::directed_category directed_category;
typedef typename graph_type::edge_parallel_category edge_parallel_category;
typedef typename graph_type::traversal_category traversal_category;
@@ -276,6 +279,12 @@
edge_bundled const& operator[](edge_descriptor e) const
{ return m_graph[e]; }
+
+ graph_bundled& operator[](graph_bundle_t)
+ { return get_property(*this); }
+
+ graph_bundled const& operator[](graph_bundle_t) const
+ { return get_property(*this); }
#endif
// Graph concepts
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 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -19,8 +19,8 @@
#include <vector>
#include <cstddef>
#include <boost/iterator.hpp>
+#include <boost/range/irange.hpp>
#include <boost/graph/graph_traits.hpp>
-#include <boost/pending/integer_range.hpp>
#include <boost/property_map/property_map.hpp>
#include <boost/graph/properties.hpp>
#include <algorithm>
@@ -315,14 +315,14 @@
};
template<typename EdgeList, typename Allocator>
- identity_property_map
+ identity_property_map
get(vertex_index_t, const std::vector<EdgeList, Allocator>&)
{
return identity_property_map();
}
template<typename EdgeList, typename Allocator>
- identity_property_map
+ identity_property_map
get(vertex_index_t, std::vector<EdgeList, Allocator>&)
{
return identity_property_map();
Modified: branches/release/boost/pending/container_traits.hpp
==============================================================================
--- branches/release/boost/pending/container_traits.hpp (original)
+++ branches/release/boost/pending/container_traits.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -458,7 +458,67 @@
return push_dispatch(c, v, container_category(c));
}
+ // Find
+ template <class Container, class Value>
+ typename Container::iterator
+ find_dispatch(Container& c,
+ const Value& value,
+ container_tag)
+ {
+ return std::find(c.begin(), c.end(), value);
+ }
+
+ template <class AssociativeContainer, class Value>
+ typename AssociativeContainer::iterator
+ find_dispatch(AssociativeContainer& c,
+ const Value& value,
+ associative_container_tag)
+ {
+ return c.find(value);
+ }
+
+ template <class Container, class Value>
+ typename Container::iterator
+ find(Container& c,
+ const Value& value)
+ {
+ return find_dispatch(c, value,
+ graph_detail::container_category(c));
+ }
+
+ // Find (const versions)
+ template <class Container, class Value>
+ typename Container::const_iterator
+ find_dispatch(const Container& c,
+ const Value& value,
+ container_tag)
+ {
+ return std::find(c.begin(), c.end(), value);
+ }
+
+ template <class AssociativeContainer, class Value>
+ typename AssociativeContainer::const_iterator
+ find_dispatch(const AssociativeContainer& c,
+ const Value& value,
+ associative_container_tag)
+ {
+ return c.find(value);
+ }
+
+ template <class Container, class Value>
+ typename Container::const_iterator
+ find(const Container& c,
+ const Value& value)
+ {
+ return find_dispatch(c, value,
+ graph_detail::container_category(c));
+ }
+
// Equal range
+#if 0
+ // Make the dispatch fail if c is not an Associative Container (and thus
+ // doesn't have equal_range unless it is sorted, which we cannot check
+ // statically and is not typically true for BGL's uses of this function).
template <class Container,
class LessThanComparable>
std::pair<typename Container::iterator, typename Container::iterator>
@@ -469,21 +529,22 @@
// c must be sorted for std::equal_range to behave properly.
return std::equal_range(c.begin(), c.end(), value);
}
+#endif
- template <class AssociativeContainer, class LessThanComparable>
+ template <class AssociativeContainer, class Value>
std::pair<typename AssociativeContainer::iterator,
typename AssociativeContainer::iterator>
equal_range_dispatch(AssociativeContainer& c,
- const LessThanComparable& value,
+ const Value& value,
associative_container_tag)
{
return c.equal_range(value);
}
- template <class Container, class LessThanComparable>
+ template <class Container, class Value>
std::pair<typename Container::iterator, typename Container::iterator>
equal_range(Container& c,
- const LessThanComparable& value)
+ const Value& value)
{
return equal_range_dispatch(c, value,
graph_detail::container_category(c));
Modified: branches/release/boost/pending/property.hpp
==============================================================================
--- branches/release/boost/pending/property.hpp (original)
+++ branches/release/boost/pending/property.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -150,7 +150,7 @@
typedef FinalType retagged;
};
- // A final base case of the retag_propert_list, this will terminate a
+ // A final base case of the retag_property_list, this will terminate a
// properly structured list.
template<typename FinalTag>
struct retag_property_list<FinalTag, no_property>
Modified: branches/release/libs/graph/test/csr_graph_test.cpp
==============================================================================
--- branches/release/libs/graph/test/csr_graph_test.cpp (original)
+++ branches/release/libs/graph/test/csr_graph_test.cpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -39,12 +39,12 @@
typedef boost::adjacency_list<> GraphT;
typedef boost::erdos_renyi_iterator<boost::minstd_rand, GraphT> ERGen;
-struct VertexData
+struct VertexData
{
int index;
};
-struct EdgeData
+struct EdgeData
{
int index_e;
};
@@ -194,7 +194,7 @@
// Check constructing a graph from iterators
CSRGraphT g3(boost::edges_are_sorted,
- boost::make_transform_iterator(edges(g2).first,
+ boost::make_transform_iterator(edges(g2).first,
boost::detail::make_edge_to_index_pair(g2)),
boost::make_transform_iterator(edges(g2).second,
boost::detail::make_edge_to_index_pair(g2)),
Modified: branches/release/libs/graph/test/test_graph.hpp
==============================================================================
--- branches/release/libs/graph/test/test_graph.hpp (original)
+++ branches/release/libs/graph/test/test_graph.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -60,6 +60,12 @@
* generator to define property maps.
*/
//@{
+// This is really just a place holder to make sure that bundled graph
+// properties actually work. There are no semantics to this type.
+struct GraphBundle {
+ int value;
+};
+
struct VertexBundle {
VertexBundle() : value() { }
VertexBundle(int n) : value(n) { }
@@ -105,6 +111,7 @@
// Test constrution and vertex list.
build_graph(g, can_add_vertex, is_labeled);
build_property_graph(g, can_add_vertex, is_labeled);
+
test_vertex_list_graph(g);
// Collect the vertices for an easy method of "naming" them.
@@ -118,7 +125,7 @@
// Test connection and edge list
connect_graph(g, verts, is_labeled);
-// connect_property_graph(g, verts, is_labeld);
+ // connect_property_graph(g, verts, is_labeld);
test_edge_list_graph(g);
// Test properties
Modified: branches/release/libs/graph/test/test_graphs.cpp
==============================================================================
--- branches/release/libs/graph/test/test_graphs.cpp (original)
+++ branches/release/libs/graph/test/test_graphs.cpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -1,4 +1,4 @@
-// (C) Copyright 2009 Andrew Sutton
+// (C) Copyright 2009-2010 Andrew Sutton
//
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0 (See accompanying file
@@ -24,130 +24,147 @@
int main()
{
- // Bootstrap all of the tests by declaring a kind graph and asserting some
- // basic properties about it.
- {
- typedef undirected_graph<VertexBundle, EdgeBundle> Graph;
- BOOST_META_ASSERT(is_undirected_graph<Graph>);
- BOOST_META_ASSERT(is_multigraph<Graph>);
- BOOST_META_ASSERT(is_incidence_graph<Graph>);
- BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(has_vertex_property<Graph>);
- BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
- BOOST_META_ASSERT(has_edge_property<Graph>);
- BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
- BOOST_META_ASSERT(is_mutable_graph<Graph>);
- BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
- Graph g;
- test_graph(g);
- }
- {
- typedef directed_graph<VertexBundle, EdgeBundle> Graph;
- BOOST_META_ASSERT(is_directed_graph<Graph>);
- BOOST_META_ASSERT(is_multigraph<Graph>);
- BOOST_META_ASSERT(is_incidence_graph<Graph>);
- BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(has_vertex_property<Graph>);
- BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
- BOOST_META_ASSERT(has_edge_property<Graph>);
- BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
- BOOST_META_ASSERT(is_mutable_graph<Graph>);
- BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
- Graph g;
- test_graph(g);
- }
- {
- typedef adjacency_list<vecS, vecS, undirectedS, VertexBundle, EdgeBundle> Graph;
- BOOST_META_ASSERT(is_undirected_graph<Graph>);
- BOOST_META_ASSERT(is_multigraph<Graph>);
- BOOST_META_ASSERT(is_incidence_graph<Graph>);
- BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(has_vertex_property<Graph>);
- BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
- BOOST_META_ASSERT(has_edge_property<Graph>);
- BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
- BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
- Graph g;
- test_graph(g);
- }
- {
- typedef adjacency_list<vecS, vecS, directedS, VertexBundle, EdgeBundle> Graph;
- Graph g;
- BOOST_META_ASSERT(is_directed_graph<Graph>);
- BOOST_META_ASSERT(is_multigraph<Graph>);
- BOOST_META_ASSERT(is_incidence_graph<Graph>);
- BOOST_META_ASSERT(!is_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(is_directed_unidirectional_graph<Graph>);
- BOOST_META_ASSERT(has_vertex_property<Graph>);
- BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
- BOOST_META_ASSERT(has_edge_property<Graph>);
- BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
- BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
- test_graph(g);
- }
- {
- // Common bidi adjlist
- typedef adjacency_list<vecS, vecS, bidirectionalS, VertexBundle, EdgeBundle> Graph;
- BOOST_META_ASSERT(is_directed_graph<Graph>);
- BOOST_META_ASSERT(is_multigraph<Graph>);
- BOOST_META_ASSERT(is_incidence_graph<Graph>);
- BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(has_vertex_property<Graph>);
- BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
- BOOST_META_ASSERT(has_edge_property<Graph>);
- BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
- BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
- Graph g;
- test_graph(g);
- }
- {
- // Same as above, but testing VL==listS
- typedef adjacency_list<vecS, listS, bidirectionalS, VertexBundle, EdgeBundle> Graph;
- BOOST_META_ASSERT(is_directed_graph<Graph>);
- BOOST_META_ASSERT(is_multigraph<Graph>);
- BOOST_META_ASSERT(is_incidence_graph<Graph>);
- BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(has_vertex_property<Graph>);
- BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
- BOOST_META_ASSERT(has_edge_property<Graph>);
- BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
- BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
- Graph g;
- test_graph(g);
- }
- {
- // TODO: What other kinds of graphs do we have here...
- typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle> Graph;
- BOOST_META_ASSERT(is_directed_graph<Graph>);
- BOOST_META_ASSERT(!is_multigraph<Graph>);
- BOOST_META_ASSERT(has_vertex_property<Graph>);
- BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
- BOOST_META_ASSERT(has_edge_property<Graph>);
- BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
- BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
- BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
- Graph g(N);
- test_graph(g);
- }
- {
- typedef labeled_graph<directed_graph<>, unsigned> Graph;
- BOOST_META_ASSERT(is_directed_graph<Graph>);
- BOOST_META_ASSERT(is_multigraph<Graph>);
- BOOST_META_ASSERT(is_incidence_graph<Graph>);
- BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
- BOOST_META_ASSERT(is_labeled_mutable_property_graph<Graph>);
- BOOST_META_ASSERT(is_labeled_graph<Graph>);
- BOOST_META_ASSERT(!has_vertex_property<Graph>);
- BOOST_META_ASSERT(!has_bundled_vertex_property<Graph>);
- BOOST_META_ASSERT(!has_edge_property<Graph>);
- BOOST_META_ASSERT(!has_bundled_edge_property<Graph>);
- BOOST_META_ASSERT(is_labeled_mutable_graph<Graph>);
- Graph g;
- test_graph(g);
- }
+ // Bootstrap all of the tests by declaring a kind graph and asserting some
+ // basic properties about it.
+ {
+ typedef undirected_graph<VertexBundle, EdgeBundle, GraphBundle> Graph;
+ BOOST_META_ASSERT(is_undirected_graph<Graph>);
+ BOOST_META_ASSERT(is_multigraph<Graph>);
+ BOOST_META_ASSERT(is_incidence_graph<Graph>);
+ BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(has_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_edge_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+ BOOST_META_ASSERT(is_mutable_graph<Graph>);
+ BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
+ Graph g;
+ test_graph(g);
+ }
+ {
+ typedef directed_graph<VertexBundle, EdgeBundle, GraphBundle> Graph;
+ BOOST_META_ASSERT(is_directed_graph<Graph>);
+ BOOST_META_ASSERT(is_multigraph<Graph>);
+ BOOST_META_ASSERT(is_incidence_graph<Graph>);
+ BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(has_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_edge_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+ BOOST_META_ASSERT(is_mutable_graph<Graph>);
+ BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
+ Graph g;
+ test_graph(g);
+ }
+ {
+ typedef adjacency_list<vecS, vecS, undirectedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+ BOOST_META_ASSERT(is_undirected_graph<Graph>);
+ BOOST_META_ASSERT(is_multigraph<Graph>);
+ BOOST_META_ASSERT(is_incidence_graph<Graph>);
+ BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(has_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_edge_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+ BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
+ Graph g;
+ test_graph(g);
+ }
+ {
+ typedef adjacency_list<vecS, vecS, directedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+ Graph g;
+ BOOST_META_ASSERT(is_directed_graph<Graph>);
+ BOOST_META_ASSERT(is_multigraph<Graph>);
+ BOOST_META_ASSERT(is_incidence_graph<Graph>);
+ BOOST_META_ASSERT(!is_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(is_directed_unidirectional_graph<Graph>);
+ BOOST_META_ASSERT(has_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_edge_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+ BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
+ test_graph(g);
+ }
+ {
+ // Common bidi adjlist
+ typedef adjacency_list<vecS, vecS, bidirectionalS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+ BOOST_META_ASSERT(is_directed_graph<Graph>);
+ BOOST_META_ASSERT(is_multigraph<Graph>);
+ BOOST_META_ASSERT(is_incidence_graph<Graph>);
+ BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(has_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_edge_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+ BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
+ Graph g;
+ test_graph(g);
+ }
+ {
+ // Same as above, but testing VL==listS
+ typedef adjacency_list<vecS, listS, bidirectionalS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+ BOOST_META_ASSERT(is_directed_graph<Graph>);
+ BOOST_META_ASSERT(is_multigraph<Graph>);
+ BOOST_META_ASSERT(is_incidence_graph<Graph>);
+ BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(has_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_edge_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+ BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
+ Graph g;
+ test_graph(g);
+ }
+ {
+ typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+ BOOST_META_ASSERT(is_directed_graph<Graph>);
+ BOOST_META_ASSERT(!is_multigraph<Graph>);
+ BOOST_META_ASSERT(has_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_edge_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+ BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
+ BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
+ Graph g(N);
+ test_graph(g);
+ }
+ {
+ typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle> Graph;
+ BOOST_META_ASSERT(is_directed_graph<Graph>);
+ BOOST_META_ASSERT(!is_multigraph<Graph>);
+ BOOST_META_ASSERT(has_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+ BOOST_META_ASSERT(has_edge_property<Graph>);
+ BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+ BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
+ BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
+ Graph g(N);
+ test_graph(g);
+ }
+ /*
+ {
+ typedef labeled_graph<directed_graph<>, unsigned> Graph;
+ BOOST_META_ASSERT(is_directed_graph<Graph>);
+ BOOST_META_ASSERT(is_multigraph<Graph>);
+ BOOST_META_ASSERT(is_incidence_graph<Graph>);
+ BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+ BOOST_META_ASSERT(is_labeled_mutable_property_graph<Graph>);
+ BOOST_META_ASSERT(is_labeled_graph<Graph>);
+ BOOST_META_ASSERT(!has_vertex_property<Graph>);
+ BOOST_META_ASSERT(!has_bundled_vertex_property<Graph>);
+ BOOST_META_ASSERT(!has_edge_property<Graph>);
+ BOOST_META_ASSERT(!has_bundled_edge_property<Graph>);
+ BOOST_META_ASSERT(is_labeled_mutable_graph<Graph>);
+ Graph g;
+ test_graph(g);
+ }
+ */
+
+ // TODO: What other kinds of graphs do we have here...
+
}
Modified: branches/release/libs/graph/test/test_properties.hpp
==============================================================================
--- branches/release/libs/graph/test/test_properties.hpp (original)
+++ branches/release/libs/graph/test/test_properties.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -7,6 +7,30 @@
#ifndef TEST_PROPERTIES_HPP
#define TEST_PROPERTIES_HPP
+template<typename T> T const& as_const(T& x) { return x; }
+template<typename T> void ignore(T const&) { }
+
+template<typename Graph>
+void test_graph_bundle(Graph& g, boost::mpl::true_) {
+ using namespace boost;
+ std::cout << "...test_graph_bundle\n";
+
+ typedef typename graph_property_type<Graph>::type Property;
+ typedef typename graph_bundle_type<Graph>::type Bundle;
+
+ GraphBundle& b1 = g[graph_bundle];
+ GraphBundle& b2 = get_property(g);
+ ignore(b1); ignore(b2);
+
+ GraphBundle const& cb1 = as_const(g)[graph_bundle];
+ GraphBundle const& cb2 = get_property(g);
+ ignore(cb1); ignore(cb2);
+}
+
+template<typename Graph>
+void test_graph_bundle(Graph& g, boost::mpl::false_)
+{ }
+
/** @name Test Vertex Bundle
* Exercise the vertex bundle. Note that this is expected to be of type
* VertexBundle.
@@ -14,30 +38,28 @@
//@{
template <typename Graph, typename VertexSet>
void test_vertex_bundle(Graph& g, VertexSet const& verts, boost::mpl::true_) {
- using namespace boost;
- BOOST_CONCEPT_ASSERT((GraphConcept<Graph>));
- typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT((PropertyGraphConcept<Graph, Vertex, vertex_bundle_t>));
-
- std::cout << "...test_vertex_bundle\n";
+ using namespace boost;
+ BOOST_CONCEPT_ASSERT((GraphConcept<Graph>));
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ BOOST_CONCEPT_ASSERT((PropertyGraphConcept<Graph, Vertex, vertex_bundle_t>));
// Test bundling via the graph object on the lollipop vertex.
- Vertex v = verts[5];
- VertexBundle& b = g[v];
- b.value = 10;
- BOOST_ASSERT(g[v].value == 10);
-
- // Test bundling via the property map.
- typedef typename property_map<Graph, int VertexBundle::*>::type BundleMap;
- BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept<BundleMap, Vertex>));
- BundleMap map = get(&VertexBundle::value, g);
- put(map, v, 5);
- BOOST_ASSERT(get(map, v) == 5);
-
- typedef typename property_map<Graph, int VertexBundle::*>::const_type ConstBundleMap;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept<ConstBundleMap, Vertex>));
- ConstBundleMap cmap = get(&VertexBundle::value, (Graph const&)g);
- BOOST_ASSERT(get(cmap, v) == 5);
+ Vertex v = verts[5];
+ VertexBundle& b = g[v];
+ b.value = 10;
+ BOOST_ASSERT(g[v].value == 10);
+
+ // Test bundling via the property map.
+ typedef typename property_map<Graph, int VertexBundle::*>::type BundleMap;
+ BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept<BundleMap, Vertex>));
+ BundleMap map = get(&VertexBundle::value, g);
+ put(map, v, 5);
+ BOOST_ASSERT(get(map, v) == 5);
+
+ typedef typename property_map<Graph, int VertexBundle::*>::const_type ConstBundleMap;
+ BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept<ConstBundleMap, Vertex>));
+ ConstBundleMap cmap = get(&VertexBundle::value, (Graph const&)g);
+ BOOST_ASSERT(get(cmap, v) == 5);
}
template <typename Graph, typename VertexSet>
@@ -90,11 +112,15 @@
*/
template <typename Graph, typename VertexSet>
void test_properties(Graph& g, VertexSet const& verts) {
- typename boost::has_bundled_vertex_property<Graph>::type vertex_bundled;
- typename boost::has_bundled_edge_property<Graph>::type edge_bundled;
+ using namespace boost;
- test_vertex_bundle(g, verts, vertex_bundled);
- test_edge_bundle(g, verts, edge_bundled);
+ typename has_bundled_graph_property<Graph>::type graph_bundled;
+ typename has_bundled_vertex_property<Graph>::type vertex_bundled;
+ typename has_bundled_edge_property<Graph>::type edge_bundled;
+
+ test_graph_bundle(g, graph_bundled);
+ test_vertex_bundle(g, verts, vertex_bundled);
+ test_edge_bundle(g, verts, edge_bundled);
}
//@}
Modified: branches/release/libs/graph/test/typestr.hpp
==============================================================================
--- branches/release/libs/graph/test/typestr.hpp (original)
+++ branches/release/libs/graph/test/typestr.hpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -15,6 +15,8 @@
#include <cxxabi.h>
#endif
+template<typename T> struct type_name { };
+
/**
* Return a string that describes the type of the given template parameter.
* The type name depends on the results of the typeid operator.
@@ -22,16 +24,15 @@
* @todo Rewrite this so that demangle will dynamically allocate the memory.
*/
template <typename T>
-std::string typestr()
-{
+std::string typestr() {
#if defined(__GNUC__)
std::size_t const BUFSIZE = 8192;
std::size_t n = BUFSIZE;
char buf[BUFSIZE];
- abi::__cxa_demangle(typeid(T).name(), buf, &n, 0);
+ abi::__cxa_demangle(typeid(type_name<T>).name(), buf, &n, 0);
return std::string(buf, ::strlen(buf));
#else
- return typeid(T).name();
+ return typeid(type_name<T>).name();
#endif
}
Modified: branches/release/libs/graph_parallel/test/process_group_serialization.cpp
==============================================================================
--- branches/release/libs/graph_parallel/test/process_group_serialization.cpp (original)
+++ branches/release/libs/graph_parallel/test/process_group_serialization.cpp 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -7,6 +7,10 @@
// Authors: Douglas Gregor
// Andrew Lumsdaine
+// FIXME: Including because of a missing header in the serialization library.
+// Patch sent to list...
+#include <cassert>
+
#include <boost/graph/use_mpi.hpp>
#include <boost/config.hpp>
#include <boost/throw_exception.hpp>
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk