|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r74333 - in sandbox/graph-intrusive_layout: . boost boost/detail boost/detail/metafunction boost/graph boost/graph/detail boost/graph/keywords libs libs/graph libs/graph/doc libs/graph/doc/images libs/graph/example
From: sponage_at_[hidden]
Date: 2011-09-10 10:10:19
Author: expaler
Date: 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
New Revision: 74333
URL: http://svn.boost.org/trac/boost/changeset/74333
Log:
Added Boost.Graph.IntrusiveLayout candidate sublibrary
Added:
sandbox/graph-intrusive_layout/
sandbox/graph-intrusive_layout/boost/
sandbox/graph-intrusive_layout/boost.png (contents, props changed)
sandbox/graph-intrusive_layout/boost/detail/
sandbox/graph-intrusive_layout/boost/detail/index_predicate.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/detail/make_value_factory.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/detail/metafunction/
sandbox/graph-intrusive_layout/boost/detail/metafunction/data_type.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/
sandbox/graph-intrusive_layout/boost/graph/basic_add_edge_function.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/basic_vert_insert_iterator.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/detail/
sandbox/graph-intrusive_layout/boost/graph/detail/default_origin.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/detail/default_scale.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/detail/intrusive_layout_params.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/
sandbox/graph-intrusive_layout/boost/graph/keywords/dimension_count.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/dimensions.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/edge_function.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/has_square_origin.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/inscribed_radius.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/is_zeta.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/origin.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/point_factory.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/position_index_map.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/position_map.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/scale.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/vertex_centroid_distance.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/vertex_iterator.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/keywords/wraparound_policy.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/set_bitset_grid_layout.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/set_bt_cubic_hcomb_layout.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/set_orthogonal_grid_layout.hpp (contents, props changed)
sandbox/graph-intrusive_layout/boost/graph/set_upsilon_tessel_layout.hpp (contents, props changed)
sandbox/graph-intrusive_layout/libs/
sandbox/graph-intrusive_layout/libs/graph/
sandbox/graph-intrusive_layout/libs/graph/doc/
sandbox/graph-intrusive_layout/libs/graph/doc/Jamroot (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/basic_add_edge_function.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/basic_add_edge_function.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/basic_vert_insert_iterator.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/basic_vert_insert_iterator.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/boostbook.css (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/count_bitset_grid_verts.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/count_bitset_grid_verts.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/count_bt_cubic_hcomb_verts.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/count_bt_cubic_hcomb_verts.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/count_ortho_grid_verts.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/count_ortho_grid_verts.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/count_upsilon_tessel_verts.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/count_upsilon_tessel_verts.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/
sandbox/graph-intrusive_layout/libs/graph/doc/images/alert.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/blank.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/caution.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/draft.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/home.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/important.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/next.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/next_disabled.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/note.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/prev.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/prev_disabled.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/smiley.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/tip.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/toc-blank.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/toc-minus.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/toc-plus.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/up.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/up_disabled.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/images/warning.png (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/intrusive_layout.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/set_bitset_grid_layout.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/set_bitset_grid_layout.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/set_bt_cubic_hcomb_layout.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/set_bt_cubic_hcomb_layout.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/set_orthogonal_grid_layout.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/set_orthogonal_grid_layout.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/set_upsilon_tessel_layout.html (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/doc/set_upsilon_tessel_layout.qbk (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/example/
sandbox/graph-intrusive_layout/libs/graph/example/bitruncated_cubic_honeycomb.cpp (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/example/bitset_grid_layouts.cpp (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/example/orthogonal_grid_layouts.cpp (contents, props changed)
sandbox/graph-intrusive_layout/libs/graph/example/upsilon_tessellation_layout.cpp (contents, props changed)
Added: sandbox/graph-intrusive_layout/boost.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/boost/detail/index_predicate.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/detail/index_predicate.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,23 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_INDEX_PREDICATE_HPP_INCLUDED
+#define BOOST_DETAIL_INDEX_PREDICATE_HPP_INCLUDED
+
+namespace boost { namespace detail {
+
+ template <bool ReturnValue>
+ struct index_predicate
+ {
+ template <typename T>
+ inline bool operator[](T const&) const
+ {
+ return ReturnValue;
+ }
+ };
+}} // namespace boost::detail
+
+#endif // BOOST_DETAIL_INDEX_PREDICATE_HPP_INCLUDED
+
Added: sandbox/graph-intrusive_layout/boost/detail/make_value_factory.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/detail/make_value_factory.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,21 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_MAKE_VALUE_FACTORY_HPP
+#define BOOST_DETAIL_MAKE_VALUE_FACTORY_HPP
+
+#include <boost/functional/value_factory.hpp>
+
+namespace boost { namespace detail {
+
+ template <typename T>
+ inline value_factory<T> make_value_factory(T const&)
+ {
+ return value_factory<T>();
+ }
+}} // namespace boost::detail
+
+#endif // BOOST_DETAIL_MAKE_VALUE_FACTORY_HPP
+
Added: sandbox/graph-intrusive_layout/boost/detail/metafunction/data_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/detail/metafunction/data_type.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,52 @@
+// Copyright (C) 2007-2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_DATA_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_DATA_TYPE_HPP_INCLUDED
+
+#include <boost/ref.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_all_extents.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace detail {
+
+ template <typename T>
+ struct data_type
+ {
+ private:
+ typedef typename ::boost::remove_const<
+ typename ::boost::remove_reference<
+ typename ::boost::remove_pointer<
+ typename ::boost::remove_volatile<
+ typename ::boost::remove_all_extents<
+ typename ::boost::unwrap_reference<T>::type
+ >::type
+ >::type
+ >::type
+ >::type
+ >::type
+ lower_type;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ ::boost::is_same<T,lower_type>
+ , ::boost::mpl::identity<T>
+ , data_type<lower_type>
+ >::type
+ type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,data_type,(T))
+ };
+}} // namespace boost::detail
+
+#endif // BOOST_DETAIL_METAFUNCTION_DATA_TYPE_HPP_INCLUDED
+
Added: sandbox/graph-intrusive_layout/boost/graph/basic_add_edge_function.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/basic_add_edge_function.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,97 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_BASIC_ADD_EDGE_FUNCTION_HPP
+#define BOOST_GRAPH_BASIC_ADD_EDGE_FUNCTION_HPP
+
+#include <boost/tr1/type_traits.hpp>
+#include <boost/graph/graph_traits.hpp>
+
+//[reference__basic_add_edge_function__definition
+namespace boost {
+
+ template <typename Graph, bool Is2Way>
+ class basic_add_edge_function
+ {
+ //<-
+ Graph& _graph;
+ //->
+
+ public:
+ explicit basic_add_edge_function(Graph& graph);
+
+ void
+ operator()(
+ typename graph_traits<Graph>::vertex_descriptor u
+ , typename graph_traits<Graph>::vertex_descriptor v
+ );
+ };
+
+ //<-
+ template <typename Graph, bool Is2Way>
+ basic_add_edge_function<Graph,Is2Way>::basic_add_edge_function(
+ Graph& graph
+ ) : _graph(graph)
+ {
+ }
+
+ template <typename Graph, bool Is2Way>
+ inline void
+ basic_add_edge_function<Graph,Is2Way>::operator()(
+ typename graph_traits<Graph>::vertex_descriptor u
+ , typename graph_traits<Graph>::vertex_descriptor v
+ )
+ {
+ add_edge(u, v, _graph);
+
+ if (
+ Is2Way && ::std::tr1::is_base_of<
+ directed_tag
+ , typename graph_traits<Graph>::directed_category
+ >::value
+ )
+ {
+ add_edge(v, u, _graph);
+ }
+ }
+ //->
+} // namespace boost
+//]
+
+//[reference__basic_2way_edge_adder__prototype
+namespace boost {
+
+ template <typename Graph>
+ basic_add_edge_function<Graph,true> basic_2way_edge_adder(Graph& graph);
+
+ //<-
+ template <typename Graph>
+ inline basic_add_edge_function<Graph,true>
+ basic_2way_edge_adder(Graph& graph)
+ {
+ return basic_add_edge_function<Graph,true>(graph);
+ }
+ //->
+} // namespace boost
+//]
+
+//[reference__basic_edge_adder__prototype
+namespace boost {
+
+ template <typename Graph>
+ basic_add_edge_function<Graph,false> basic_edge_adder(Graph& graph);
+
+ //<-
+ template <typename Graph>
+ inline basic_add_edge_function<Graph,false> basic_edge_adder(Graph& graph)
+ {
+ return basic_add_edge_function<Graph,false>(graph);
+ }
+ //->
+} // namespace boost
+//]
+
+#endif // BOOST_GRAPH_BASIC_ADD_EDGE_FUNCTION_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/basic_vert_insert_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/basic_vert_insert_iterator.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,123 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_BASIC_VERT_INSERT_ITERATOR_HPP
+#define BOOST_GRAPH_BASIC_VERT_INSERT_ITERATOR_HPP
+
+#include <boost/config.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+
+#ifndef BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+//[reference__basic_vertex_insert_iterator__definition
+namespace boost {
+
+ template <typename Graph>
+ class basic_vertex_insert_iterator
+ : public ::boost::iterator_facade<
+ basic_vertex_insert_iterator<Graph>
+ , typename graph_traits<Graph>::vertex_descriptor
+ , forward_traversal_tag
+ >
+ {
+ //<-
+#ifndef BOOST_NO_SFINAE
+ struct enabler
+ {
+ };
+#endif
+
+ mutable Graph& _graph;
+ mutable typename graph_traits<Graph>::vertex_descriptor _vertex;
+ //->
+
+ public:
+ explicit basic_vertex_insert_iterator(Graph& graph);
+
+ template <typename OtherGraph>
+ basic_vertex_insert_iterator(
+ basic_vertex_insert_iterator<OtherGraph> const& other
+//<-
+#ifndef BOOST_NO_SFINAE
+ , typename ::boost::enable_if<
+ ::std::tr1::is_convertible<OtherGraph&,Graph&>
+ , enabler
+ >::type = enabler()
+#endif
+//->
+ );
+
+ //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+ private:
+ friend class ::boost::iterator_core_access;
+#endif
+
+ typename graph_traits<Graph>::vertex_descriptor& dereference() const;
+
+ void increment();
+ //->
+ };
+
+ //<-
+ template <typename Graph>
+ basic_vertex_insert_iterator<Graph>::basic_vertex_insert_iterator(
+ Graph& graph
+ ) : _graph(graph), _vertex(graph_traits<Graph>::null_vertex())
+ {
+ }
+
+ template <typename Graph>
+ template <typename OtherGraph>
+ basic_vertex_insert_iterator<Graph>::basic_vertex_insert_iterator(
+ basic_vertex_insert_iterator<OtherGraph> const& other
+#ifndef BOOST_NO_SFINAE
+ , typename ::boost::enable_if<
+ ::std::tr1::is_convertible<OtherGraph&,Graph&>
+ , enabler
+ >::type
+#endif
+ ) : _graph(other._graph), _vertex(other._vertex)
+ {
+ }
+
+ template <typename Graph>
+ inline typename graph_traits<Graph>::vertex_descriptor&
+ basic_vertex_insert_iterator<Graph>::dereference() const
+ {
+ return _vertex = add_vertex(_graph);
+ }
+
+ template <typename Graph>
+ inline void basic_vertex_insert_iterator<Graph>::increment()
+ {
+ }
+ //->
+} // namespace boost
+//]
+
+//[reference__basic_vertex_inserter__prototype
+namespace boost {
+
+ template <typename Graph>
+ basic_vertex_insert_iterator<Graph> basic_vertex_inserter(Graph& graph);
+
+ //<-
+ template <typename Graph>
+ inline basic_vertex_insert_iterator<Graph>
+ basic_vertex_inserter(Graph& graph)
+ {
+ return basic_vertex_insert_iterator<Graph>(graph);
+ }
+ //->
+} // namespace boost
+//]
+
+#endif // BOOST_GRAPH_BASIC_VERT_INSERT_ITERATOR_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/detail/default_origin.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/detail/default_origin.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,94 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_DETAIL_DEFAULT_ORIGIN_HPP
+#define BOOST_GRAPH_DETAIL_DEFAULT_ORIGIN_HPP
+
+#include <boost/utility/value_init.hpp>
+
+namespace boost { namespace detail {
+
+ template <typename Point, typename PositionIndexMap, typename Dimension>
+ inline Point&
+ build_default_origin(
+ Point const& point
+ , PositionIndexMap position_index
+ , Dimension const dimension_count
+ )
+ {
+ Point& result = const_cast<Point&>(point);
+
+ for (Dimension dim = initialized_value; dim < dimension_count; ++dim)
+ {
+ result[position_index[dim]] = initialized_value;
+ }
+
+ return result;
+ }
+
+ template <typename Dimension>
+ class default_origin
+ {
+ template <typename PositionIndexMap>
+ class dispatch
+ {
+ Dimension const _dimension_count;
+ PositionIndexMap _position_index;
+
+ public:
+ inline dispatch(
+ Dimension const dimension_count
+ , PositionIndexMap position_index
+ ) : _dimension_count(dimension_count)
+ , _position_index(position_index)
+ {
+ }
+
+ template <typename Point>
+ inline Point& operator()(Point const& point) const
+ {
+ return build_default_origin(
+ point
+ , _position_index
+ , _dimension_count
+ );
+ }
+ };
+
+ Dimension const _dimension_count;
+
+ public:
+ inline explicit default_origin(Dimension const dimension_count)
+ : _dimension_count(dimension_count)
+ {
+ }
+
+ template <typename PositionIndexMap>
+ inline dispatch<PositionIndexMap>
+ operator()(PositionIndexMap position_index) const
+ {
+ return dispatch<
+ PositionIndexMap
+ >(_dimension_count, position_index);
+ }
+ };
+
+ template <typename Dimension>
+ inline default_origin<Dimension>
+ make_default_origin(Dimension const dimension_count)
+ {
+ return default_origin<Dimension>(dimension_count);
+ }
+
+ template <typename DimensionCount>
+ inline default_origin<typename DimensionCount::value_type>
+ make_default_origin_ic(DimensionCount)
+ {
+ return make_default_origin(DimensionCount::value);
+ }
+}} // namespace boost::detail
+
+#endif // BOOST_GRAPH_DETAIL_DEFAULT_ORIGIN_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/detail/default_scale.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/detail/default_scale.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,94 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_DETAIL_DEFAULT_SCALE_HPP
+#define BOOST_GRAPH_DETAIL_DEFAULT_SCALE_HPP
+
+#include <boost/utility/value_init.hpp>
+
+namespace boost { namespace detail {
+
+ template <typename Point, typename PositionIndexMap, typename Dimension>
+ inline Point&
+ build_default_scale(
+ Point const& point
+ , PositionIndexMap position_index
+ , Dimension const dimension_count
+ )
+ {
+ Point& result = const_cast<Point&>(point);
+
+ for (Dimension dim = initialized_value; dim < dimension_count; ++dim)
+ {
+ result[position_index[dim]] = typename Point::value_type(1);
+ }
+
+ return result;
+ }
+
+ template <typename Dimension>
+ class default_scale
+ {
+ template <typename PositionIndexMap>
+ class dispatch
+ {
+ Dimension const _dimension_count;
+ PositionIndexMap _position_index;
+
+ public:
+ inline dispatch(
+ Dimension const dimension_count
+ , PositionIndexMap position_index
+ ) : _dimension_count(dimension_count)
+ , _position_index(position_index)
+ {
+ }
+
+ template <typename Point>
+ inline Point& operator()(Point const& point) const
+ {
+ return build_default_scale(
+ point
+ , _position_index
+ , _dimension_count
+ );
+ }
+ };
+
+ Dimension const _dimension_count;
+
+ public:
+ inline explicit default_scale(Dimension const dimension_count)
+ : _dimension_count(dimension_count)
+ {
+ }
+
+ template <typename PositionIndexMap>
+ inline dispatch<PositionIndexMap>
+ operator()(PositionIndexMap position_index) const
+ {
+ return dispatch<
+ PositionIndexMap
+ >(_dimension_count, position_index);
+ }
+ };
+
+ template <typename Dimension>
+ inline default_scale<Dimension>
+ make_default_scale(Dimension const dimension_count)
+ {
+ return default_scale<Dimension>(dimension_count);
+ }
+
+ template <typename DimensionCount>
+ inline default_scale<typename DimensionCount::value_type>
+ make_default_scale_ic(DimensionCount)
+ {
+ return make_default_scale(DimensionCount::value);
+ }
+}} // namespace boost::detail
+
+#endif // BOOST_GRAPH_DETAIL_DEFAULT_SCALE_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/detail/intrusive_layout_params.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/detail/intrusive_layout_params.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,168 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_DETAIL_INTRUSIVE_LAYOUT_PARAMS_HPP
+#define BOOST_GRAPH_DETAIL_INTRUSIVE_LAYOUT_PARAMS_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/graph/keywords/dimension_count.hpp>
+#include <boost/graph/keywords/dimensions.hpp>
+#include <boost/graph/keywords/has_square_origin.hpp>
+#include <boost/graph/keywords/inscribed_radius.hpp>
+#include <boost/graph/keywords/is_zeta.hpp>
+#include <boost/graph/keywords/origin.hpp>
+#include <boost/graph/keywords/point_factory.hpp>
+#include <boost/graph/keywords/position_index_map.hpp>
+#include <boost/graph/keywords/position_map.hpp>
+#include <boost/graph/keywords/scale.hpp>
+#include <boost/graph/keywords/vertex_centroid_distance.hpp>
+#include <boost/graph/keywords/wraparound_policy.hpp>
+
+#define BOOST_BGL_INTRUSIVE_LAYOUT_DECLARE_PARAMS \
+BOOST_BGL_ONE_PARAM_CREF(dimension_count, dimension_count) \
+BOOST_BGL_ONE_PARAM_CREF(dimensions, dimensions) \
+BOOST_BGL_ONE_PARAM_CREF(has_square_origin, has_square_origin) \
+BOOST_BGL_ONE_PARAM_CREF(inscribed_radius, inscribed_radius) \
+BOOST_BGL_ONE_PARAM_CREF(is_zeta, is_zeta) \
+BOOST_BGL_ONE_PARAM_CREF(origin, origin) \
+BOOST_BGL_ONE_PARAM_CREF(point_factory, point_factory) \
+BOOST_BGL_ONE_PARAM_CREF(position_index_map, position_index_map) \
+BOOST_BGL_ONE_PARAM_CREF(position_map, position_map) \
+BOOST_BGL_ONE_PARAM_CREF(scale, scale) \
+BOOST_BGL_ONE_PARAM_CREF(vertex_centroid_distance, vertex_centroid_distance) \
+BOOST_BGL_ONE_PARAM_CREF(wraparound_policy, wraparound_policy) \
+//
+
+namespace boost {
+ namespace detail {
+
+ template <typename T, typename Tag, typename Base = no_property>
+ struct intrusive_layout_params : Base
+ {
+ typedef intrusive_layout_params self;
+ typedef Base next_type;
+ typedef Tag tag_type;
+ typedef T value_type;
+
+ T m_value;
+
+ intrusive_layout_params(T v = T()) : Base(), m_value(v)
+ {
+ }
+
+ intrusive_layout_params(T v, Base const& b)
+ : Base(b), m_value(v)
+ {
+ }
+
+#define BOOST_BGL_ONE_PARAM_REF(name, key) \
+ template <typename PType> \
+ inline intrusive_layout_params< \
+ ::boost::reference_wrapper<PType> \
+ , BOOST_PP_CAT(key, _t) \
+ , self \
+ > \
+ name(PType& p) const \
+ { \
+ typedef intrusive_layout_params< \
+ ::boost::reference_wrapper<PType> \
+ , BOOST_PP_CAT(key, _t) \
+ , self \
+ > \
+ Params; \
+ return Params(::boost::ref(p), *this); \
+ } \
+//
+
+#define BOOST_BGL_ONE_PARAM_CREF(name, key) \
+ template <typename PType> \
+ inline intrusive_layout_params< \
+ PType \
+ , BOOST_PP_CAT(key, _t) \
+ , self \
+ > \
+ name(PType const& p) const \
+ { \
+ typedef intrusive_layout_params< \
+ PType \
+ , BOOST_PP_CAT(key, _t) \
+ , self \
+ > \
+ Params; \
+ return Params(p, *this); \
+ } \
+//
+
+ BOOST_BGL_INTRUSIVE_LAYOUT_DECLARE_PARAMS
+
+#undef BOOST_BGL_ONE_PARAM_CREF
+#undef BOOST_BGL_ONE_PARAM_REF
+ };
+
+ typedef intrusive_layout_params<char,unused_tag_type>
+ no_intrusive_layout_params;
+
+ template <>
+ struct convert_bgl_params_to_boost_parameter<no_intrusive_layout_params>
+ {
+ typedef ::boost::parameter::aux::empty_arg_list type;
+
+ static type conv(no_property const&)
+ {
+ return type();
+ }
+ };
+ } // namespace detail
+
+ inline detail::no_intrusive_layout_params
+ make_intrusive_layout_params()
+ {
+ return detail::no_intrusive_layout_params();
+ }
+
+#define BOOST_BGL_ONE_PARAM_REF(name, key) \
+ template <typename PType> \
+ inline detail::intrusive_layout_params< \
+ ::boost::reference_wrapper<PType> \
+ , BOOST_PP_CAT(key, _t) \
+ > \
+ name(PType& p) \
+ { \
+ typedef detail::intrusive_layout_params< \
+ ::boost::reference_wrapper<PType> \
+ , BOOST_PP_CAT(key, _t) \
+ > \
+ Params; \
+ return Params(::boost::ref(p)); \
+ } \
+//
+
+#define BOOST_BGL_ONE_PARAM_CREF(name, key) \
+ template <typename PType> \
+ inline detail::intrusive_layout_params< \
+ PType \
+ , BOOST_PP_CAT(key, _t) \
+ > \
+ name(PType const& p) \
+ { \
+ typedef detail::intrusive_layout_params< \
+ PType \
+ , BOOST_PP_CAT(key, _t) \
+ > \
+ Params; \
+ return Params(p); \
+ } \
+//
+
+ BOOST_BGL_INTRUSIVE_LAYOUT_DECLARE_PARAMS
+
+#undef BOOST_BGL_ONE_PARAM_CREF
+#undef BOOST_BGL_ONE_PARAM_REF
+} // namespace boost
+
+#undef BOOST_BGL_INTRUSIVE_LAYOUT_DECLARE_PARAMS
+
+#endif // BOOST_GRAPH_DETAIL_INTRUSIVE_LAYOUT_PARAMS_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/dimension_count.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/dimension_count.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_DIMENSION_COUNT_HPP
+#define BOOST_GRAPH_KEYWORDS_DIMENSION_COUNT_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(dimension_count);
+ }} // namespace graph::keywords
+
+ struct dimension_count_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<dimension_count_t>
+ {
+ typedef boost::graph::keywords::tag::dimension_count type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_DIMENSION_COUNT_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/dimensions.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/dimensions.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_DIMENSIONS_HPP
+#define BOOST_GRAPH_KEYWORDS_DIMENSIONS_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(dimensions);
+ }} // namespace graph::keywords
+
+ struct dimensions_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<dimensions_t>
+ {
+ typedef boost::graph::keywords::tag::dimensions type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_DIMENSIONS_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/edge_function.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/edge_function.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,17 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_EDGE_FUNCTION_HPP
+#define BOOST_GRAPH_KEYWORDS_EDGE_FUNCTION_HPP
+
+#include <boost/parameter/name.hpp>
+
+namespace boost { namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(edge_function);
+}}} // namespace boost::graph::keywords
+
+#endif // BOOST_GRAPH_KEYWORDS_EDGE_FUNCTION_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/has_square_origin.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/has_square_origin.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_HAS_SQUARE_ORIGIN_HPP
+#define BOOST_GRAPH_KEYWORDS_HAS_SQUARE_ORIGIN_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(has_square_origin);
+ }} // namespace graph::keywords
+
+ struct has_square_origin_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<has_square_origin_t>
+ {
+ typedef boost::graph::keywords::tag::has_square_origin type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_HAS_SQUARE_ORIGIN_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/inscribed_radius.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/inscribed_radius.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_INSCRIBED_RADIUS_HPP
+#define BOOST_GRAPH_KEYWORDS_INSCRIBED_RADIUS_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(inscribed_radius);
+ }} // namespace graph::keywords
+
+ struct inscribed_radius_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<inscribed_radius_t>
+ {
+ typedef boost::graph::keywords::tag::inscribed_radius type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_INSCRIBED_RADIUS_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/is_zeta.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/is_zeta.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_IS_ZETA_HPP
+#define BOOST_GRAPH_KEYWORDS_IS_ZETA_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(is_zeta);
+ }} // namespace graph::keywords
+
+ struct is_zeta_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<is_zeta_t>
+ {
+ typedef boost::graph::keywords::tag::is_zeta type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_IS_ZETA_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/origin.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/origin.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_ORIGIN_HPP
+#define BOOST_GRAPH_KEYWORDS_ORIGIN_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(origin);
+ }} // namespace graph::keywords
+
+ struct origin_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<origin_t>
+ {
+ typedef boost::graph::keywords::tag::origin type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_ORIGIN_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/point_factory.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/point_factory.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_POINT_FACTORY_HPP
+#define BOOST_GRAPH_KEYWORDS_POINT_FACTORY_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(point_factory);
+ }} // namespace graph::keywords
+
+ struct point_factory_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<point_factory_t>
+ {
+ typedef boost::graph::keywords::tag::point_factory type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_POINT_FACTORY_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/position_index_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/position_index_map.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_POSITION_INDEX_MAP_HPP
+#define BOOST_GRAPH_KEYWORDS_POSITION_INDEX_MAP_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(position_index_map);
+ }} // namespace graph::keywords
+
+ struct position_index_map_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<position_index_map_t>
+ {
+ typedef boost::graph::keywords::tag::position_index_map type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_POSITION_INDEX_MAP_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/position_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/position_map.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_POSITION_MAP_HPP
+#define BOOST_GRAPH_KEYWORDS_POSITION_MAP_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(position_map);
+ }} // namespace graph::keywords
+
+ struct position_map_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<position_map_t>
+ {
+ typedef boost::graph::keywords::tag::position_map type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_POSITION_MAP_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/scale.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/scale.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_SCALE_HPP
+#define BOOST_GRAPH_KEYWORDS_SCALE_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(scale);
+ }} // namespace graph::keywords
+
+ struct scale_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<scale_t>
+ {
+ typedef boost::graph::keywords::tag::scale type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_SCALE_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/vertex_centroid_distance.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/vertex_centroid_distance.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_VERTEX_CENTROID_DISTANCE_HPP
+#define BOOST_GRAPH_KEYWORDS_VERTEX_CENTROID_DISTANCE_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(vertex_centroid_distance);
+ }} // namespace graph::keywords
+
+ struct vertex_centroid_distance_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<vertex_centroid_distance_t>
+ {
+ typedef boost::graph::keywords::tag::vertex_centroid_distance type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_VERTEX_CENTROID_DISTANCE_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/vertex_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/vertex_iterator.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,17 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_VERTEX_ITERATOR_HPP
+#define BOOST_GRAPH_KEYWORDS_VERTEX_ITERATOR_HPP
+
+#include <boost/parameter/name.hpp>
+
+namespace boost { namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(vertex_iterator);
+}}} // namespace boost::graph::keywords
+
+#endif // BOOST_GRAPH_KEYWORDS_VERTEX_ITERATOR_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/keywords/wraparound_policy.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/keywords/wraparound_policy.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,33 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_KEYWORDS_WRAPAROUND_POLICY_HPP
+#define BOOST_GRAPH_KEYWORDS_WRAPAROUND_POLICY_HPP
+
+#include <boost/graph/named_function_params.hpp>
+#include <boost/parameter/name.hpp>
+
+namespace boost {
+ namespace graph { namespace keywords {
+
+ BOOST_PARAMETER_NAME(wraparound_policy);
+ }} // namespace graph::keywords
+
+ struct wraparound_policy_t
+ {
+ };
+
+ namespace detail {
+
+ template <>
+ struct convert_one_keyword<wraparound_policy_t>
+ {
+ typedef boost::graph::keywords::tag::wraparound_policy type;
+ };
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_GRAPH_KEYWORDS_WRAPAROUND_POLICY_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/set_bitset_grid_layout.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/set_bitset_grid_layout.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,356 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_SET_BITSET_GRID_LAYOUT_HPP
+#define BOOST_GRAPH_SET_BITSET_GRID_LAYOUT_HPP
+
+#include <numeric>
+#include <functional>
+#include <vector>
+#include <bitset>
+#include <boost/preprocessor/comparison/less.hpp>
+#include <boost/parameter.hpp>
+#include <boost/parameter/preprocessor.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/functional/value_factory.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/array.hpp>
+#include <boost/multi_array.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/detail/intrusive_layout_params.hpp>
+#include <boost/graph/keywords/dimension_count.hpp>
+#include <boost/graph/keywords/edge_function.hpp>
+#include <boost/graph/keywords/position_map.hpp>
+#include <boost/graph/keywords/vertex_iterator.hpp>
+#include <boost/detail/metafunction/data_type.hpp>
+
+#if BOOST_PP_LESS(3, BOOST_PARAMETER_MAX_ARITY)
+#define BOOST_GRAPH_SET_BITSET_GRID_LAYOUT_TAKES_ALL_PARAMS
+#endif
+
+namespace boost {
+ namespace detail {
+
+ template <typename BitSet>
+ struct bitset_grid_layout_bit_count
+ {
+ template <typename BitCount>
+ struct apply
+ {
+ typedef BitCount type;
+ };
+ };
+
+ template < ::std::size_t N>
+ struct bitset_grid_layout_bit_count< ::std::bitset<N> >
+ {
+ template <typename T>
+ struct apply
+ {
+ typedef ::boost::mpl::integral_c< ::std::size_t,N> type;
+ };
+ };
+
+ template <typename PositionMap, typename BitCount>
+ inline ::std::size_t
+ count_bitset_grid_layout_vertices_impl(
+ PositionMap
+ , BitCount
+ )
+ {
+ typedef typename ::boost::property_traits<PositionMap>::value_type
+ PositionMapValue;
+ typedef typename ::boost::mpl::apply_wrap1<
+ bitset_grid_layout_bit_count<PositionMapValue>
+ , BitCount
+ >::type
+ ActualBitCount;
+
+ return 1 << ActualBitCount::value;
+ }
+
+ template <typename BitSet>
+ struct bitset_grid_layout_point_factory
+ {
+ template <typename BitCount>
+ struct apply
+ {
+ struct type
+ {
+ typedef BitSet result_type;
+
+ result_type operator()() const
+ {
+ return result_type(BitCount::value);
+ }
+ };
+ };
+ };
+
+ template < ::std::size_t N>
+ struct bitset_grid_layout_point_factory< ::std::bitset<N> >
+ {
+ template <typename T>
+ struct apply
+ {
+ struct type
+ {
+ typedef ::std::bitset<N> result_type;
+
+ result_type operator()() const
+ {
+ return result_type();
+ }
+ };
+ };
+ };
+
+ template <>
+ struct bitset_grid_layout_point_factory<int>
+ {
+ template <typename BitCount>
+ struct apply
+ {
+ struct type
+ {
+ typedef ::std::bitset<BitCount::value> result_type;
+
+ result_type operator()() const
+ {
+ return result_type();
+ }
+ };
+ };
+ };
+
+ template <
+ typename VertexIterator
+ , typename EdgeAdder
+ , typename PositionMap
+ , typename BitCount
+ >
+ void
+ set_bitset_grid_layout_impl(
+ VertexIterator v_itr
+ , EdgeAdder edge_adder
+ , PositionMap position
+ , BitCount const&
+ )
+ {
+ typedef typename ::boost::iterator_value<VertexIterator>::type
+ Vertex;
+ typedef typename ::boost::property_traits<PositionMap>::value_type
+ PositionMapValue;
+ typedef typename ::boost::mpl::apply_wrap1<
+ bitset_grid_layout_bit_count<PositionMapValue>
+ , BitCount
+ >::type
+ ActualBitCount;
+ typedef typename ::boost::mpl::apply_wrap1<
+ bitset_grid_layout_point_factory<PositionMapValue>
+ , BitCount
+ >::type
+ BitSetFactory;
+ typedef typename BitSetFactory::result_type
+ BitSet;
+ ::std::size_t const bit_count = ActualBitCount::value;
+ BOOST_STATIC_ASSERT((1 < bit_count));
+ ::std::size_t const vert_count = 1 << bit_count;
+ typedef ::boost::multi_array<Vertex,bit_count> VertexArray;
+ typedef typename VertexArray::index VAI;
+ typedef ::boost::array<VAI,bit_count> Index;
+
+ Index size;
+
+ for (::std::size_t bit_index = 0; bit_index < bit_count; ++bit_index)
+ {
+ size[bit_index] = bit_count;
+ }
+
+ VertexArray vertex_array(size);
+ ::std::vector<Index> indices(1 << bit_count);
+ Index index;
+ typename ::std::vector<Index>::iterator i_itr, i_end = indices.end();
+
+ for (::std::size_t bit_index = 0; bit_index < bit_count; ++bit_index)
+ {
+ index[bit_index] = 0;
+ }
+
+ BitSetFactory bitset_factory;
+
+ for (i_itr = indices.begin(); i_itr != i_end; ++i_itr, ++v_itr)
+ {
+ BitSet bit_set = bitset_factory();
+ ::std::size_t bit_index = 0;
+
+ while (bit_index < bit_count)
+ {
+ bit_set[bit_index] = index[bit_index] ? true : false;
+ ++bit_index;
+ }
+
+ put(position, vertex_array(*i_itr = index) = *v_itr, bit_set);
+
+ for (
+ ++index[--bit_index];
+ bit_index && (index[bit_index] == 2);
+ ++index[--bit_index]
+ )
+ {
+ index[bit_index] = 0;
+ }
+ }
+
+ for (i_itr = indices.begin(); i_itr != i_end; ++i_itr)
+ {
+ for (
+ ::std::size_t bit_index = 0;
+ bit_index < bit_count;
+ ++bit_index
+ )
+ {
+ index = *i_itr;
+
+ if (!index[bit_index])
+ {
+ index[bit_index] = 1;
+ edge_adder(vertex_array(*i_itr), vertex_array(index));
+ }
+ }
+ }
+ }
+ } // namespace detail
+
+ template <typename T, typename Tag, typename Base>
+ inline ::std::size_t
+ count_bitset_grid_layout_vertices(
+ detail::intrusive_layout_params<T,Tag,Base> const& params
+ )
+ {
+ typedef detail::intrusive_layout_params<T,Tag,Base> Params;
+ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(Params, params)
+ typedef typename ::boost::detail::data_type<
+ typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::dimension_count
+ , ::boost::mpl::integral_c< ::std::size_t,0>
+ >::type
+ >::type
+ BitCount;
+
+ return detail::count_bitset_grid_layout_vertices_impl(
+ position_map
+ , arg_pack[
+ ::boost::graph::keywords::_dimension_count
+ || value_factory<BitCount>()
+ ]
+ );
+ }
+
+#if BOOST_PP_LESS(1, BOOST_PARAMETER_MAX_ARITY)
+ BOOST_PARAMETER_FUNCTION(
+ (::std::size_t)
+ , count_bitset_grid_layout_vertices
+ , ::boost::graph::keywords::tag
+ , (deduced
+ (optional
+ (position_map
+ , *(is_property_map< ::boost::mpl::_>)
+ , dummy_property_map()
+ )
+ (dimension_count
+ , *(::boost::mpl::not_<is_property_map< ::boost::mpl::_> >)
+ , (::boost::mpl::integral_c< ::std::size_t,0>())
+ )
+ )
+ )
+ )
+ {
+ return detail::count_bitset_grid_layout_vertices_impl(
+ position_map
+ , dimension_count
+ );
+ }
+#endif // 1 < BOOST_PARAMETER_MAX_ARITY
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename T
+ , typename Tag
+ , typename Base
+ >
+ inline void
+ set_bitset_grid_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , detail::intrusive_layout_params<T,Tag,Base> const& params
+ )
+ {
+ typedef detail::intrusive_layout_params<T,Tag,Base> Params;
+ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(Params, params)
+ typedef typename ::boost::detail::data_type<
+ typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::dimension_count
+ , ::boost::mpl::integral_c< ::std::size_t,0>
+ >::type
+ >::type
+ BitCount;
+
+ detail::set_bitset_grid_layout_impl(
+ vertex_iterator
+ , edge_function
+ , arg_pack[
+ ::boost::graph::keywords::_position_map
+ || value_factory<dummy_property_map>()
+ ]
+ , arg_pack[
+ ::boost::graph::keywords::_dimension_count
+ || value_factory<BitCount>()
+ ]
+ );
+ }
+
+#if defined(BOOST_GRAPH_SET_BITSET_GRID_LAYOUT_TAKES_ALL_PARAMS)
+ BOOST_PARAMETER_FUNCTION(
+ (bool)
+ , set_bitset_grid_layout
+ , ::boost::graph::keywords::tag
+ , (required
+ (vertex_iterator, *)
+ (edge_function, *)
+ )
+ (deduced
+ (optional
+ (position_map
+ , *(is_property_map< ::boost::mpl::_>)
+ , dummy_property_map()
+ )
+ (dimension_count
+ , *(::boost::mpl::not_<is_property_map< ::boost::mpl::_> >)
+ , (::boost::mpl::integral_c< ::std::size_t,0>())
+ )
+ )
+ )
+ )
+ {
+ detail::set_bitset_grid_layout_impl(
+ vertex_iterator
+ , edge_function
+ , position_map
+ , dimension_count
+ );
+ return true;
+ }
+#endif // BOOST_GRAPH_SET_BITSET_GRID_LAYOUT_TAKES_ALL_PARAMS
+} // namespace boost
+
+#endif // BOOST_GRAPH_SET_BITSET_GRID_LAYOUT_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/set_bt_cubic_hcomb_layout.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/set_bt_cubic_hcomb_layout.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,597 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_SET_BT_CUBIC_HCOMB_LAYOUT_HPP
+#define BOOST_GRAPH_SET_BT_CUBIC_HCOMB_LAYOUT_HPP
+
+#include <numeric>
+#include <functional>
+#include <vector>
+#include <boost/preprocessor/comparison/less.hpp>
+#include <boost/parameter.hpp>
+#include <boost/parameter/preprocessor.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/functional/value_factory.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/array.hpp>
+#include <boost/multi_array.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/detail/intrusive_layout_params.hpp>
+#include <boost/graph/keywords/dimensions.hpp>
+#include <boost/graph/keywords/edge_function.hpp>
+#include <boost/graph/keywords/inscribed_radius.hpp>
+#include <boost/graph/keywords/origin.hpp>
+#include <boost/graph/keywords/point_factory.hpp>
+#include <boost/graph/keywords/position_map.hpp>
+#include <boost/graph/keywords/vertex_iterator.hpp>
+#include <boost/graph/keywords/wraparound_policy.hpp>
+#include <boost/detail/metafunction/data_type.hpp>
+#include <boost/detail/index_predicate.hpp>
+#include <boost/detail/make_value_factory.hpp>
+#include <boost/graph/detail/default_origin.hpp>
+
+#if BOOST_PP_LESS(8, BOOST_PARAMETER_MAX_ARITY)
+#define BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS
+#elif BOOST_PP_LESS(4, BOOST_PARAMETER_MAX_ARITY)
+#define BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_5_PARAMS
+#endif
+
+namespace boost {
+ namespace detail {
+
+ template <typename PositionIndexMap, typename Scalar, typename Dimensions>
+ ::std::size_t
+ count_bitruncated_cubic_honeycomb_layout_vertices_impl(
+ PositionIndexMap position_index
+ , Scalar inscribed_radius
+ , Dimensions const& dimensions
+ )
+ {
+ ::std::size_t const dim_count = 3;
+ Scalar const inscribed_diameter = inscribed_radius * 2;
+
+ ::boost::array< ::std::size_t,dim_count> size_1, size_2;
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ size_1[dim] = static_cast< ::std::size_t>(
+ (dimensions[dim] + inscribed_radius) / inscribed_diameter
+ );
+ size_2[dim] = static_cast< ::std::size_t>(
+ dimensions[dim] / inscribed_diameter
+ );
+ }
+
+ return ::std::accumulate(
+ size_1.begin()
+ , size_1.end()
+ , 1
+ , ::std::multiplies< ::std::size_t>()
+ ) + ::std::accumulate(
+ size_2.begin()
+ , size_2.end()
+ , 1
+ , ::std::multiplies< ::std::size_t>()
+ );
+ }
+
+ template <
+ typename VertexIterator
+ , typename EdgeAdder
+ , typename PositionMap
+ , typename PositionIndexMap
+ , typename Scalar
+ , typename Dimensions
+ , typename Point
+ , typename PointFactory
+ , typename WraparoundPolicy
+ >
+ void
+ set_bitruncated_cubic_honeycomb_layout_impl(
+ VertexIterator v_itr
+ , EdgeAdder edge_adder
+ , PositionMap position
+ , PositionIndexMap position_index
+ , Scalar inscribed_radius
+ , Dimensions const& dimensions
+ , Point const& origin
+ , PointFactory point_factory
+ , WraparoundPolicy const& wraparound_policy
+ )
+ {
+ typedef typename ::boost::iterator_value<VertexIterator>::type Vertex;
+ ::std::size_t const dim_count = 3;
+ typedef ::boost::multi_array<Vertex,dim_count> VertexArray;
+ typedef typename VertexArray::index VAI;
+ typedef ::boost::array<VAI,dim_count> Index;
+
+ Scalar const inscribed_diameter = inscribed_radius * 2;
+ Index size_1, size_2;
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ size_1[dim] = static_cast< ::std::size_t>(
+ (dimensions[dim] + inscribed_radius) / inscribed_diameter
+ );
+ size_2[dim] = static_cast< ::std::size_t>(
+ dimensions[dim] / inscribed_diameter
+ );
+ }
+
+ VertexArray vertex_array_1(size_1);
+ VertexArray vertex_array_2(size_2);
+ ::std::vector<Index> indices_1(
+ ::std::accumulate(
+ size_1.begin()
+ , size_1.end()
+ , 1
+ , ::std::multiplies<VAI>()
+ )
+ );
+ ::std::vector<Index> indices_2(
+ ::std::accumulate(
+ size_2.begin()
+ , size_2.end()
+ , 1
+ , ::std::multiplies<VAI>()
+ )
+ );
+ Index index;
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ index[position_index[dim_index]] = 0;
+ }
+
+ typename ::std::vector<Index>::iterator i_itr;
+ typename ::std::vector<Index>::iterator i_1_end = indices_1.end();
+
+ for (i_itr = indices_1.begin(); i_itr != i_1_end; ++i_itr, ++v_itr)
+ {
+ Point point = point_factory();
+ ::std::size_t dim_index = 0;
+
+ while (dim_index < dim_count)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ point[dim] = inscribed_diameter * index[dim] + origin[dim];
+ ++dim_index;
+ }
+
+ put(position, vertex_array_1(*i_itr = index) = *v_itr, point);
+
+ for (
+ ++index[position_index[--dim_index]];
+ dim_index && (
+ index[position_index[dim_index]]
+ == size_1[position_index[dim_index]]
+ );
+ ++index[position_index[--dim_index]]
+ )
+ {
+ index[position_index[dim_index]] = 0;
+ }
+ }
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ index[position_index[dim_index]] = 0;
+ }
+
+ typename ::std::vector<Index>::iterator i_2_end = indices_2.end();
+
+ for (i_itr = indices_2.begin(); i_itr != i_2_end; ++i_itr, ++v_itr)
+ {
+ Point point = point_factory();
+ ::std::size_t dim_index = 0;
+
+ while (dim_index < dim_count)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ point[dim] = (
+ inscribed_diameter * index[dim]
+ + origin[dim]
+ + inscribed_radius
+ );
+ ++dim_index;
+ }
+
+ put(position, vertex_array_2(*i_itr = index) = *v_itr, point);
+
+ for (
+ ++index[position_index[--dim_index]];
+ dim_index && (
+ index[position_index[dim_index]]
+ == size_2[position_index[dim_index]]
+ );
+ ++index[position_index[--dim_index]]
+ )
+ {
+ index[position_index[dim_index]] = 0;
+ }
+ }
+
+ bool add_diagonal;
+
+ for (i_itr = indices_1.begin(); i_itr != i_1_end; ++i_itr)
+ {
+ index = *i_itr;
+ add_diagonal = true;
+
+ for (
+ ::std::size_t dim_index = 0;
+ dim_index < dim_count;
+ ++dim_index
+ )
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ if (add_diagonal && (index[dim] == size_2[dim]))
+ {
+ add_diagonal = false;
+ }
+ }
+
+ if (add_diagonal)
+ {
+ edge_adder(vertex_array_1(index), vertex_array_2(index));
+ }
+ }
+
+ for (i_itr = indices_2.begin(); i_itr != i_2_end; ++i_itr)
+ {
+ index = *i_itr;
+ add_diagonal = true;
+
+ for (
+ ::std::size_t dim_index = 0;
+ dim_index < dim_count;
+ ++dim_index
+ )
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ if (++index[dim] == size_1[dim])
+ {
+ if (wraparound_policy[dim])
+ {
+ index[dim] = 0;
+ }
+ else
+ {
+ add_diagonal = false;
+ }
+ }
+ }
+
+ if (add_diagonal)
+ {
+ edge_adder(vertex_array_2(*i_itr), vertex_array_1(index));
+ }
+ }
+
+ for (i_itr = indices_1.begin(); i_itr != i_1_end; ++i_itr)
+ {
+ for (
+ ::std::size_t dim_index = 0;
+ dim_index < dim_count;
+ ++dim_index
+ )
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ index = *i_itr;
+
+ if (++index[dim] == size_1[dim])
+ {
+ if (wraparound_policy[dim])
+ {
+ index[dim] = 0;
+ edge_adder(
+ vertex_array_1(*i_itr)
+ , vertex_array_1(index)
+ );
+ }
+ }
+ else
+ {
+ edge_adder(vertex_array_1(*i_itr), vertex_array_1(index));
+ }
+ }
+ }
+
+ Index other_index;
+
+ for (i_itr = indices_2.begin(); i_itr != i_2_end; ++i_itr)
+ {
+ for (
+ ::std::size_t dim_index = 0;
+ dim_index < dim_count;
+ ++dim_index
+ )
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ index = *i_itr;
+ add_diagonal = false;
+
+ if (++index[dim] == size_2[dim])
+ {
+ if (wraparound_policy[dim] && (size_1[dim] == size_2[dim]))
+ {
+ index[dim] = 0;
+ edge_adder(
+ vertex_array_2(*i_itr)
+ , vertex_array_2(index)
+ );
+ edge_adder(
+ vertex_array_2(*i_itr)
+ , vertex_array_1(index)
+ );
+ add_diagonal = true;
+ }
+ }
+ else
+ {
+ edge_adder(vertex_array_2(*i_itr), vertex_array_2(index));
+ edge_adder(vertex_array_2(*i_itr), vertex_array_1(index));
+ add_diagonal = true;
+ }
+
+ if (add_diagonal)
+ {
+ for (
+ ::std::size_t dim_index2 = dim_index + 1;
+ dim_index2 < dim_count;
+ ++dim_index2
+ )
+ {
+ ::std::size_t const dim2 = position_index[dim_index2];
+
+ other_index = index;
+
+ if (++other_index[dim2] == size_2[dim2])
+ {
+ if (
+ wraparound_policy[dim2]
+ && (size_1[dim2] == size_2[dim2])
+ )
+ {
+ other_index[dim2] = 0;
+ edge_adder(
+ vertex_array_1(other_index)
+ , vertex_array_2(*i_itr)
+ );
+ }
+ }
+ else
+ {
+ edge_adder(
+ vertex_array_1(other_index)
+ , vertex_array_2(*i_itr)
+ );
+ }
+ }
+ }
+ }
+ }
+ }
+ } // namespace detail
+
+ template <typename T, typename Tag, typename Base>
+ inline ::std::size_t
+ count_bitruncated_cubic_honeycomb_layout_vertices(
+ detail::intrusive_layout_params<T,Tag,Base> const& params
+ )
+ {
+ typedef detail::intrusive_layout_params<T,Tag,Base> Params;
+ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(Params, params)
+ return detail::count_bitruncated_cubic_honeycomb_layout_vertices_impl(
+ arg_pack[
+ ::boost::graph::keywords::_position_index_map
+ || value_factory<identity_property_map>()
+ ]
+ , arg_pack[::boost::graph::keywords::_inscribed_radius | 1]
+ , arg_pack[::boost::graph::keywords::_dimensions]
+ );
+ }
+
+#if BOOST_PP_LESS(2, BOOST_PARAMETER_MAX_ARITY)
+ BOOST_PARAMETER_FUNCTION(
+ (::std::size_t)
+ , count_bitruncated_cubic_honeycomb_layout_vertices
+ , ::boost::graph::keywords::tag
+ , (required
+ (dimensions, *)
+ )
+ (optional
+ (inscribed_radius
+ , *
+ , 1
+ )
+ (position_index_map
+ , *
+ , identity_property_map()
+ )
+ )
+ )
+ {
+ return detail::count_bitruncated_cubic_honeycomb_layout_vertices_impl(
+ position_index_map
+ , inscribed_radius
+ , dimensions
+ );
+ }
+#endif // 2 < BOOST_PARAMETER_MAX_ARITY
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename T
+ , typename Tag
+ , typename Base
+ >
+ inline void
+ set_bitruncated_cubic_honeycomb_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , detail::intrusive_layout_params<T,Tag,Base> const& params
+ )
+ {
+ typedef detail::intrusive_layout_params<T,Tag,Base> Params;
+ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(Params, params)
+ typedef typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::position_index_map
+ , identity_property_map
+ >::type
+ PositionIndexMap;
+ typedef typename ::boost::detail::data_type<
+ typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::dimensions
+ >::type
+ >::type
+ Point;
+ typedef typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::point_factory
+ , value_factory<Point>
+ >::type
+ PointFactory;
+
+ PointFactory point_factory = arg_pack[
+ ::boost::graph::keywords::_point_factory
+ || value_factory<value_factory<Point> >()
+ ];
+ PositionIndexMap position_index = arg_pack[
+ ::boost::graph::keywords::_position_index_map
+ || value_factory<identity_property_map>()
+ ];
+
+ detail::set_bitruncated_cubic_honeycomb_layout_impl(
+ vertex_iterator
+ , edge_function
+ , arg_pack[
+ ::boost::graph::keywords::_position_map
+ || value_factory<dummy_property_map>()
+ ]
+ , position_index
+ , arg_pack[::boost::graph::keywords::_inscribed_radius | 1]
+ , arg_pack[::boost::graph::keywords::_dimensions]
+ , arg_pack[
+ ::boost::graph::keywords::_origin
+ | detail::build_default_origin(
+ point_factory()
+ , position_index
+ , 3
+ )
+ ]
+ , point_factory
+ , arg_pack[
+ ::boost::graph::keywords::_wraparound_policy
+ | detail::index_predicate<false>()
+ ]
+ );
+ }
+
+#if defined(BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS)
+ BOOST_PARAMETER_FUNCTION(
+ (bool)
+ , set_bitruncated_cubic_honeycomb_layout
+ , ::boost::graph::keywords::tag
+ , (required
+ (vertex_iterator, *)
+ (edge_function, *)
+ (dimensions, *)
+ )
+ (optional
+ (inscribed_radius
+ , *
+ , 1
+ )
+ (wraparound_policy
+ , *
+ , detail::index_predicate<false>()
+ )
+ (point_factory
+ , *
+ , detail::make_value_factory(dimensions)
+ )
+ (position_index_map
+ , *
+ , identity_property_map()
+ )
+ (position_map
+ , *
+ , dummy_property_map()
+ )
+ (origin
+ , *
+ , detail::make_default_origin
+ (3)(position_index_map)(point_factory())
+ )
+ )
+ )
+ {
+ detail::set_bitruncated_cubic_honeycomb_layout_impl(
+ vertex_iterator
+ , edge_function
+ , position_map
+ , position_index_map
+ , inscribed_radius
+ , dimensions
+ , origin
+ , point_factory
+ , wraparound_policy
+ );
+ return true;
+ }
+#elif defined(BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_5_PARAMS)
+ BOOST_PARAMETER_FUNCTION(
+ (bool)
+ , set_bitruncated_cubic_honeycomb_layout
+ , ::boost::graph::keywords::tag
+ , (required
+ (vertex_iterator, *)
+ (edge_function, *)
+ (dimensions, *)
+ )
+ (optional
+ (inscribed_radius
+ , *
+ , 1
+ )
+ (wraparound_policy
+ , *
+ , detail::index_predicate<false>()
+ )
+ )
+ )
+ {
+ set_bitruncated_cubic_honeycomb_layout(
+ vertex_iterator
+ , edge_function
+ , make_intrusive_layout_params().dimensions(
+ dimensions
+ ).inscribed_radius(
+ inscribed_radius
+ ).wraparound_policy(
+ wraparound_policy
+ )
+ );
+ return true;
+ }
+#endif // BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_*_PARAMS
+} // namespace boost
+
+#endif // BOOST_GRAPH_SET_BT_CUBIC_HCOMB_LAYOUT_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/set_orthogonal_grid_layout.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/set_orthogonal_grid_layout.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,590 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_HPP
+#define BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_HPP
+
+#include <numeric>
+#include <functional>
+#include <vector>
+#include <boost/preprocessor/comparison/less.hpp>
+#include <boost/parameter.hpp>
+#include <boost/parameter/preprocessor.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/functional/value_factory.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/array.hpp>
+#include <boost/multi_array.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/detail/intrusive_layout_params.hpp>
+#include <boost/graph/keywords/dimensions.hpp>
+#include <boost/graph/keywords/dimension_count.hpp>
+#include <boost/graph/keywords/edge_function.hpp>
+#include <boost/graph/keywords/is_zeta.hpp>
+#include <boost/graph/keywords/origin.hpp>
+#include <boost/graph/keywords/point_factory.hpp>
+#include <boost/graph/keywords/position_map.hpp>
+#include <boost/graph/keywords/scale.hpp>
+#include <boost/graph/keywords/vertex_iterator.hpp>
+#include <boost/graph/keywords/wraparound_policy.hpp>
+#include <boost/detail/metafunction/data_type.hpp>
+#include <boost/detail/index_predicate.hpp>
+#include <boost/detail/make_value_factory.hpp>
+#include <boost/graph/detail/default_scale.hpp>
+#include <boost/graph/detail/default_origin.hpp>
+
+#if BOOST_PP_LESS(10, BOOST_PARAMETER_MAX_ARITY)
+#define BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_TAKES_ALL_PARAMS
+#elif BOOST_PP_LESS(4, BOOST_PARAMETER_MAX_ARITY)
+#define BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_TAKES_5_PARAMS
+#endif
+
+namespace boost {
+ namespace detail {
+
+ template <
+ typename PositionIndexMap
+ , typename Dimensions
+ , typename Scale
+ , typename DimensionCount
+ >
+ ::std::size_t
+ count_orthogonal_grid_layout_vertices_impl(
+ PositionIndexMap position_index
+ , Dimensions const& dimensions
+ , Scale const& scale
+ , DimensionCount const&
+ )
+ {
+ ::std::size_t const dim_count = DimensionCount::value;
+ BOOST_STATIC_ASSERT((1 < dim_count));
+
+ ::boost::array< ::std::size_t,dim_count> size;
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ size[dim] = static_cast< ::std::size_t>(
+ dimensions[dim] / scale[dim]
+ );
+ }
+
+ return ::std::accumulate(
+ size.begin()
+ , size.end()
+ , 1
+ , ::std::multiplies< ::std::size_t>()
+ );
+ }
+
+ template <
+ typename VertexIterator
+ , typename EdgeAdder
+ , typename PositionMap
+ , typename PositionIndexMap
+ , typename Dimensions
+ , typename Scale
+ , typename Point
+ , typename DimensionCount
+ , typename PointFactory
+ , typename WraparoundPolicy
+ >
+ void
+ set_orthogonal_grid_layout_impl(
+ VertexIterator v_itr
+ , EdgeAdder edge_adder
+ , bool is_zeta
+ , PositionMap position
+ , PositionIndexMap position_index
+ , Dimensions const& dimensions
+ , Scale const& scale
+ , Point const& origin
+ , DimensionCount const&
+ , PointFactory point_factory
+ , WraparoundPolicy const& wraparound_policy
+ )
+ {
+ typedef typename ::boost::iterator_value<VertexIterator>::type Vertex;
+ ::std::size_t const dim_count = DimensionCount::value;
+ BOOST_STATIC_ASSERT((1 < dim_count));
+ typedef ::boost::multi_array<Vertex,dim_count> VertexArray;
+ typedef typename VertexArray::index VAI;
+ typedef ::boost::array<VAI,dim_count> Index;
+
+ Index size;
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ size[dim] = static_cast< ::std::size_t>(
+ dimensions[dim] / scale[dim]
+ );
+ }
+
+ VertexArray vertex_array(size);
+ ::std::vector<Index> indices(
+ ::std::accumulate(
+ size.begin()
+ , size.end()
+ , 1
+ , ::std::multiplies<VAI>()
+ )
+ );
+ Index index;
+ typename ::std::vector<Index>::iterator i_itr, i_end = indices.end();
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ index[position_index[dim_index]] = 0;
+ }
+
+ for (i_itr = indices.begin(); i_itr != i_end; ++i_itr, ++v_itr)
+ {
+ Point point = point_factory();
+ ::std::size_t dim_index = 0;
+
+ while (dim_index < dim_count)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ point[dim] = scale[dim] * index[dim] + origin[dim];
+ ++dim_index;
+ }
+
+ put(position, vertex_array(*i_itr = index) = *v_itr, point);
+
+ for (
+ ++index[position_index[--dim_index]];
+ dim_index && (
+ index[position_index[dim_index]]
+ == size[position_index[dim_index]]
+ );
+ ++index[position_index[--dim_index]]
+ )
+ {
+ index[position_index[dim_index]] = 0;
+ }
+ }
+
+ if (is_zeta)
+ {
+ ::std::size_t neighbor_count = 1;
+
+ for (::std::size_t dim = 0; dim < dim_count; ++dim)
+ {
+ neighbor_count *= 3;
+ }
+
+ neighbor_count >>= 1;
+
+ for (i_itr = indices.begin(); i_itr != i_end; ++i_itr)
+ {
+ for (::std::size_t neighbor_index = neighbor_count;;)
+ {
+ bool can_add_edge = true, is_not_loop_edge = false;
+ std::size_t neighbor_mod = neighbor_index;
+
+ index = *i_itr;
+
+ for (
+ ::std::size_t dim_index = 0;
+ dim_index < dim_count;
+ ++dim_index
+ )
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ switch (neighbor_mod % 3)
+ {
+ case 0:
+ {
+ if (index[dim])
+ {
+ --index[dim];
+ is_not_loop_edge = true;
+ }
+ else if (wraparound_policy[dim])
+ {
+ index[dim] = size[dim] - 1;
+ is_not_loop_edge = true;
+ }
+ else
+ {
+ can_add_edge = false;
+ }
+
+ break;
+ }
+
+ case 2:
+ {
+ if (++index[dim] == size[dim])
+ {
+ if (wraparound_policy[dim])
+ {
+ index[dim] = 0;
+ is_not_loop_edge = true;
+ }
+ else
+ {
+ can_add_edge = false;
+ }
+ }
+ else
+ {
+ is_not_loop_edge = true;
+ }
+
+ break;
+ }
+ }
+
+ neighbor_mod /= 3;
+ }
+
+ if (can_add_edge && is_not_loop_edge)
+ {
+ edge_adder(vertex_array(*i_itr), vertex_array(index));
+ }
+
+ if (neighbor_index)
+ {
+ --neighbor_index;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ for (i_itr = indices.begin(); i_itr != i_end; ++i_itr)
+ {
+ for (
+ ::std::size_t dim_index = 0;
+ dim_index < dim_count;
+ ++dim_index
+ )
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ index = *i_itr;
+
+ if (++index[dim] == size[dim])
+ {
+ index[dim] = 0;
+
+ if (wraparound_policy[dim])
+ {
+ edge_adder(
+ vertex_array(*i_itr)
+ , vertex_array(index)
+ );
+ }
+ }
+ else
+ {
+ edge_adder(vertex_array(*i_itr), vertex_array(index));
+ }
+ }
+ }
+ }
+ }
+ } // namespace detail
+
+ template <typename T, typename Tag, typename Base>
+ inline ::std::size_t
+ count_orthogonal_grid_layout_vertices(
+ detail::intrusive_layout_params<T,Tag,Base> const& params
+ )
+ {
+ typedef detail::intrusive_layout_params<T,Tag,Base> Params;
+ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(Params, params)
+ typedef typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::position_index_map
+ , identity_property_map
+ >::type
+ PositionIndexMap;
+ typedef typename ::boost::detail::data_type<
+ typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::dimensions
+ >::type
+ >::type
+ Point;
+ typedef typename ::boost::detail::data_type<
+ typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::dimension_count
+ , ::boost::mpl::integral_c< ::std::size_t,2>
+ >::type
+ >::type
+ DimensionCount;
+
+ PositionIndexMap position_index = arg_pack[
+ ::boost::graph::keywords::_position_index_map
+ || value_factory<identity_property_map>()
+ ];
+
+ return detail::count_orthogonal_grid_layout_vertices_impl(
+ position_index
+ , arg_pack[::boost::graph::keywords::_dimensions]
+ , arg_pack[
+ ::boost::graph::keywords::_scale
+ | detail::build_default_scale(
+ arg_pack[
+ ::boost::graph::keywords::_point_factory
+ || value_factory<value_factory<Point> >()
+ ]()
+ , position_index
+ , DimensionCount::value
+ )
+ ]
+ , arg_pack[
+ ::boost::graph::keywords::_dimension_count
+ || value_factory<DimensionCount>()
+ ]
+ );
+ }
+
+#if BOOST_PP_LESS(4, BOOST_PARAMETER_MAX_ARITY)
+ BOOST_PARAMETER_FUNCTION(
+ (::std::size_t)
+ , count_orthogonal_grid_layout_vertices
+ , ::boost::graph::keywords::tag
+ , (required
+ (dimensions, *)
+ )
+ (optional
+ (dimension_count
+ , *
+ , (::boost::mpl::integral_c< ::std::size_t,2>())
+ )
+ (point_factory
+ , *
+ , detail::make_value_factory(dimensions)
+ )
+ (position_index_map
+ , *
+ , identity_property_map()
+ )
+ (scale
+ , *
+ , detail::make_default_scale_ic
+ (dimension_count)(position_index_map)(point_factory())
+ )
+ )
+ )
+ {
+ return detail::count_orthogonal_grid_layout_vertices_impl(
+ position_index_map
+ , dimensions
+ , scale
+ , dimension_count
+ );
+ }
+#endif // 4 < BOOST_PARAMETER_MAX_ARITY
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename T
+ , typename Tag
+ , typename Base
+ >
+ inline void
+ set_orthogonal_grid_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , detail::intrusive_layout_params<T,Tag,Base> const& params
+ )
+ {
+ typedef detail::intrusive_layout_params<T,Tag,Base> Params;
+ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(Params, params)
+ typedef typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::position_index_map
+ , identity_property_map
+ >::type
+ PositionIndexMap;
+ typedef typename ::boost::detail::data_type<
+ typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::dimensions
+ >::type
+ >::type
+ Point;
+ typedef typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::point_factory
+ , value_factory<Point>
+ >::type
+ PointFactory;
+ typedef typename ::boost::detail::data_type<
+ typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::dimension_count
+ , ::boost::mpl::integral_c< ::std::size_t,2>
+ >::type
+ >::type
+ DimensionCount;
+
+ PointFactory point_factory = arg_pack[
+ ::boost::graph::keywords::_point_factory
+ || value_factory<value_factory<Point> >()
+ ];
+ PositionIndexMap position_index = arg_pack[
+ ::boost::graph::keywords::_position_index_map
+ || value_factory<boost::identity_property_map>()
+ ];
+
+ detail::set_orthogonal_grid_layout_impl(
+ vertex_iterator
+ , edge_function
+ , arg_pack[::boost::graph::keywords::_is_zeta | false]
+ , arg_pack[
+ ::boost::graph::keywords::_position_map
+ || value_factory<dummy_property_map>()
+ ]
+ , position_index
+ , arg_pack[::boost::graph::keywords::_dimensions]
+ , arg_pack[
+ ::boost::graph::keywords::_scale
+ | detail::build_default_scale(
+ point_factory()
+ , position_index
+ , DimensionCount::value
+ )
+ ]
+ , arg_pack[
+ ::boost::graph::keywords::_origin
+ | detail::build_default_origin(
+ point_factory()
+ , position_index
+ , DimensionCount::value
+ )
+ ]
+ , arg_pack[
+ ::boost::graph::keywords::_dimension_count
+ || value_factory<DimensionCount>()
+ ]
+ , point_factory
+ , arg_pack[
+ ::boost::graph::keywords::_wraparound_policy
+ | detail::index_predicate<false>()
+ ]
+ );
+ }
+
+#if defined(BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_TAKES_ALL_PARAMS)
+ BOOST_PARAMETER_FUNCTION(
+ (bool)
+ , set_orthogonal_grid_layout
+ , ::boost::graph::keywords::tag
+ , (required
+ (vertex_iterator, *)
+ (edge_function, *)
+ (dimensions, *)
+ )
+ (optional
+ (dimension_count
+ , *
+ , (::boost::mpl::integral_c< ::std::size_t,2>())
+ )
+ (is_zeta
+ , *
+ , false
+ )
+ (wraparound_policy
+ , *
+ , detail::index_predicate<false>()
+ )
+ (point_factory
+ , *
+ , detail::make_value_factory(dimensions)
+ )
+ (position_index_map
+ , *
+ , identity_property_map()
+ )
+ (scale
+ , *
+ , detail::make_default_scale_ic
+ (dimension_count)(position_index_map)(point_factory())
+ )
+ (position_map
+ , *
+ , dummy_property_map()
+ )
+ (origin
+ , *
+ , detail::make_default_origin_ic
+ (dimension_count)(position_index_map)(point_factory())
+ )
+ )
+ )
+ {
+ detail::set_orthogonal_grid_layout_impl(
+ vertex_iterator
+ , edge_function
+ , is_zeta
+ , position_map
+ , position_index_map
+ , dimensions
+ , scale
+ , origin
+ , dimension_count
+ , point_factory
+ , wraparound_policy
+ );
+ return true;
+ }
+#elif defined(BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_TAKES_5_PARAMS)
+ BOOST_PARAMETER_FUNCTION(
+ (bool)
+ , set_orthogonal_grid_layout
+ , ::boost::graph::keywords::tag
+ , (required
+ (vertex_iterator, *)
+ (edge_function, *)
+ (dimensions, *)
+ )
+ (optional
+ (dimension_count
+ , *
+ , (::boost::mpl::integral_c< ::std::size_t,2>())
+ )
+ (is_zeta
+ , *
+ , false
+ )
+ )
+ )
+ {
+ set_orthogonal_grid_layout(
+ vertex_iterator
+ , edge_function
+ , make_intrusive_layout_params().dimensions(
+ dimensions
+ ).dimension_count(
+ dimension_count
+ ).is_zeta(
+ is_zeta
+ )
+ );
+ return true;
+ }
+#endif // BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_TAKES_*_PARAMS
+} // namespace boost
+
+#endif // BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_HPP
+
Added: sandbox/graph-intrusive_layout/boost/graph/set_upsilon_tessel_layout.hpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/boost/graph/set_upsilon_tessel_layout.hpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,535 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_SET_UPSILON_TESSEL_LAYOUT_HPP
+#define BOOST_GRAPH_SET_UPSILON_TESSEL_LAYOUT_HPP
+
+#include <numeric>
+#include <functional>
+#include <vector>
+#include <boost/preprocessor/comparison/less.hpp>
+#include <boost/parameter.hpp>
+#include <boost/parameter/preprocessor.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/functional/value_factory.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/array.hpp>
+#include <boost/multi_array.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/detail/intrusive_layout_params.hpp>
+#include <boost/graph/keywords/dimensions.hpp>
+#include <boost/graph/keywords/edge_function.hpp>
+#include <boost/graph/keywords/has_square_origin.hpp>
+#include <boost/graph/keywords/origin.hpp>
+#include <boost/graph/keywords/point_factory.hpp>
+#include <boost/graph/keywords/position_map.hpp>
+#include <boost/graph/keywords/vertex_centroid_distance.hpp>
+#include <boost/graph/keywords/vertex_iterator.hpp>
+#include <boost/graph/keywords/wraparound_policy.hpp>
+#include <boost/detail/metafunction/data_type.hpp>
+#include <boost/detail/index_predicate.hpp>
+#include <boost/detail/make_value_factory.hpp>
+#include <boost/graph/detail/default_origin.hpp>
+
+#if BOOST_PP_LESS(9, BOOST_PARAMETER_MAX_ARITY)
+#define BOOST_GRAPH_SET_UPSILON_TESSELLATION_LAYOUT_TAKES_ALL_PARAMS
+#elif BOOST_PP_LESS(4, BOOST_PARAMETER_MAX_ARITY)
+#define BOOST_GRAPH_SET_UPSILON_TESSELLATION_LAYOUT_TAKES_5_PARAMS
+#endif
+
+namespace boost {
+ namespace detail {
+
+ template <typename PositionIndexMap, typename Scalar, typename Dimensions>
+ ::std::size_t
+ count_upsilon_tessellation_layout_vertices_impl(
+ PositionIndexMap position_index
+ , Scalar vertex_centroid_distance
+ , Dimensions const& dimensions
+ )
+ {
+ ::std::size_t const dim_count = 2;
+
+ ::boost::array< ::std::size_t,dim_count> size;
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ size[dim] = static_cast< ::std::size_t>(
+ dimensions[dim] / vertex_centroid_distance
+ );
+ }
+
+ return ::std::accumulate(
+ size.begin()
+ , size.end()
+ , 1
+ , ::std::multiplies< ::std::size_t>()
+ );
+ }
+
+ template <
+ typename VertexIterator
+ , typename EdgeAdder
+ , typename PositionMap
+ , typename PositionIndexMap
+ , typename Scalar
+ , typename Dimensions
+ , typename Point
+ , typename PointFactory
+ , typename WraparoundPolicy
+ >
+ void
+ set_upsilon_tessellation_layout_impl(
+ VertexIterator v_itr
+ , EdgeAdder edge_adder
+ , bool has_square_origin
+ , PositionMap position
+ , PositionIndexMap position_index
+ , Scalar vertex_centroid_distance
+ , Dimensions const& dimensions
+ , Point const& origin
+ , PointFactory point_factory
+ , WraparoundPolicy const& wraparound_policy
+ )
+ {
+ typedef typename ::boost::iterator_value<VertexIterator>::type Vertex;
+ ::std::size_t const dim_count = 2;
+ typedef ::boost::multi_array<Vertex,dim_count> VertexArray;
+ typedef typename VertexArray::index VAI;
+ typedef ::boost::array<VAI,dim_count> Index;
+
+ Index size;
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ size[dim] = static_cast< ::std::size_t>(
+ dimensions[dim] / vertex_centroid_distance
+ );
+ }
+
+ VertexArray vertex_array(size);
+ ::std::vector<Index> indices(
+ ::std::accumulate(
+ size.begin()
+ , size.end()
+ , 1
+ , ::std::multiplies<VAI>()
+ )
+ );
+ Index index;
+ typename ::std::vector<Index>::iterator i_itr, i_end = indices.end();
+
+ for (::std::size_t dim_index = 0; dim_index < dim_count; ++dim_index)
+ {
+ index[position_index[dim_index]] = 0;
+ }
+
+ for (i_itr = indices.begin(); i_itr != i_end; ++i_itr, ++v_itr)
+ {
+ Point point = point_factory();
+ ::std::size_t dim_index = 0;
+
+ while (dim_index < dim_count)
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ point[dim] = (
+ vertex_centroid_distance * index[dim] + origin[dim]
+ );
+ ++dim_index;
+ }
+
+ put(position, vertex_array(*i_itr = index) = *v_itr, point);
+
+ for (
+ ++index[position_index[--dim_index]];
+ dim_index && (
+ index[position_index[dim_index]]
+ == size[position_index[dim_index]]
+ );
+ ++index[position_index[--dim_index]]
+ )
+ {
+ index[position_index[dim_index]] = 0;
+ }
+ }
+
+ ::std::size_t neighbor_count = 1;
+
+ for (::std::size_t dim = 0; dim < dim_count; ++dim)
+ {
+ neighbor_count *= 3;
+ }
+
+ neighbor_count >>= 1;
+
+ for (i_itr = indices.begin(); i_itr != i_end; ++i_itr)
+ {
+ if (
+ (
+ ::std::accumulate(
+ i_itr->begin()
+ , i_itr->end()
+ , 0
+ , ::std::plus<VAI>()
+ ) & 1
+ )
+ == (has_square_origin ? 1 : 0)
+ )
+ {
+ for (::std::size_t neighbor_index = neighbor_count;;)
+ {
+ bool can_add_edge = true;
+ ::std::size_t change_count = 0;
+ ::std::size_t neighbor_mod = neighbor_index;
+
+ index = *i_itr;
+
+ for (
+ ::std::size_t dim_index = 0;
+ dim_index < dim_count;
+ ++dim_index
+ )
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ switch (neighbor_mod % 3)
+ {
+ case 2:
+ {
+ if (index[dim])
+ {
+ --index[dim];
+ ++change_count;
+ }
+ else if (wraparound_policy[dim])
+ {
+ index[dim] = size[dim] - 1;
+ ++change_count;
+ }
+ else
+ {
+ can_add_edge = false;
+ }
+
+ break;
+ }
+
+ case 0:
+ {
+ if (++index[dim] == size[dim])
+ {
+ if (wraparound_policy[dim])
+ {
+ index[dim] = 0;
+ ++change_count;
+ }
+ else
+ {
+ can_add_edge = false;
+ }
+ }
+ else
+ {
+ ++change_count;
+ }
+
+ break;
+ }
+ }
+
+ neighbor_mod /= 3;
+ }
+
+ if (can_add_edge)
+ {
+ switch (change_count)
+ {
+ case 0:
+ can_add_edge = false;
+ case 1:
+ break;
+ default:
+ can_add_edge = (
+ (
+ ::std::accumulate(
+ index.begin()
+ , index.end()
+ , 0
+ , ::std::plus<VAI>()
+ ) & 1
+ )
+ == (has_square_origin ? 1 : 0)
+ );
+ }
+ }
+
+ if (can_add_edge)
+ {
+ edge_adder(vertex_array(*i_itr), vertex_array(index));
+ }
+
+ if (neighbor_index)
+ {
+ --neighbor_index;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+ for (
+ ::std::size_t dim_index = 0;
+ dim_index < dim_count;
+ ++dim_index
+ )
+ {
+ ::std::size_t const dim = position_index[dim_index];
+
+ index = *i_itr;
+
+ if (++index[dim] == size[dim])
+ {
+ if (wraparound_policy[dim] && !(size[dim] & 1))
+ {
+ index[dim] = 0;
+ edge_adder(
+ vertex_array(*i_itr)
+ , vertex_array(index)
+ );
+ }
+ }
+ else
+ {
+ edge_adder(vertex_array(*i_itr), vertex_array(index));
+ }
+ }
+ }
+ }
+ }
+ } // namespace detail
+
+ template <typename T, typename Tag, typename Base>
+ inline ::std::size_t
+ count_upsilon_tessellation_layout_vertices(
+ detail::intrusive_layout_params<T,Tag,Base> const& params
+ )
+ {
+ typedef detail::intrusive_layout_params<T,Tag,Base> Params;
+ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(Params, params)
+ return detail::count_upsilon_tessellation_layout_vertices_impl(
+ arg_pack[
+ ::boost::graph::keywords::_position_index_map
+ || value_factory<identity_property_map>()
+ ]
+ , arg_pack[::boost::graph::keywords::_vertex_centroid_distance | 1]
+ , arg_pack[::boost::graph::keywords::_dimensions]
+ );
+ }
+
+#if BOOST_PP_LESS(2, BOOST_PARAMETER_MAX_ARITY)
+ BOOST_PARAMETER_FUNCTION(
+ (::std::size_t)
+ , count_upsilon_tessellation_layout_vertices
+ , ::boost::graph::keywords::tag
+ , (required
+ (dimensions, *)
+ )
+ (optional
+ (vertex_centroid_distance
+ , *
+ , 1
+ )
+ (position_index_map
+ , *
+ , identity_property_map()
+ )
+ )
+ )
+ {
+ return detail::count_upsilon_tessellation_layout_vertices_impl(
+ position_index_map
+ , vertex_centroid_distance
+ , dimensions
+ );
+ }
+#endif // 2 < BOOST_PARAMETER_MAX_ARITY
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename T
+ , typename Tag
+ , typename Base
+ >
+ inline void
+ set_upsilon_tessellation_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , detail::intrusive_layout_params<T,Tag,Base> const& params
+ )
+ {
+ typedef detail::intrusive_layout_params<T,Tag,Base> Params;
+ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(Params, params)
+ typedef typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::position_index_map
+ , identity_property_map
+ >::type
+ PositionIndexMap;
+ typedef typename ::boost::detail::data_type<
+ typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::dimensions
+ >::type
+ >::type
+ Point;
+ typedef typename ::boost::parameter::binding<
+ arg_pack_type
+ , ::boost::graph::keywords::tag::point_factory
+ , value_factory<Point>
+ >::type
+ PointFactory;
+
+ PointFactory point_factory = arg_pack[
+ ::boost::graph::keywords::_point_factory
+ || value_factory<value_factory<Point> >()
+ ];
+ PositionIndexMap position_index = arg_pack[
+ ::boost::graph::keywords::_position_index_map
+ || value_factory<identity_property_map>()
+ ];
+
+ detail::set_upsilon_tessellation_layout_impl(
+ vertex_iterator
+ , edge_function
+ , arg_pack[::boost::graph::keywords::_has_square_origin | false]
+ , arg_pack[
+ ::boost::graph::keywords::_position_map
+ || value_factory<dummy_property_map>()
+ ]
+ , position_index
+ , arg_pack[::boost::graph::keywords::_vertex_centroid_distance | 1]
+ , arg_pack[::boost::graph::keywords::_dimensions]
+ , arg_pack[
+ ::boost::graph::keywords::_origin
+ | detail::build_default_origin(
+ point_factory()
+ , position_index
+ , 2
+ )
+ ]
+ , point_factory
+ , arg_pack[
+ ::boost::graph::keywords::_wraparound_policy
+ | detail::index_predicate<false>()
+ ]
+ );
+ }
+
+#if defined(BOOST_GRAPH_SET_UPSILON_TESSELLATION_LAYOUT_TAKES_ALL_PARAMS)
+ BOOST_PARAMETER_FUNCTION(
+ (bool)
+ , set_upsilon_tessellation_layout
+ , ::boost::graph::keywords::tag
+ , (required
+ (vertex_iterator, *)
+ (edge_function, *)
+ (dimensions, *)
+ )
+ (optional
+ (vertex_centroid_distance
+ , *
+ , 1
+ )
+ (has_square_origin
+ , *
+ , false
+ )
+ (wraparound_policy
+ , *
+ , detail::index_predicate<false>()
+ )
+ (point_factory
+ , *
+ , detail::make_value_factory(dimensions)
+ )
+ (position_index_map
+ , *
+ , identity_property_map()
+ )
+ (position_map
+ , *
+ , dummy_property_map()
+ )
+ (origin
+ , *
+ , detail::make_default_origin
+ (2)(position_index_map)(point_factory())
+ )
+ )
+ )
+ {
+ detail::set_upsilon_tessellation_layout_impl(
+ vertex_iterator
+ , edge_function
+ , has_square_origin
+ , position_map
+ , position_index_map
+ , vertex_centroid_distance
+ , dimensions
+ , origin
+ , point_factory
+ , wraparound_policy
+ );
+ return true;
+ }
+#elif defined(BOOST_GRAPH_SET_UPSILON_TESSELLATION_LAYOUT_TAKES_5_PARAMS)
+ BOOST_PARAMETER_FUNCTION(
+ (bool)
+ , set_upsilon_tessellation_layout
+ , ::boost::graph::keywords::tag
+ , (required
+ (vertex_iterator, *)
+ (edge_function, *)
+ (dimensions, *)
+ )
+ (optional
+ (vertex_centroid_distance
+ , *
+ , 1
+ )
+ (has_square_origin
+ , *
+ , false
+ )
+ )
+ )
+ {
+ set_upsilon_tessellation_layout(
+ vertex_iterator
+ , edge_function
+ , make_intrusive_layout_params().dimensions(
+ dimensions
+ ).vertex_centroid_distance(
+ vertex_centroid_distance
+ ).has_square_origin(
+ has_square_origin
+ )
+ );
+ return true;
+ }
+#endif // BOOST_GRAPH_SET_UPSILON_TESSELLATION_LAYOUT_TAKES_*_PARAMS
+} // namespace boost
+
+#endif // BOOST_GRAPH_SET_UPSILON_TESSEL_LAYOUT_HPP
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/Jamroot
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/Jamroot 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,29 @@
+project html ;
+import boostbook : boostbook ;
+using quickbook ;
+
+xml intrusive_layout
+ :
+ intrusive_layout.qbk
+ ;
+boostbook quickbook
+ :
+ intrusive_layout
+ :
+ <xsl:param>admon.graphics.path=doc/images/
+ <xsl:param>navig.graphics.path=doc/images/
+ <xsl:param>boost.root=http://www.boost.org
+ <xsl:param>boost.libraries=http://www.boost.org/libs/libraries.htm
+ <xsl:param>boost.image.src=../../boost.png
+ <xsl:param>boost.image.alt="C++ Boost"
+ <xsl:param>boost.image.w=277
+ <xsl:param>boost.image.h=86
+ <xsl:param>html.stylesheet=doc/boostbook.css
+ <xsl:param>nav.layout=none
+ <xsl:param>chunk.section.depth=1
+ <xsl:param>chunk.first.sections=1
+ <xsl:param>generate.section.toc.level=0
+ <xsl:param>toc.section.depth=0
+ <xsl:param>toc.max.depth=0
+ ;
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/basic_add_edge_function.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/basic_add_edge_function.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,349 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>basic_add_edge_function</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="basic_vert_insert_iterator.html" title="basic_vertex_insert_iterator">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="basic_vert_insert_iterator.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.basic_add_edge_function"></a><a class="link" href="basic_add_edge_function.html" title="basic_add_edge_function"><code class="computeroutput"><span class="identifier">basic_add_edge_function</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_add_edge_function.synopsis"></a><a class="link" href="basic_add_edge_function.html#index.basic_add_edge_function.synopsis" title="Synopsis">Synopsis</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Graph</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">Is2Way</span><span class="special">></span>
+ <span class="keyword">class</span> <span class="identifier">basic_add_edge_function</span>
+ <span class="special">{</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">explicit</span> <span class="identifier">basic_add_edge_function</span><span class="special">(</span><span class="identifier">Graph</span><span class="special">&</span> <span class="identifier">graph</span><span class="special">);</span>
+
+ <span class="keyword">void</span>
+ <span class="keyword">operator</span><span class="special">()(</span>
+ <span class="keyword">typename</span> <span class="identifier">graph_traits</span><span class="special"><</span><span class="identifier">Graph</span><span class="special">>::</span><span class="identifier">vertex_descriptor</span> <span class="identifier">u</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">graph_traits</span><span class="special"><</span><span class="identifier">Graph</span><span class="special">>::</span><span class="identifier">vertex_descriptor</span> <span class="identifier">v</span>
+ <span class="special">);</span>
+ <span class="special">};</span>
+
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Graph</span><span class="special">></span>
+ <span class="identifier">basic_add_edge_function</span><span class="special"><</span><span class="identifier">Graph</span><span class="special">,</span><span class="keyword">true</span><span class="special">></span> <span class="identifier">basic_2way_edge_adder</span><span class="special">(</span><span class="identifier">Graph</span><span class="special">&</span> <span class="identifier">graph</span><span class="special">);</span>
+
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Graph</span><span class="special">></span>
+ <span class="identifier">basic_add_edge_function</span><span class="special"><</span><span class="identifier">Graph</span><span class="special">,</span><span class="keyword">false</span><span class="special">></span> <span class="identifier">basic_edge_adder</span><span class="special">(</span><span class="identifier">Graph</span><span class="special">&</span> <span class="identifier">graph</span><span class="special">);</span>
+
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_add_edge_function.description"></a><a class="link" href="basic_add_edge_function.html#index.basic_add_edge_function.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ This simple function object type allows layout algorithms to indicate which
+ vertices should be neighbors without having to modify the underlying graph
+ structure themselves. It will serve your needs if the graph does not possess
+ any internal edge property maps, or if the edge properties can be initialized
+ later on.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_add_edge_function.definition"></a><a class="link" href="basic_add_edge_function.html#index.basic_add_edge_function.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/basic_add_edge_function.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_add_edge_function.tpl_param"></a><a class="link" href="basic_add_edge_function.html#index.basic_add_edge_function.tpl_param" title="Template Parameters">Template Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Requirements
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Graph</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The type of graph to whom this function object will add edges.
+ </p>
+ </td>
+<td>
+ <p>
+ It must model the Mutable Graph concept.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Is2Way</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A boolean constant that controls whether or not the input vertices
+ will be biconnected. If <code class="computeroutput"><span class="identifier">Graph</span></code>
+ is undirected, then adjacent vertices will be biconnected anyway,
+ but it makes a difference for directed graphs.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="index.basic_add_edge_function.tpl_param.model_of"></a><a class="link" href="basic_add_edge_function.html#index.basic_add_edge_function.tpl_param.model_of" title="Model of">Model
+ of</a>
+</h4></div></div></div>
+<p>
+ Binary Function
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="index.basic_add_edge_function.tpl_param.public_bases"></a><a class="link" href="basic_add_edge_function.html#index.basic_add_edge_function.tpl_param.public_bases" title="Public Base Classes">Public
+ Base Classes</a>
+</h4></div></div></div>
+<p>
+ None.
+ </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">graph</span></code></span></dt>
+<dd><p>
+ An object of type <code class="computeroutput"><span class="identifier">Graph</span></code>.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">f</span></code></span></dt>
+<dd><p>
+ An object of type <code class="computeroutput"><span class="identifier">basic_add_edge_function</span></code>.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">u</span></code>, <code class="computeroutput"><span class="identifier">v</span></code></span></dt>
+<dd><p>
+ Objects of type <code class="literal">graph_traits<Graph>::vertex_descriptor</code>.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_add_edge_function.members"></a><a class="link" href="basic_add_edge_function.html#index.basic_add_edge_function.members" title="Members">Members</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Expression
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Constructor
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">basic_add_edge_function</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructs a new <code class="computeroutput"><span class="identifier">basic_add_edge_function</span></code>
+ object that will add edges to the specified graph.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Function call operator
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">f</span><span class="special">(</span><span class="identifier">u</span><span class="special">,</span>
+ <span class="identifier">v</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Calls <code class="literal">add_edge(u,
+ v)</code>. If <code class="computeroutput"><span class="identifier">Is2Way</span></code>
+ is <code class="computeroutput"><span class="keyword">true</span></code> and the graph
+ is directed, also calls <code class="literal">add_edge(v,
+ u)</code>.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_add_edge_function.non_members"></a><a class="link" href="basic_add_edge_function.html#index.basic_add_edge_function.non_members" title="Non-members">Non-members</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Expression
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Two-way construction function
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">basic_2way_edge_adder</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructs and returns a new <code class="computeroutput"><span class="identifier">basic_add_edge_function</span></code>
+ object that will add two-way edges to the specified graph.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ One-way construction function
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">basic_edge_adder</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructs and returns a new <code class="computeroutput"><span class="identifier">basic_add_edge_function</span></code>
+ object that will add one-way edges to the specified graph.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="basic_vert_insert_iterator.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/basic_add_edge_function.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/basic_add_edge_function.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,111 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:basic_add_edge_function `basic_add_edge_function`]
+
+[section Synopsis]
+[reference__basic_add_edge_function__definition]
+[reference__basic_2way_edge_adder__prototype]
+[reference__basic_edge_adder__prototype]
+[endsect]
+
+[section Description]
+This simple function object type allows layout algorithms to indicate which
+vertices should be neighbors without having to modify the underlying graph
+structure themselves. It will serve your needs if the graph does not possess
+any internal edge property maps, or if the edge properties can be initialized
+later on.
+[endsect]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_basic_add_edge_function_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+ [[Parameter][Description][Requirements]]
+ [
+ [`Graph`]
+ [The type of graph to whom this function object will add edges.]
+ [It must model the __Mutable_Graph__ concept.]
+ ]
+ [
+ [`Is2Way`]
+ [
+ A boolean constant that controls whether or not the input vertices
+ will be biconnected. If `Graph` is undirected, then adjacent
+ vertices will be biconnected anyway, but it makes a difference for
+ directed graphs.
+ ]
+ []
+ ]
+]
+
+[section:model_of Model of]
+__Binary_Function__
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[variablelist Notation
+ [[`graph`][An object of type `Graph`.]]
+ [[`f`][An object of type `basic_add_edge_function`.]]
+ [[`u`, `v`][Objects of type [^_graph_traits_<Graph>::vertex_descriptor].]]
+]
+[endsect]
+
+[section Members]
+[table
+ [[Name][Expression][Description]]
+ [
+ [Constructor]
+ [`basic_add_edge_function(graph)`]
+ [
+ Constructs a new `basic_add_edge_function` object that will add
+ edges to the specified graph.
+ ]
+ ]
+ [
+ [Function call operator]
+ [`f(u, v)`]
+ [
+ Calls [^_add_edge_(u, v)]. If `Is2Way` is `true` and the graph is
+ directed, also calls [^_add_edge_(v, u)].
+ ]
+ ]
+]
+[endsect]
+
+[section Non-members]
+[table
+ [[Name][Expression][Description]]
+ [
+ [Two-way construction function]
+ [`basic_2way_edge_adder(graph)`]
+ [
+ Constructs and returns a new `basic_add_edge_function` object that
+ will add two-way edges to the specified graph.
+ ]
+ ]
+ [
+ [One-way construction function]
+ [`basic_edge_adder(graph)`]
+ [
+ Constructs and returns a new `basic_add_edge_function` object that
+ will add one-way edges to the specified graph.
+ ]
+ ]
+]
+[endsect]
+
+[endsect] [/ basic_add_edge_function]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/basic_vert_insert_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/basic_vert_insert_iterator.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,332 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>basic_vertex_insert_iterator</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="count_bitset_grid_verts.html" title="count_bitset_grid_layout_vertices">
+<link rel="next" href="basic_add_edge_function.html" title="basic_add_edge_function">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="count_bitset_grid_verts.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="basic_add_edge_function.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.basic_vert_insert_iterator"></a><a class="link" href="basic_vert_insert_iterator.html" title="basic_vertex_insert_iterator"><code class="computeroutput"><span class="identifier">basic_vertex_insert_iterator</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_vert_insert_iterator.synopsis"></a><a class="link" href="basic_vert_insert_iterator.html#index.basic_vert_insert_iterator.synopsis" title="Synopsis">Synopsis</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Graph</span><span class="special">></span>
+ <span class="keyword">class</span> <span class="identifier">basic_vertex_insert_iterator</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_facade</span><span class="special"><</span>
+ <span class="identifier">basic_vertex_insert_iterator</span><span class="special"><</span><span class="identifier">Graph</span><span class="special">></span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">graph_traits</span><span class="special"><</span><span class="identifier">Graph</span><span class="special">>::</span><span class="identifier">vertex_descriptor</span>
+ <span class="special">,</span> <span class="identifier">forward_traversal_tag</span>
+ <span class="special">></span>
+ <span class="special">{</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">explicit</span> <span class="identifier">basic_vertex_insert_iterator</span><span class="special">(</span><span class="identifier">Graph</span><span class="special">&</span> <span class="identifier">graph</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OtherGraph</span><span class="special">></span>
+ <span class="identifier">basic_vertex_insert_iterator</span><span class="special">(</span>
+ <span class="identifier">basic_vertex_insert_iterator</span><span class="special"><</span><span class="identifier">OtherGraph</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+ <span class="special">);</span>
+
+ <span class="special">};</span>
+
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Graph</span><span class="special">></span>
+ <span class="identifier">basic_vertex_insert_iterator</span><span class="special"><</span><span class="identifier">Graph</span><span class="special">></span> <span class="identifier">basic_vertex_inserter</span><span class="special">(</span><span class="identifier">Graph</span><span class="special">&</span> <span class="identifier">graph</span><span class="special">);</span>
+
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_vert_insert_iterator.description"></a><a class="link" href="basic_vert_insert_iterator.html#index.basic_vert_insert_iterator.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ Since some popular graph types provide a <code class="computeroutput"><span class="identifier">clear</span><span class="special">()</span></code> member function but not a <code class="computeroutput"><span class="identifier">resize</span><span class="special">()</span></code>
+ member function, it may not be possible to reserve enough vertices for layout
+ algorithms to work in some cases. This iterator facade enables the layout
+ algorithms to add vertices on the fly. It will serve your needs if the graph
+ does not possess any internal vertex property maps, or if the vertex properties
+ can be initialized later on.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_vert_insert_iterator.definition"></a><a class="link" href="basic_vert_insert_iterator.html#index.basic_vert_insert_iterator.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/basic_vert_insert_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_vert_insert_iterator.tpl_param"></a><a class="link" href="basic_vert_insert_iterator.html#index.basic_vert_insert_iterator.tpl_param" title="Template Parameters">Template
+ Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Requirements
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Graph</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The type of the graph to whom this iterator will add vertices.
+ </p>
+ </td>
+<td>
+ <p>
+ It must model the Mutable Graph concept.
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="index.basic_vert_insert_iterator.tpl_param.model_of"></a><a class="link" href="basic_vert_insert_iterator.html#index.basic_vert_insert_iterator.tpl_param.model_of" title="Model of">Model
+ of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> Readable Iterator
+<span class="special">*</span> Incrementable Iterator
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="index.basic_vert_insert_iterator.tpl_param.public_bases"></a><a class="link" href="basic_vert_insert_iterator.html#index.basic_vert_insert_iterator.tpl_param.public_bases" title="Public Base Classes">Public
+ Base Classes</a>
+</h4></div></div></div>
+<p>
+ iterator_facade
+ </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">graph</span></code></span></dt>
+<dd><p>
+ An object of type <code class="computeroutput"><span class="identifier">Graph</span></code>.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">itr</span></code></span></dt>
+<dd><p>
+ An object of type <code class="computeroutput"><span class="identifier">basic_vertex_insert_iterator</span></code>.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_vert_insert_iterator.members"></a><a class="link" href="basic_vert_insert_iterator.html#index.basic_vert_insert_iterator.members" title="Members">Members</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Expression
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Constructor
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">basic_vertex_insert_iterator</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructs a new <code class="computeroutput"><span class="identifier">basic_vertex_insert_iterator</span></code>
+ object that will add vertices to the specified graph.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Dereference operator
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="special">*</span><span class="identifier">itr</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Adds a new vertex to the graph, then returns the representative
+ vertex descriptor.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Pre-increment operator
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="special">++</span><span class="identifier">itr</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ No-op.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Post-increment operator
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">itr</span><span class="special">++</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ No-op.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.basic_vert_insert_iterator.non_members"></a><a class="link" href="basic_vert_insert_iterator.html#index.basic_vert_insert_iterator.non_members" title="Non-members">Non-members</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Expression
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Construction function
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">basic_vertex_inserter</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructs and returns a new <code class="computeroutput"><span class="identifier">basic_vertex_insert_iterator</span></code>
+ object that will add vertices to the specified graph.
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="count_bitset_grid_verts.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="basic_add_edge_function.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/basic_vert_insert_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/basic_vert_insert_iterator.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,105 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:basic_vert_insert_iterator `basic_vertex_insert_iterator`]
+
+[section Synopsis]
+[reference__basic_vertex_insert_iterator__definition]
+[reference__basic_vertex_inserter__prototype]
+[endsect]
+
+[section Description]
+Since some popular graph types provide a `clear()` member function but not a
+`resize()` member function, it may not be possible to reserve enough vertices
+for layout algorithms to work in some cases. This iterator facade enables the
+layout algorithms to add vertices on the fly. It will serve your needs if the
+graph does not possess any internal vertex property maps, or if the vertex
+properties can be initialized later on.
+[endsect]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_basic_vert_insert_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+ [[Parameter][Description][Requirements]]
+ [
+ [`Graph`]
+ [The type of the graph to whom this iterator will add vertices.]
+ [It must model the __Mutable_Graph__ concept.]
+ ]
+]
+
+[section:model_of Model of]
+
+ * __Readable_Iterator__
+ * __Incrementable_Iterator__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+__iterator_facade__
+[endsect]
+
+[variablelist Notation
+ [[`graph`][An object of type `Graph`.]]
+ [[`itr`][An object of type `basic_vertex_insert_iterator`.]]
+]
+[endsect]
+
+[section Members]
+[table
+ [[Name][Expression][Description]]
+ [
+ [Constructor]
+ [`basic_vertex_insert_iterator(graph)`]
+ [
+ Constructs a new `basic_vertex_insert_iterator` object that will
+ add vertices to the specified graph.
+ ]
+ ]
+ [
+ [Dereference operator]
+ [`*itr`]
+ [
+ Adds a new vertex to the graph, then returns the representative
+ __vertex_descriptor__.
+ ]
+ ]
+ [
+ [Pre-increment operator]
+ [`++itr`]
+ [No-op.]
+ ]
+ [
+ [Post-increment operator]
+ [`itr++`]
+ [No-op.]
+ ]
+]
+[endsect]
+
+[section Non-members]
+[table
+ [[Name][Expression][Description]]
+ [
+ [Construction function]
+ [`basic_vertex_inserter(graph)`]
+ [
+ Constructs and returns a new `basic_vertex_insert_iterator` object
+ that will add vertices to the specified graph.
+ ]
+ ]
+]
+[endsect]
+
+[endsect] [/ basic_vertex_insert_iterator]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/boostbook.css
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/boostbook.css 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,588 @@
+/*=============================================================================
+ Copyright (c) 2004 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompany-
+ ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+/*=============================================================================
+ Body defaults
+=============================================================================*/
+
+ body
+ {
+ margin: 1em;
+ font-family: sans-serif;
+ }
+
+/*=============================================================================
+ Paragraphs
+=============================================================================*/
+
+ p
+ {
+ text-align: left;
+ font-size: 10pt;
+ line-height: 1.15;
+ }
+
+/*=============================================================================
+ Program listings
+=============================================================================*/
+
+ /* Code on paragraphs */
+ p tt.computeroutput
+ {
+ font-size: 9pt;
+ }
+
+ pre.synopsis
+ {
+ font-size: 90%;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ .programlisting,
+ .screen
+ {
+ font-size: 9pt;
+ display: block;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ /* Program listings in tables don't get borders */
+ td .programlisting,
+ td .screen
+ {
+ margin: 0pc 0pc 0pc 0pc;
+ padding: 0pc 0pc 0pc 0pc;
+ }
+
+/*=============================================================================
+ Headings
+=============================================================================*/
+
+ h1, h2, h3, h4, h5, h6
+ {
+ text-align: left;
+ margin: 1em 0em 0.5em 0em;
+ font-weight: bold;
+ }
+
+ h1 { font: 140% }
+ h2 { font: bold 140% }
+ h3 { font: bold 130% }
+ h4 { font: bold 120% }
+ h5 { font: italic 110% }
+ h6 { font: italic 100% }
+
+ /* Top page titles */
+ title,
+ h1.title,
+ h2.title
+ h3.title,
+ h4.title,
+ h5.title,
+ h6.title,
+ .refentrytitle
+ {
+ font-weight: bold;
+ margin-bottom: 1pc;
+ }
+
+ h1.title { font-size: 140% }
+ h2.title { font-size: 140% }
+ h3.title { font-size: 130% }
+ h4.title { font-size: 120% }
+ h5.title { font-size: 110% }
+ h6.title { font-size: 100% }
+
+ .section h1
+ {
+ margin: 0em 0em 0.5em 0em;
+ font-size: 140%;
+ }
+
+ .section h2 { font-size: 140% }
+ .section h3 { font-size: 130% }
+ .section h4 { font-size: 120% }
+ .section h5 { font-size: 110% }
+ .section h6 { font-size: 100% }
+
+ /* Code on titles */
+ h1 tt.computeroutput { font-size: 140% }
+ h2 tt.computeroutput { font-size: 140% }
+ h3 tt.computeroutput { font-size: 130% }
+ h4 tt.computeroutput { font-size: 120% }
+ h5 tt.computeroutput { font-size: 110% }
+ h6 tt.computeroutput { font-size: 100% }
+
+/*=============================================================================
+ Author
+=============================================================================*/
+
+ h3.author
+ {
+ font-size: 100%
+ }
+
+/*=============================================================================
+ Lists
+=============================================================================*/
+
+ li
+ {
+ font-size: 10pt;
+ line-height: 1.3;
+ }
+
+ /* Unordered lists */
+ ul
+ {
+ text-align: left;
+ }
+
+ /* Ordered lists */
+ ol
+ {
+ text-align: left;
+ }
+
+/*=============================================================================
+ Links
+=============================================================================*/
+
+ a
+ {
+ text-decoration: none; /* no underline */
+ }
+
+ a:hover
+ {
+ text-decoration: underline;
+ }
+
+/*=============================================================================
+ Spirit style navigation
+=============================================================================*/
+
+ .spirit-nav
+ {
+ text-align: right;
+ }
+
+ .spirit-nav a
+ {
+ color: white;
+ padding-left: 0.5em;
+ }
+
+ .spirit-nav img
+ {
+ border-width: 0px;
+ }
+
+/*=============================================================================
+ Copyright footer
+=============================================================================*/
+ .copyright-footer
+ {
+ text-align: right;
+ font-size: 70%;
+ }
+
+ .copyright-footer p
+ {
+ text-align: right;
+ font-size: 80%;
+ }
+
+/*=============================================================================
+ Table of contents
+=============================================================================*/
+
+ .toc
+ {
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.1pc 1pc 0.1pc 1pc;
+ font-size: 80%;
+ line-height: 1.15;
+ }
+
+ .boost-toc
+ {
+ float: right;
+ padding: 0.5pc;
+ }
+
+/*=============================================================================
+ Tables
+=============================================================================*/
+
+ .table-title,
+ div.table p.title
+ {
+ margin-left: 4%;
+ padding-right: 0.5em;
+ padding-left: 0.5em;
+ }
+
+ .informaltable table,
+ .table table
+ {
+ width: 92%;
+ margin-left: 4%;
+ margin-right: 4%;
+ }
+
+ div.informaltable table,
+ div.table table
+ {
+ padding: 4px;
+ }
+
+ /* Table Cells */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ padding: 0.5em;
+ text-align: left;
+ font-size: 9pt;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ padding: 0.5em 0.5em 0.5em 0.5em;
+ border: 1pt solid white;
+ font-size: 80%;
+ }
+
+ table.simplelist
+ {
+ width: auto !important;
+ margin: 0em !important;
+ padding: 0em !important;
+ border: none !important;
+ }
+ table.simplelist td
+ {
+ margin: 0em !important;
+ padding: 0em !important;
+ text-align: left !important;
+ font-size: 9pt !important;
+ border: none !important;
+ }
+
+/*=============================================================================
+ Blurbs
+=============================================================================*/
+
+ div.note,
+ div.tip,
+ div.important,
+ div.caution,
+ div.warning,
+ p.blurb
+ {
+ font-size: 9pt; /* A little bit smaller than the main text */
+ line-height: 1.2;
+ display: block;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ p.blurb img
+ {
+ padding: 1pt;
+ }
+
+/*=============================================================================
+ Variable Lists
+=============================================================================*/
+
+ /* Make the terms in definition lists bold */
+ div.variablelist dl dt,
+ span.term
+ {
+ font-weight: bold;
+ font-size: 10pt;
+ }
+
+ div.variablelist table tbody tr td
+ {
+ text-align: left;
+ vertical-align: top;
+ padding: 0em 2em 0em 0em;
+ font-size: 10pt;
+ margin: 0em 0em 0.5em 0em;
+ line-height: 1;
+ }
+
+ div.variablelist dl dt
+ {
+ margin-bottom: 0.2em;
+ }
+
+ div.variablelist dl dd
+ {
+ margin: 0em 0em 0.5em 2em;
+ font-size: 10pt;
+ }
+
+ div.variablelist table tbody tr td p,
+ div.variablelist dl dd p
+ {
+ margin: 0em 0em 0.5em 0em;
+ line-height: 1;
+ }
+
+/*=============================================================================
+ Misc
+=============================================================================*/
+
+ /* Title of books and articles in bibliographies */
+ span.title
+ {
+ font-style: italic;
+ }
+
+ span.underline
+ {
+ text-decoration: underline;
+ }
+
+ span.strikethrough
+ {
+ text-decoration: line-through;
+ }
+
+ /* Copyright, Legal Notice */
+ div div.legalnotice p
+ {
+ text-align: left
+ }
+
+/*=============================================================================
+ Colors
+=============================================================================*/
+
+ @media screen
+ {
+ body {
+ background-color: #FFFFFF;
+ }
+
+ /* Links */
+ a
+ {
+ color: #005a9c;
+ }
+
+ a:visited
+ {
+ color: #9c5a9c;
+ }
+
+ h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
+ h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
+ h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
+ {
+ text-decoration: none; /* no underline */
+ color: #000000;
+ }
+
+ /* Syntax Highlighting */
+ .keyword { color: #0000AA; }
+ .identifier { color: #000000; }
+ .special { color: #707070; }
+ .preprocessor { color: #402080; }
+ .char { color: teal; }
+ .comment { color: #800000; }
+ .string { color: teal; }
+ .number { color: teal; }
+ .white_bkd { background-color: #FFFFFF; }
+ .dk_grey_bkd { background-color: #999999; }
+
+ /* Copyright, Legal Notice */
+ .copyright
+ {
+ color: #666666;
+ font-size: small;
+ }
+
+ div div.legalnotice p
+ {
+ color: #666666;
+ }
+
+ /* Program listing */
+ pre.synopsis
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ .programlisting,
+ .screen
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ td .programlisting,
+ td .screen
+ {
+ border: 0px solid #DCDCDC;
+ }
+
+ /* Blurbs */
+ div.note,
+ div.tip,
+ div.important,
+ div.caution,
+ div.warning,
+ p.blurb
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ /* Table of contents */
+ .toc
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ /* Tables */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ background-color: #F0F0F0;
+ border: 1px solid #DCDCDC;
+ }
+
+ .copyright-footer
+ {
+ color: #8F8F8F;
+ }
+
+ /* Misc */
+ span.highlight
+ {
+ color: #00A000;
+ }
+ }
+
+ @media print
+ {
+ /* Links */
+ a
+ {
+ color: black;
+ }
+
+ a:visited
+ {
+ color: black;
+ }
+
+ .spirit-nav
+ {
+ display: none;
+ }
+
+ /* Program listing */
+ pre.synopsis
+ {
+ border: 1px solid gray;
+ }
+
+ .programlisting,
+ .screen
+ {
+ border: 1px solid gray;
+ }
+
+ td .programlisting,
+ td .screen
+ {
+ border: 0px solid #DCDCDC;
+ }
+
+ /* Table of contents */
+ .toc
+ {
+ border: 1px solid gray;
+ }
+
+ .informaltable table,
+ .table table
+ {
+ border: 1px solid gray;
+ border-collapse: collapse;
+ }
+
+ /* Tables */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ border: 1px solid gray;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ border: 1px solid gray;
+ }
+
+ table.simplelist tr td
+ {
+ border: none !important;
+ }
+
+ /* Misc */
+ span.highlight
+ {
+ font-weight: bold;
+ }
+ }
+
+/*=============================================================================
+ Images
+=============================================================================*/
+
+ span.inlinemediaobject img
+ {
+ vertical-align: middle;
+ }
+
+/*==============================================================================
+ Super and Subscript: style so that line spacing isn't effected, see
+ http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341
+==============================================================================*/
+
+sup,
+sub {
+ height: 0;
+ line-height: 1;
+ vertical-align: baseline;
+ _vertical-align: bottom;
+ position: relative;
+
+}
+
+sup {
+ bottom: 1ex;
+}
+
+sub {
+ top: .5ex;
+}
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/count_bitset_grid_verts.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/count_bitset_grid_verts.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,196 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>count_bitset_grid_layout_vertices</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="set_bitset_grid_layout.html" title="set_bitset_grid_layout">
+<link rel="next" href="basic_vert_insert_iterator.html" title="basic_vertex_insert_iterator">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_bitset_grid_layout.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="basic_vert_insert_iterator.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.count_bitset_grid_verts"></a><a class="link" href="count_bitset_grid_verts.html" title="count_bitset_grid_layout_vertices"><code class="computeroutput"><span class="identifier">count_bitset_grid_layout_vertices</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bitset_grid_verts.prototype"></a><a class="link" href="count_bitset_grid_verts.html#index.count_bitset_grid_verts.prototype" title="Prototype">Prototype</a>
+</h3></div></div></div>
+<p>
+ The function prototype that takes in <a href="http://www.boost.org/libs/graph/doc/bgl_named_params.html" target="_top">old-style
+ named parameters</a> is always defined.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Params</span><span class="special">></span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">count_bitset_grid_layout_vertices</span><span class="special">(</span><span class="identifier">Params</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">params</span><span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ The function prototype that takes in Boost.Parameter
+ keywords is defined if you <span class="emphasis"><em>don't</em></span> set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ lower than 2.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">DimensionCount</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionMap</span><span class="special">></span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
+ <span class="identifier">count_bitset_grid_layout_vertices</span><span class="special">(</span>
+ <span class="identifier">DimensionCount</span> <span class="identifier">dimension_count</span>
+ <span class="special">,</span> <span class="identifier">PositionMap</span> <span class="identifier">position_map</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bitset_grid_verts.description"></a><a class="link" href="count_bitset_grid_verts.html#index.count_bitset_grid_verts.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ Returns the number of times that the <a class="link" href="set_bitset_grid_layout.html" title="set_bitset_grid_layout"><code class="computeroutput"><span class="identifier">set_bitset_grid_layout</span><span class="special">()</span></code></a>
+ algorithm will dereference and increment its vertex iterator if passed the
+ same arguments to this function.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bitset_grid_verts.definition"></a><a class="link" href="count_bitset_grid_verts.html#index.count_bitset_grid_verts.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/set_bitset_grid_layout.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bitset_grid_verts.type_requirements"></a><a class="link" href="count_bitset_grid_verts.html#index.count_bitset_grid_verts.type_requirements" title="Type Requirements">Type
+ Requirements</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="error">`</span><span class="identifier">DimensionCount</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> MPL Integral Constant <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Writable Property Map <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="identifier">the</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="identifier">an</span> <span class="identifier">instantiation</span> <span class="identifier">of</span>
+ std::bitset
<span class="special">,</span> <span class="identifier">then</span> <span class="identifier">the</span> <span class="identifier">value</span> <span class="identifier">that</span> <span class="error">`</span><span class="identifier">DimensionCount</span><span class="error">`</span> <span class="identifier">represents</span> <span class="identifier">must</span> <span class="identifier">be</span>
+ <span class="identifier">greater</span> <span class="identifier">than</span> <span class="number">1.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bitset_grid_verts.parameters"></a><a class="link" href="count_bitset_grid_verts.html#index.count_bitset_grid_verts.parameters" title="Parameters">Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Runtime requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimension_count</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An MPL Integral Constant representing
+ the number of bits in each bitset to be associated with each vertex.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ If the value type of <code class="computeroutput"><span class="identifier">PositionMap</span></code>
+ is an instantiation of std::bitset
, then an MPL Integral Constant representing
+ its size; otherwise required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Required only if the value type of <code class="computeroutput"><span class="identifier">PositionMap</span></code>
+ is an instantiation of std::bitset
.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dummy_property_map</span><span class="special">()</span></code>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ These two parameters can be deduced by type. However, if for some reason
+ you need to specify their names, remember that the BGL
+ prefixes each Boost.Parameter
+ keyword with an underscore and defines it in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span></code>
+ namespace.
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_bitset_grid_layout.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="basic_vert_insert_iterator.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/count_bitset_grid_verts.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/count_bitset_grid_verts.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,95 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:count_bitset_grid_verts `count_bitset_grid_layout_vertices`]
+
+[section Prototype]
+The function prototype that takes in __old_style_named_parameters__ is always
+defined.
+
+``
+namespace boost {
+
+ template <typename Params>
+ std::size_t count_bitset_grid_layout_vertices(Params const& params);
+} // namespace boost
+``
+
+The function prototype that takes in __Boost_Parameter__ keywords is defined if
+you /don't/ set `BOOST_PARAMETER_MAX_ARITY` lower than 2.
+
+``
+namespace boost {
+
+ template <typename DimensionCount, typename PositionMap>
+ std::size_t
+ count_bitset_grid_layout_vertices(
+ DimensionCount dimension_count
+ , PositionMap position_map
+ );
+} // namespace boost
+``
+[endsect]
+
+[section Description]
+Returns the number of times that the __set_bitset_grid_layout__ algorithm will
+dereference and increment its vertex iterator if passed the same arguments to
+this function.
+[endsect]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_set_bitset_grid_layout_hpp__>
+``
+[endsect]
+
+[section Type Requirements]
+
+ * `DimensionCount` must model the __MPL_Integral_Constant__ concept.
+ * `PositionMap` must model the __Writable_Property_Map__ concept.
+ * If the value type of `PositionMap` is not an instantiation of
+ __std_bitset__, then the value that `DimensionCount` represents must be
+ greater than 1.
+
+[endsect]
+
+[section Parameters]
+[table
+ [[Parameter][Description][Runtime requirements][Default]]
+ [
+ [`dimension_count`]
+ [
+ An __MPL_Integral_Constant__ representing the number of bits in
+ each bitset to be associated with each vertex.
+ ]
+ []
+ [
+ If the value type of `PositionMap` is an instantiation of
+ __std_bitset__, then an __MPL_Integral_Constant__ representing its
+ size; otherwise required.
+ ]
+ ]
+ [
+ [`position_map`]
+ [
+ Required only if the value type of `PositionMap` is an
+ instantiation of __std_bitset__.
+ ]
+ []
+ [`dummy_property_map()`]
+ ]
+]
+
+These two parameters can be deduced by type. However, if for some reason
+you need to specify their names, remember that the __BGL__ prefixes each
+__Boost_Parameter__ keyword with an underscore and defines it in the
+`boost::graph::keywords` namespace.
+[endsect] [/ Parameters]
+
+[endsect] [/ count_bitset_grid_layout_vertices]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/count_bt_cubic_hcomb_verts.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/count_bt_cubic_hcomb_verts.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,221 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>count_bitruncated_cubic_honeycomb_layout_vertices</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="set_bt_cubic_hcomb_layout.html" title="set_bitruncated_cubic_honeycomb_layout">
+<link rel="next" href="set_bitset_grid_layout.html" title="set_bitset_grid_layout">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_bt_cubic_hcomb_layout.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="set_bitset_grid_layout.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.count_bt_cubic_hcomb_verts"></a><a class="link" href="count_bt_cubic_hcomb_verts.html" title="count_bitruncated_cubic_honeycomb_layout_vertices"><code class="computeroutput"><span class="identifier">count_bitruncated_cubic_honeycomb_layout_vertices</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bt_cubic_hcomb_verts.prototype"></a><a class="link" href="count_bt_cubic_hcomb_verts.html#index.count_bt_cubic_hcomb_verts.prototype" title="Prototype">Prototype</a>
+</h3></div></div></div>
+<p>
+ The function prototype that takes in <a href="http://www.boost.org/libs/graph/doc/bgl_named_params.html" target="_top">old-style
+ named parameters</a> is always defined.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Params</span><span class="special">></span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
+ <span class="identifier">count_bitruncated_cubic_honeycomb_layout_vertices</span><span class="special">(</span>
+ <span class="identifier">Params</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">params</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ The function prototype that takes in Boost.Parameter
+ keywords is defined if you <span class="emphasis"><em>don't</em></span> set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ lower than 3.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Dimensions</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Scalar</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionIndexMap</span><span class="special">></span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
+ <span class="identifier">count_bitruncated_cubic_honeycomb_layout_vertices</span><span class="special">(</span>
+ <span class="identifier">Dimensions</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">Scalar</span> <span class="identifier">inscribed_radius</span>
+ <span class="special">,</span> <span class="identifier">PositionIndexMap</span> <span class="identifier">position_index_map</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bt_cubic_hcomb_verts.description"></a><a class="link" href="count_bt_cubic_hcomb_verts.html#index.count_bt_cubic_hcomb_verts.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ Returns the number of times that the <a class="link" href="set_bt_cubic_hcomb_layout.html" title="set_bitruncated_cubic_honeycomb_layout"><code class="computeroutput"><span class="identifier">set_bitruncated_cubic_honeycomb_layout</span><span class="special">()</span></code></a> algorithm will dereference and increment
+ its vertex iterator if passed the same arguments to this function.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bt_cubic_hcomb_verts.definition"></a><a class="link" href="count_bt_cubic_hcomb_verts.html#index.count_bt_cubic_hcomb_verts.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/set_bt_cubic_hcomb_layout.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bt_cubic_hcomb_verts.type_requirements"></a><a class="link" href="count_bt_cubic_hcomb_verts.html#index.count_bt_cubic_hcomb_verts.type_requirements" title="Type Requirements">Type
+ Requirements</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span>
+ <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scalar</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scalar</span><span class="error">`</span> <span class="keyword">and</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">index</span> <span class="identifier">operators</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span>
+ <span class="identifier">be</span> <span class="identifier">interoperable</span> <span class="identifier">arithmetic</span><span class="special">-</span><span class="identifier">wise</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionIndexMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span>
+ <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_bt_cubic_hcomb_verts.parameters"></a><a class="link" href="count_bt_cubic_hcomb_verts.html#index.count_bt_cubic_hcomb_verts.parameters" title="Parameters">Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Runtime requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimensions</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The physical size of the resulting layout.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">inscribed_radius</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The radius of the sphere inscribed by the truncated octahedron
+ that each vertex represents. See the <a class="link" href="set_bt_cubic_hcomb_layout.html#index.set_bt_cubic_hcomb_layout.description" title="Description">description</a>
+ for further information.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="number">1</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_index_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different upsilon tessellation layouts to reside on different dimensional
+ planes.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values in the range <code class="computeroutput"><span class="special">[</span><span class="number">0</span><span class="special">,</span> <span class="number">2</span><span class="special">]</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">identity_property_map()</code>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_bt_cubic_hcomb_layout.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="set_bitset_grid_layout.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/count_bt_cubic_hcomb_verts.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/count_bt_cubic_hcomb_verts.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,106 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:count_bt_cubic_hcomb_verts
+`count_bitruncated_cubic_honeycomb_layout_vertices`]
+
+[section Prototype]
+The function prototype that takes in __old_style_named_parameters__ is always
+defined.
+
+``
+namespace boost {
+
+ template <typename Params>
+ std::size_t
+ count_bitruncated_cubic_honeycomb_layout_vertices(
+ Params const& params
+ );
+} // namespace boost
+``
+
+The function prototype that takes in __Boost_Parameter__ keywords is defined if
+you /don't/ set `BOOST_PARAMETER_MAX_ARITY` lower than 3.
+
+``
+namespace boost {
+
+ template <typename Dimensions, typename Scalar, typename PositionIndexMap>
+ std::size_t
+ count_bitruncated_cubic_honeycomb_layout_vertices(
+ Dimensions const& dimensions
+ , Scalar inscribed_radius
+ , PositionIndexMap position_index_map
+ );
+} // namespace boost
+``
+[endsect]
+
+[section Description]
+Returns the number of times that the __set_bitruncated_cubic_honeycomb_layout__
+algorithm will dereference and increment its vertex iterator if passed the same
+arguments to this function.
+[endsect]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_set_bt_cubic_hcomb_layout_hpp__>
+``
+[endsect]
+
+[section Type Requirements]
+
+ * `Dimensions` must implement an index operator that accepts an integer type
+ as a valid argument and whose return type is a reference to a numeric type.
+ * `Scalar` must be a numeric type.
+ * `Scalar` and the return types of the index operators of `Dimensions` must
+ be interoperable arithmetic-wise.
+ * `PositionIndexMap` must implement an index operator that accepts an integer
+ type as a valid argument and whose return type is also an integer type.
+
+[endsect]
+
+[section Parameters]
+[table
+ [[Parameter][Description][Runtime requirements][Default]]
+ [
+ [`dimensions`]
+ [The physical size of the resulting layout.]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`inscribed_radius`]
+ [
+ The radius of the sphere inscribed by the truncated octahedron that
+ each vertex represents. See the
+ __set_bitruncated_cubic_honeycomb_layout__description__ for further
+ information.
+ ]
+ []
+ [`1`]
+ ]
+ [
+ [`position_index_map`]
+ [
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different upsilon tessellation layouts to reside on different
+ dimensional planes.
+ ]
+ [The index operator must accept values in the range `[0, 2]`.]
+ [[^_identity_property_map_()]]
+ ]
+]
+[endsect]
+
+[endsect] [/ set_bitruncated_cubic_honeycomb_layout]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/count_ortho_grid_verts.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/count_ortho_grid_verts.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,291 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>count_orthogonal_grid_layout_vertices</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="set_orthogonal_grid_layout.html" title="set_orthogonal_grid_layout">
+<link rel="next" href="set_upsilon_tessel_layout.html" title="set_upsilon_tessellation_layout">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_orthogonal_grid_layout.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="set_upsilon_tessel_layout.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.count_ortho_grid_verts"></a><a class="link" href="count_ortho_grid_verts.html" title="count_orthogonal_grid_layout_vertices"><code class="computeroutput"><span class="identifier">count_orthogonal_grid_layout_vertices</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_ortho_grid_verts.prototype"></a><a class="link" href="count_ortho_grid_verts.html#index.count_ortho_grid_verts.prototype" title="Prototype">Prototype</a>
+</h3></div></div></div>
+<p>
+ The function prototype that takes in <a href="http://www.boost.org/libs/graph/doc/bgl_named_params.html" target="_top">old-style
+ named parameters</a> is always defined.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Params</span><span class="special">></span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">count_orthogonal_grid_layout_vertices</span><span class="special">(</span><span class="identifier">Params</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">params</span><span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ The function prototype that takes in Boost.Parameter
+ keywords is defined if you <span class="emphasis"><em>don't</em></span> set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ lower than its default value of 5.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span>
+ <span class="keyword">typename</span> <span class="identifier">Dimensions</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">DimensionCount</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointFactory</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionIndexMap</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Scale</span>
+ <span class="special">></span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
+ <span class="identifier">count_orthogonal_grid_layout_vertices</span><span class="special">(</span>
+ <span class="identifier">Dimensions</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">DimensionCount</span> <span class="identifier">dimension_count</span>
+ <span class="special">,</span> <span class="identifier">PointFactory</span> <span class="identifier">point_factory</span>
+ <span class="special">,</span> <span class="identifier">PositionIndexMap</span> <span class="identifier">position_index_map</span>
+ <span class="special">,</span> <span class="identifier">Scale</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">scale</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_ortho_grid_verts.description"></a><a class="link" href="count_ortho_grid_verts.html#index.count_ortho_grid_verts.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ Returns the number of times that the <a class="link" href="set_orthogonal_grid_layout.html" title="set_orthogonal_grid_layout"><code class="computeroutput"><span class="identifier">set_orthogonal_grid_layout</span><span class="special">()</span></code></a>
+ algorithm will dereference and increment its vertex iterator if passed the
+ same arguments to this function.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_ortho_grid_verts.definition"></a><a class="link" href="count_ortho_grid_verts.html#index.count_ortho_grid_verts.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/set_orthogonal_grid_layout.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_ortho_grid_verts.type_requirements"></a><a class="link" href="count_ortho_grid_verts.html#index.count_ortho_grid_verts.type_requirements" title="Type Requirements">Type
+ Requirements</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span>
+ <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="error">`</span><span class="identifier">point_factory</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="identifier">specified</span><span class="special">,</span> <span class="identifier">then</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span>
+ Default Constructible <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">DimensionCount</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> MPL Integral Constant <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">that</span> <span class="error">`</span><span class="identifier">DimensionCount</span><span class="error">`</span> <span class="identifier">represents</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">greater</span> <span class="identifier">than</span> <span class="number">1.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PointFactory</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Generator <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">PointFactory</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Scale</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionIndexMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span>
+ <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scale</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span>
+ <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="identifier">neither</span> <span class="error">`</span><span class="identifier">point_factory</span><span class="error">`</span> <span class="identifier">nor</span> <span class="error">`</span><span class="identifier">scale</span><span class="error">`</span> <span class="identifier">are</span> <span class="identifier">specified</span><span class="special">,</span> <span class="identifier">then</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span>
+ <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Scale</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="keyword">return</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">index</span> <span class="identifier">operators</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">Scale</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span>
+ <span class="identifier">interoperable</span> <span class="identifier">arithmetic</span><span class="special">-</span><span class="identifier">wise</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_ortho_grid_verts.parameters"></a><a class="link" href="count_ortho_grid_verts.html#index.count_ortho_grid_verts.parameters" title="Parameters">Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Runtime requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimensions</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The physical size of the resulting layout.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ Furthermore, If <code class="computeroutput"><span class="identifier">point_factory</span></code>
+ is not specified, then the default constructor of <code class="computeroutput"><span class="identifier">Dimensions</span></code> must ensure that the
+ object returned fulfills this requirement.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimension_count</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An MPL Integral Constant representing
+ the number of dimensions the resulting layout will straddle.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ An MPL Integral Constant representing
+ the value <code class="computeroutput"><span class="number">2</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">point_factory</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A function that constructs and returns <code class="computeroutput"><span class="identifier">Point</span></code>
+ objects. Required if the default constructor of <code class="computeroutput"><span class="identifier">Point</span></code>
+ does not exist or prevents its index operator from fulfilling its
+ runtime requirement.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator of each object returned must accept values returned
+ by the index operator of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">value_factory<Dimensions>()</code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_index_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different orthogonal layouts to reside on different dimensional
+ planes.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values in the range <code class="computeroutput"><span class="special">[</span><span class="number">0</span><span class="special">,</span> <span class="identifier">DimensionCount</span><span class="special">::</span><span class="identifier">value</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">identity_property_map()</code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">scale</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An object representing the distance between two adjacent vertices
+ in each dimension.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ A <code class="computeroutput"><span class="identifier">Point</span></code> whose index
+ operator returns one for each of the input dimensions returned
+ by the index operator of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_orthogonal_grid_layout.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="set_upsilon_tessel_layout.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/count_ortho_grid_verts.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/count_ortho_grid_verts.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,150 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:count_ortho_grid_verts `count_orthogonal_grid_layout_vertices`]
+
+[section Prototype]
+The function prototype that takes in __old_style_named_parameters__ is always
+defined.
+
+``
+namespace boost {
+
+ template <typename Params>
+ std::size_t count_orthogonal_grid_layout_vertices(Params const& params);
+} // namespace boost
+``
+
+The function prototype that takes in __Boost_Parameter__ keywords is defined if
+you /don't/ set `BOOST_PARAMETER_MAX_ARITY` lower than its default value of 5.
+
+``
+namespace boost {
+
+ template <
+ typename Dimensions
+ , typename DimensionCount
+ , typename PointFactory
+ , typename PositionIndexMap
+ , typename Scale
+ >
+ std::size_t
+ count_orthogonal_grid_layout_vertices(
+ Dimensions const& dimensions
+ , DimensionCount dimension_count
+ , PointFactory point_factory
+ , PositionIndexMap position_index_map
+ , Scale const& scale
+ );
+} // namespace boost
+``
+[endsect]
+
+[section Description]
+Returns the number of times that the __set_orthogonal_grid_layout__ algorithm
+will dereference and increment its vertex iterator if passed the same
+arguments to this function.
+[endsect]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_set_orthogonal_grid_layout_hpp__>
+``
+[endsect]
+
+[section Type Requirements]
+
+ * `Dimensions` must implement an index operator that accepts an integer type
+ as a valid argument and whose return type is a reference to a numeric type.
+ * If `point_factory` is not specified, then `Dimensions` must model the
+ __Default_Constructible__ concept.
+ * `DimensionCount` must model the __MPL_Integral_Constant__ concept.
+ * The value that `DimensionCount` represents must be greater than 1.
+ * `PointFactory` must model the __Generator__ concept.
+ * The return type of `PointFactory` must be convertible to `Scale`.
+ * `PositionIndexMap` must implement an index operator that accepts an integer
+ type as a valid argument and whose return type is also an integer type.
+ * `Scale` must implement an index operator that accepts an integer type as a
+ valid argument and whose return type is a reference to a numeric type.
+ * If neither `point_factory` nor `scale` are specified, then `Dimensions`
+ must be convertible to `Scale`.
+ * The return types of the index operators of `Dimensions` and `Scale` must be
+ interoperable arithmetic-wise.
+
+[endsect]
+
+[section Parameters]
+[table
+ [[Parameter][Description][Runtime requirements][Default]]
+ [
+ [`dimensions`]
+ [The physical size of the resulting layout.]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`. Furthermore, If `point_factory`
+ is not specified, then the default constructor of `Dimensions`
+ must ensure that the object returned fulfills this requirement.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`dimension_count`]
+ [
+ An __MPL_Integral_Constant__ representing the number of dimensions
+ the resulting layout will straddle.
+ ]
+ []
+ [An __MPL_Integral_Constant__ representing the value `2`.]
+ ]
+ [
+ [`point_factory`]
+ [
+ A function that constructs and returns `Point` objects. Required
+ if the default constructor of `Point` does not exist or prevents
+ its index operator from fulfilling its runtime requirement.
+ ]
+ [
+ The index operator of each object returned must accept values
+ returned by the index operator of `position_index_map`.
+ ]
+ [[^_value_factory_<Dimensions>()]]
+ ]
+ [
+ [`position_index_map`]
+ [
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different orthogonal layouts to reside on different dimensional
+ planes.
+ ]
+ [
+ The index operator must accept values in the range
+ `[0, DimensionCount::value)`.
+ ]
+ [[^_identity_property_map_()]]
+ ]
+ [
+ [`scale`]
+ [
+ An object representing the distance between two adjacent vertices
+ in each dimension.
+ ]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [
+ A `Point` whose index operator returns one for each of the input
+ dimensions returned by the index operator of `position_index_map`.
+ ]
+ ]
+]
+[endsect] [/ Parameters]
+
+[endsect] [/ count_orthogonal_grid_layout_vertices]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/count_upsilon_tessel_verts.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/count_upsilon_tessel_verts.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,218 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>count_upsilon_tessellation_layout_vertices</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="set_upsilon_tessel_layout.html" title="set_upsilon_tessellation_layout">
+<link rel="next" href="set_bt_cubic_hcomb_layout.html" title="set_bitruncated_cubic_honeycomb_layout">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_upsilon_tessel_layout.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="set_bt_cubic_hcomb_layout.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.count_upsilon_tessel_verts"></a><a class="link" href="count_upsilon_tessel_verts.html" title="count_upsilon_tessellation_layout_vertices"><code class="computeroutput"><span class="identifier">count_upsilon_tessellation_layout_vertices</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_upsilon_tessel_verts.prototype"></a><a class="link" href="count_upsilon_tessel_verts.html#index.count_upsilon_tessel_verts.prototype" title="Prototype">Prototype</a>
+</h3></div></div></div>
+<p>
+ The function prototype that takes in <a href="http://www.boost.org/libs/graph/doc/bgl_named_params.html" target="_top">old-style
+ named parameters</a> is always defined.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Params</span><span class="special">></span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
+ <span class="identifier">count_upsilon_tessellation_layout_vertices</span><span class="special">(</span><span class="identifier">Params</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">params</span><span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ The function prototype that takes in Boost.Parameter
+ keywords is defined if you <span class="emphasis"><em>don't</em></span> set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ lower than 3.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Dimensions</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Scalar</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionIndexMap</span><span class="special">></span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
+ <span class="identifier">count_upsilon_tessellation_layout_vertices</span><span class="special">(</span>
+ <span class="identifier">Dimensions</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">Scalar</span> <span class="identifier">vertex_centroid_distance</span>
+ <span class="special">,</span> <span class="identifier">PositionIndexMap</span> <span class="identifier">position_index_map</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_upsilon_tessel_verts.description"></a><a class="link" href="count_upsilon_tessel_verts.html#index.count_upsilon_tessel_verts.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ Returns the number of times that the <a class="link" href="set_upsilon_tessel_layout.html" title="set_upsilon_tessellation_layout"><code class="computeroutput"><span class="identifier">set_upsilon_tessellation_layout</span><span class="special">()</span></code></a>
+ algorithm will dereference and increment its vertex iterator if passed the
+ same arguments to this function.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_upsilon_tessel_verts.definition"></a><a class="link" href="count_upsilon_tessel_verts.html#index.count_upsilon_tessel_verts.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/set_upsilon_tessel_layout.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_upsilon_tessel_verts.type_requirements"></a><a class="link" href="count_upsilon_tessel_verts.html#index.count_upsilon_tessel_verts.type_requirements" title="Type Requirements">Type
+ Requirements</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span>
+ <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scalar</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scalar</span><span class="error">`</span> <span class="keyword">and</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">index</span> <span class="identifier">operators</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span>
+ <span class="identifier">be</span> <span class="identifier">interoperable</span> <span class="identifier">arithmetic</span><span class="special">-</span><span class="identifier">wise</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionIndexMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span>
+ <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.count_upsilon_tessel_verts.parameters"></a><a class="link" href="count_upsilon_tessel_verts.html#index.count_upsilon_tessel_verts.parameters" title="Parameters">Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Runtime requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimensions</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The physical size of the resulting layout.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">vertex_centroid_distance</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The distance between two orthogonally adjacent vertices.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="number">1</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_index_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different upsilon tessellation layouts to reside on different dimensional
+ planes.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values in the range <code class="computeroutput"><span class="special">[</span><span class="number">0</span><span class="special">,</span> <span class="number">1</span><span class="special">]</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">identity_property_map()</code>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_upsilon_tessel_layout.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="set_bt_cubic_hcomb_layout.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/count_upsilon_tessel_verts.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/count_upsilon_tessel_verts.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,99 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:count_upsilon_tessel_verts
+`count_upsilon_tessellation_layout_vertices`]
+
+[section Prototype]
+The function prototype that takes in __old_style_named_parameters__ is always
+defined.
+
+``
+namespace boost {
+
+ template <typename Params>
+ std::size_t
+ count_upsilon_tessellation_layout_vertices(Params const& params);
+} // namespace boost
+``
+
+The function prototype that takes in __Boost_Parameter__ keywords is defined if
+you /don't/ set `BOOST_PARAMETER_MAX_ARITY` lower than 3.
+
+``
+namespace boost {
+
+ template <typename Dimensions, typename Scalar, typename PositionIndexMap>
+ std::size_t
+ count_upsilon_tessellation_layout_vertices(
+ Dimensions const& dimensions
+ , Scalar vertex_centroid_distance
+ , PositionIndexMap position_index_map
+ );
+} // namespace boost
+``
+[endsect]
+
+[section Description]
+Returns the number of times that the __set_upsilon_tessellation_layout__
+algorithm will dereference and increment its vertex iterator if passed the same
+arguments to this function.
+[endsect]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_set_upsilon_tessel_layout_hpp__>
+``
+[endsect]
+
+[section Type Requirements]
+
+ * `Dimensions` must implement an index operator that accepts an integer type
+ as a valid argument and whose return type is a reference to a numeric type.
+ * `Scalar` must be a numeric type.
+ * `Scalar` and the return types of the index operators of `Dimensions` must
+ be interoperable arithmetic-wise.
+ * `PositionIndexMap` must implement an index operator that accepts an integer
+ type as a valid argument and whose return type is also an integer type.
+
+[endsect]
+
+[section Parameters]
+[table
+ [[Parameter][Description][Runtime requirements][Default]]
+ [
+ [`dimensions`]
+ [The physical size of the resulting layout.]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`vertex_centroid_distance`]
+ [The distance between two orthogonally adjacent vertices.]
+ []
+ [`1`]
+ ]
+ [
+ [`position_index_map`]
+ [
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different upsilon tessellation layouts to reside on different
+ dimensional planes.
+ ]
+ [The index operator must accept values in the range `[0, 1]`.]
+ [[^_identity_property_map_()]]
+ ]
+]
+[endsect]
+
+[endsect] [/ count_upsilon_tessellation_layout_vertices]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/alert.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/blank.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/caution.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/draft.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/home.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/important.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/next.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/next_disabled.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/note.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/prev.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/prev_disabled.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/smiley.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/tip.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/toc-blank.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/toc-minus.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/toc-plus.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/up.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/up_disabled.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/images/warning.png
==============================================================================
Binary file. No diff available.
Added: sandbox/graph-intrusive_layout/libs/graph/doc/intrusive_layout.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/intrusive_layout.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,104 @@
+[reference index
+ [quickbook 1.5]
+ [version 0.1]
+ [authors [Enage, Cromwell D.]]
+ [copyright 2011 Cromwell D. Enage]
+ [purpose Layout algorithms that add vertices and edges]
+ [license
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+ ]
+]
+
+[/ General links.]
+[def __bitruncated_cubic_honeycomb__ [@http://en.wikipedia.org/wiki/Bitruncated_cubic_honeycomb bitruncated cubic honeycomb]]
+[def __truncated_octahedra__ [@http://en.wikipedia.org/wiki/Truncated_octahedron truncated octahedra]]
+[def __truncated_octahedron__ [@http://en.wikipedia.org/wiki/Truncated_octahedron truncated octahedron]]
+[def __upsilon_tessellation__ [@http://www.astrolog.org/labyrnth/algrithm.htm upsilon tessellation]]
+[def __zeta_layout__ [@http://www.astrolog.org/labyrnth/algrithm.htm zeta layout]]
+
+[/ General concept links.]
+[def __Binary_Function__ [@http://www.sgi.com/tech/stl/BinaryFunction.html [*Binary Function]]]
+[def __Generator__ [@http://www.sgi.com/tech/stl/Generator.html [*Generator]]]
+
+[/ STL reference links in text.]
+[def __std_bitset__ [@http://www.sgi.com/tech/stl/bitset.html `std::bitset`]]
+
+[/ Boost library links.]
+[def __Boost_Parameter__ [@boost:libs/parameter/doc/html/index.html Boost.Parameter]]
+[def __BGL__ [@boost:libs/graph/doc/index.html BGL]]
+
+[/ Boost concept links.]
+[def __Default_Constructible__ [@http://www.sgi.com/tech/stl/DefaultConstructible.html [*Default Constructible]]]
+[def __Copy_Constructible__ [@boost:libs/utility/CopyConstructible.html [*Copy Constructible]]]
+[def __Assignable__ [@boost:libs/utility/Assignable.html [*Assignable]]]
+[def __MPL_Integral_Constant__ [@boost:libs/mpl/doc/refmanual/integral-constant.html [*MPL Integral Constant]]]
+[def __Readable_Iterator__ [@boost:/libs/iterator/doc/ReadableIterator.html [*Readable Iterator]]]
+[def __Incrementable_Iterator__ [@boost:/libs/iterator/doc/IncrementableIterator.html [*Incrementable Iterator]]]
+[def __Writable_Property_Map__ [@boost:/libs/property_map/doc/WritablePropertyMap.html [*Writable Property Map]]]
+[def __Vertex_List_Graph__ [@boost:libs/graph/doc/VertexListGraph.html [*Vertex List Graph]]]
+[def __Mutable_Graph__ [@boost:libs/graph/doc/MutableGraph.html [*Mutable Graph]]]
+
+[/ Boost reference links in text.]
+[def __old_style_named_parameters__ [@boost:libs/graph/doc/bgl_named_params.html old-style named parameters]]
+[def __vertex_descriptor__ [@boost:libs/graph/doc/graph_traits.html vertex descriptor]]
+[def __vertex_iterator__ [@boost:libs/graph/doc/graph_traits.html vertex iterator]]
+[def __edge_descriptor_type__ [@boost:libs/graph/doc/graph_traits.html edge descriptor type]]
+[def __iterator_facade__ [@boost:libs/iterator/doc/iterator_facade.html `iterator_facade`]]
+[def __iterator_adaptor__ [@boost:libs/iterator/doc/iterator_adaptor.html `iterator_adaptor`]]
+
+[/ Boost reference links in code.]
+[def _value_factory_ [@boost:libs/functional/factory/doc/html/ value_factory]]
+[def _identity_property_map_ [@boost:/libs/property_map/doc/identity_property_map.html identity_property_map]]
+[def _graph_traits_ [@boost:libs/graph/doc/graph_traits.html graph_traits]]
+[def _vertices_ [@boost:libs/graph/doc/VertexListGraph.html vertices]]
+[def _add_vertex_ [@boost:libs/graph/doc/MutableGraph.html add_vertex]]
+[def _add_edge_ [@boost:libs/graph/doc/MutableGraph.html add_edge]]
+
+[/ Header and source file links.]
+[def __boost_graph_basic_vert_insert_iterator_hpp__ [@../../boost/graph/basic_vert_insert_iterator.hpp boost/graph/basic_vert_insert_iterator.hpp]]
+[def __boost_graph_basic_add_edge_function_hpp__ [@../../boost/graph/basic_add_edge_function.hpp boost/graph/basic_add_edge_function.hpp]]
+[def __boost_graph_set_orthogonal_grid_layout_hpp__ [@../../boost/graph/set_orthogonal_grid_layout.hpp boost/graph/set_orthogonal_grid_layout.hpp]]
+[def __boost_graph_set_upsilon_tessel_layout_hpp__ [@../../boost/graph/set_upsilon_tessel_layout.hpp boost/graph/set_upsilon_tessel_layout.hpp]]
+[def __boost_graph_set_bt_cubic_hcomb_layout_hpp__ [@../../boost/graph/set_bt_cubic_hcomb_layout.hpp boost/graph/set_bt_cubic_hcomb_layout.hpp]]
+[def __boost_graph_set_bitset_grid_layout_hpp__ [@../../boost/graph/set_bitset_grid_layout.hpp boost/graph/set_bitset_grid_layout.hpp]]
+[def __example_orthogonal_grid_layouts_cpp__ [@example/orthogonal_grid_layouts.cpp]]
+[def __example_upsilon_tessellation_layout_cpp__ [@example/upsilon_tessellation_layout.cpp]]
+[def __example_bitruncated_cubic_honeycomb_cpp__ [@example/bitruncated_cubic_honeycomb.cpp]]
+[def __example_bitset_grid_layouts_cpp__ [@example/bitset_grid_layouts.cpp]]
+
+[/ Internal links.]
+[def _count_orthogonal_grid_layout_vertices_ [link index.count_ortho_grid_verts count_orthogonal_grid_layout_vertices]]
+[def _count_upsilon_tessellation_layout_vertices_ [link index.count_upsilon_tessel_verts count_upsilon_tessellation_layout_vertices]]
+[def _count_bitruncated_cubic_honeycomb_layout_vertices_ [link index.count_bt_cubic_hcomb_verts count_bitruncated_cubic_honeycomb_layout_vertices]]
+[def _count_bitset_grid_layout_vertices_ [link index.count_bitset_grid_verts count_bitset_grid_layout_vertices]]
+[def __set_orthogonal_grid_layout__ [link index.set_orthogonal_grid_layout `set_orthogonal_grid_layout()`]]
+[def __set_upsilon_tessellation_layout__ [link index.set_upsilon_tessel_layout `set_upsilon_tessellation_layout()`]]
+[def __set_bitruncated_cubic_honeycomb_layout__ [link index.set_bt_cubic_hcomb_layout `set_bitruncated_cubic_honeycomb_layout()`]]
+[def __count_bitset_grid_layout_vertices__ [link index.count_bitset_grid_verts `count_bitset_grid_layout_vertices()`]]
+[def __set_bitset_grid_layout__ [link index.set_bitset_grid_layout `set_bitset_grid_layout()`]]
+[def __set_orthogonal_grid_layout__description__ [link index.set_orthogonal_grid_layout.description description]]
+[def __set_upsilon_tessellation_layout__description__ [link index.set_upsilon_tessel_layout.description description]]
+[def __set_bitruncated_cubic_honeycomb_layout__description__ [link index.set_bt_cubic_hcomb_layout.description description]]
+
+[/ Autogenerate reference documentation directly from code.]
+[/ Bypass Doxygen.]
+[import ../../../boost/graph/basic_vert_insert_iterator.hpp]
+[import ../../../boost/graph/basic_add_edge_function.hpp]
+[import ../example/orthogonal_grid_layouts.cpp]
+[import ../example/upsilon_tessellation_layout.cpp]
+[import ../example/bitruncated_cubic_honeycomb.cpp]
+[import ../example/bitset_grid_layouts.cpp]
+
+[include set_orthogonal_grid_layout.qbk]
+[include count_ortho_grid_verts.qbk]
+[include set_upsilon_tessel_layout.qbk]
+[include count_upsilon_tessel_verts.qbk]
+[include set_bt_cubic_hcomb_layout.qbk]
+[include count_bt_cubic_hcomb_verts.qbk]
+[include set_bitset_grid_layout.qbk]
+[include count_bitset_grid_verts.qbk]
+[include basic_vert_insert_iterator.qbk]
+[include basic_add_edge_function.qbk]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/set_bitset_grid_layout.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/set_bitset_grid_layout.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,348 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>set_bitset_grid_layout</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="count_bt_cubic_hcomb_verts.html" title="count_bitruncated_cubic_honeycomb_layout_vertices">
+<link rel="next" href="count_bitset_grid_verts.html" title="count_bitset_grid_layout_vertices">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="count_bt_cubic_hcomb_verts.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="count_bitset_grid_verts.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.set_bitset_grid_layout"></a><a class="link" href="set_bitset_grid_layout.html" title="set_bitset_grid_layout"><code class="computeroutput"><span class="identifier">set_bitset_grid_layout</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bitset_grid_layout.prototype"></a><a class="link" href="set_bitset_grid_layout.html#index.set_bitset_grid_layout.prototype" title="Prototype">Prototype</a>
+</h3></div></div></div>
+<p>
+ The function prototype that takes in <a href="http://www.boost.org/libs/graph/doc/bgl_named_params.html" target="_top">old-style
+ named parameters</a> is always defined.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">VertexIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Params</span><span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_bitset_grid_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Params</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">params</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ The function prototype that explicitly takes in all parameters is defined
+ if the <code class="computeroutput"><span class="identifier">BOOST_GRAPH_SET_BITSET_GRID_LAYOUT_TAKES_ALL_PARAMS</span></code>
+ preprocessor token is defined--that is, if you set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ to 4 or higher. (You may also choose to leave it at its default value of
+ 5.)
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span>
+ <span class="keyword">typename</span> <span class="identifier">VertexIterator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">DimensionCount</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionMap</span>
+ <span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_bitset_grid_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">DimensionCount</span> <span class="identifier">dimension_count</span>
+ <span class="special">,</span> <span class="identifier">PositionMap</span> <span class="identifier">position_map</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bitset_grid_layout.description"></a><a class="link" href="set_bitset_grid_layout.html#index.set_bitset_grid_layout.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ This algorithm performs layout of directed or undirected graphs, associating
+ each vertex with a bitset representation of its logical index. The edge function
+ will be invoked for each pair of vertices whose bitsets differ by exactly
+ one bit.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bitset_grid_layout.definition"></a><a class="link" href="set_bitset_grid_layout.html#index.set_bitset_grid_layout.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/set_bitset_grid_layout.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bitset_grid_layout.type_requirements"></a><a class="link" href="set_bitset_grid_layout.html#index.set_bitset_grid_layout.type_requirements" title="Type Requirements">Type
+ Requirements</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Readable Iterator <span class="keyword">and</span>
+ Incrementable Iterator <span class="identifier">concepts</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">EdgeFunction</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Binary Function <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="identifier">both</span> <span class="identifier">the</span> <span class="identifier">first</span>
+ <span class="keyword">and</span> <span class="identifier">second</span> <span class="identifier">argument</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">EdgeFunction</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">DimensionCount</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> MPL Integral Constant <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Writable Property Map <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">usable</span> <span class="identifier">as</span> <span class="identifier">the</span> <span class="identifier">key</span> <span class="identifier">type</span> <span class="identifier">of</span>
+ <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="identifier">the</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="identifier">an</span> <span class="identifier">instantiation</span> <span class="identifier">of</span>
+ std::bitset
<span class="special">,</span> <span class="identifier">then</span> <span class="identifier">the</span> <span class="identifier">value</span> <span class="identifier">that</span> <span class="error">`</span><span class="identifier">DimensionCount</span><span class="error">`</span> <span class="identifier">represents</span> <span class="identifier">must</span> <span class="identifier">be</span>
+ <span class="identifier">greater</span> <span class="identifier">than</span> <span class="number">1.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bitset_grid_layout.parameters"></a><a class="link" href="set_bitset_grid_layout.html#index.set_bitset_grid_layout.parameters" title="Parameters">Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Runtime requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An iterator over the vertices of a graph. The algorithm will store
+ copies of the vertex descriptors dereferenced from it.
+ </p>
+ </td>
+<td>
+ <p>
+ If this iterator points to the beginning of a range of vertices
+ in a graph, then this range must at least as large as the value
+ returned by <code class="literal"><a class="link" href="count_bitset_grid_verts.html" title="count_bitset_grid_layout_vertices">count_bitset_grid_layout_vertices</a>(dimension_count,
+ position_map)</code>.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">edge_function</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A function that is invoked each time the algorithm recognizes the
+ input vertices as edges.
+ </p>
+ </td>
+<td>
+ <p>
+ Each vertex descriptor dereferenced from <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ must be a valid argument.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimension_count</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An MPL Integral Constant representing
+ the number of bits in each bitset to be associated with each vertex.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ If the value type of <code class="computeroutput"><span class="identifier">PositionMap</span></code>
+ is an instantiation of std::bitset
, then an MPL Integral Constant representing
+ its size; otherwise required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each vertex to an object representing a bitset in the resulting
+ layout.
+ </p>
+ </td>
+<td>
+ <p>
+ Each vertex descriptor dereferenced from <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ must be a valid key.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dummy_property_map</span><span class="special">()</span></code>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ The last two parameters can be deduced by type. However, if for some reason
+ you need to specify their names, remember that the BGL
+ prefixes each Boost.Parameter
+ keyword with an underscore and defines it in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span></code>
+ namespace.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bitset_grid_layout.example"></a><a class="link" href="set_bitset_grid_layout.html#index.set_bitset_grid_layout.example" title="Example">Example</a>
+</h3></div></div></div>
+<p>
+ The first graph will have a layout of bitsets, each carrying four bits. The
+ size of each bitset is fixed at compile time, but the position map holds
+ this information, so the <a class="link" href="count_bitset_grid_verts.html" title="count_bitset_grid_layout_vertices"><code class="computeroutput"><span class="identifier">count_bitset_grid_layout_vertices</span><span class="special">()</span></code></a>
+ function must take it in. In order for this function to be called during
+ construction of the graph, the position map must be external to the graph.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adjacency_list</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">vecS</span><span class="special">,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">setS</span><span class="special">,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">directedS</span><span class="special">></span>
+ <span class="identifier">MidGraph</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph_traits</span><span class="special"><</span><span class="identifier">MidGraph</span><span class="special">>::</span><span class="identifier">vertex_descriptor</span>
+ <span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">bitset</span><span class="special"><</span><span class="number">4</span><span class="special">></span>
+ <span class="special">></span>
+ <span class="identifier">Vertex2BitsMap</span><span class="special">;</span>
+
+ <span class="identifier">Vertex2BitsMap</span> <span class="identifier">v2b_map</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">associative_property_map</span><span class="special"><</span><span class="identifier">Vertex2BitsMap</span><span class="special">></span> <span class="identifier">pos_map</span><span class="special">(</span><span class="identifier">v2b_map</span><span class="special">);</span>
+ <span class="identifier">MidGraph</span> <span class="identifier">mid_graph</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">count_bitset_grid_layout_vertices</span><span class="special">(</span><span class="identifier">pos_map</span><span class="special">));</span>
+
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">set_bitset_grid_layout</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertices</span><span class="special">(</span><span class="identifier">mid_graph</span><span class="special">).</span><span class="identifier">first</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_2way_edge_adder</span><span class="special">(</span><span class="identifier">mid_graph</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">position_map</span><span class="special">(</span><span class="identifier">pos_map</span><span class="special">)</span>
+ <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">print_graph</span><span class="special">(</span><span class="identifier">mid_graph</span><span class="special">,</span> <span class="identifier">pos_map</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ </pre>
+<p>
+ </p>
+<p>
+ The bitsets in the layout of the second graph will carry five bits each.
+ This time, the memory will be allocated at runtime, so the <code class="computeroutput"><span class="identifier">dimension_count</span></code> parameter is required.
+ Note that the order of the last two arguments can differ from the positional
+ definition of the layout function.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"> <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertex_distance_t</span> <span class="identifier">PositionTag</span><span class="special">;</span>
+
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="number">5</span><span class="special">></span> <span class="identifier">bit_count</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adjacency_list</span><span class="special"><</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multisetS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">listS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">undirectedS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">property</span><span class="special"><</span><span class="identifier">PositionTag</span><span class="special">,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dynamic_bitset</span><span class="special"><></span> <span class="special">></span>
+ <span class="special">></span> <span class="identifier">big_graph</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">count_bitset_grid_layout_vertices</span><span class="special">(</span><span class="identifier">bit_count</span><span class="special">)</span>
+ <span class="special">);</span>
+
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">set_bitset_grid_layout</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertices</span><span class="special">(</span><span class="identifier">big_graph</span><span class="special">).</span><span class="identifier">first</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_edge_adder</span><span class="special">(</span><span class="identifier">big_graph</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">big_graph</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">bit_count</span>
+ <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">print_graph</span><span class="special">(</span><span class="identifier">big_graph</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">big_graph</span><span class="special">));</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ The complete example program can be compiled from this file: <example/bitset_grid_layouts.cpp>.
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="count_bt_cubic_hcomb_verts.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="count_bitset_grid_verts.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/set_bitset_grid_layout.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/set_bitset_grid_layout.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,166 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:set_bitset_grid_layout `set_bitset_grid_layout`]
+
+[section Prototype]
+The function prototype that takes in __old_style_named_parameters__ is always
+defined.
+
+``
+namespace boost {
+
+ template <typename VertexIterator, typename EdgeFunction, typename Params>
+ void
+ set_bitset_grid_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Params const& params
+ );
+} // namespace boost
+``
+
+The function prototype that explicitly takes in all parameters is defined if
+the `BOOST_GRAPH_SET_BITSET_GRID_LAYOUT_TAKES_ALL_PARAMS` preprocessor
+token is defined--that is, if you set `BOOST_PARAMETER_MAX_ARITY` to 4 or
+higher. (You may also choose to leave it at its default value of 5.)
+
+``
+namespace boost {
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename DimensionCount
+ , typename PositionMap
+ >
+ void
+ set_bitset_grid_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , DimensionCount dimension_count
+ , PositionMap position_map
+ );
+} // namespace boost
+``
+[endsect] [/ Prototype]
+
+[section Description]
+This algorithm performs layout of directed or undirected graphs, associating
+each vertex with a bitset representation of its logical index. The edge
+function will be invoked for each pair of vertices whose bitsets differ by
+exactly one bit.
+[endsect] [/ Description]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_set_bitset_grid_layout_hpp__>
+``
+[endsect]
+
+[section Type Requirements]
+
+ * `VertexIterator` must model the __Readable_Iterator__ and
+ __Incrementable_Iterator__ concepts.
+ * `EdgeFunction` must model the __Binary_Function__ concept.
+ * The value type of `VertexIterator` must be convertible to both the first
+ and second argument types of `EdgeFunction`.
+ * `DimensionCount` must model the __MPL_Integral_Constant__ concept.
+ * `PositionMap` must model the __Writable_Property_Map__ concept.
+ * The value type of `VertexIterator` must be usable as the key type of
+ `PositionMap`.
+ * If the value type of `PositionMap` is not an instantiation of
+ __std_bitset__, then the value that `DimensionCount` represents must be
+ greater than 1.
+
+[endsect]
+
+[section Parameters]
+[table
+ [[Parameter][Description][Runtime requirements][Default]]
+ [
+ [`vertex_iterator`]
+ [
+ An iterator over the vertices of a graph. The algorithm will store
+ copies of the vertex descriptors dereferenced from it.
+ ]
+ [
+ If this iterator points to the beginning of a range of vertices
+ in a graph, then this range must at least as large as the value
+ returned by [^_count_bitset_grid_layout_vertices_(dimension_count,
+ position_map)].
+ ]
+ [None; always required.]
+ ]
+ [
+ [`edge_function`]
+ [
+ A function that is invoked each time the algorithm recognizes the
+ input vertices as edges.
+ ]
+ [
+ Each vertex descriptor dereferenced from `vertex_iterator` must be
+ a valid argument.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`dimension_count`]
+ [
+ An __MPL_Integral_Constant__ representing the number of bits in
+ each bitset to be associated with each vertex.
+ ]
+ []
+ [
+ If the value type of `PositionMap` is an instantiation of
+ __std_bitset__, then an __MPL_Integral_Constant__ representing its
+ size; otherwise required.
+ ]
+ ]
+ [
+ [`position_map`]
+ [
+ Maps each vertex to an object representing a bitset in the
+ resulting layout.
+ ]
+ [
+ Each vertex descriptor dereferenced from `vertex_iterator` must be
+ a valid key.
+ ]
+ [`dummy_property_map()`]
+ ]
+]
+
+The last two parameters can be deduced by type. However, if for some reason
+you need to specify their names, remember that the __BGL__ prefixes each
+__Boost_Parameter__ keyword with an underscore and defines it in the
+`boost::graph::keywords` namespace.
+[endsect] [/ Parameters]
+
+[section Example]
+The first graph will have a layout of bitsets, each carrying four bits. The
+size of each bitset is fixed at compile time, but the position map holds this
+information, so the __count_bitset_grid_layout_vertices__ function must take it
+in. In order for this function to be called during construction of the graph,
+the position map must be external to the graph.
+
+[example__bitset_grid_layouts__static]
+
+The bitsets in the layout of the second graph will carry five bits each. This
+time, the memory will be allocated at runtime, so the `dimension_count`
+parameter is required. Note that the order of the last two arguments can
+differ from the positional definition of the layout function.
+
+[example__bitset_grid_layouts__dynamic]
+
+The complete example program can be compiled from this file:
+<__example_bitset_grid_layouts_cpp__>.
+[endsect]
+
+[endsect] [/ set_bitset_grid_layout]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/set_bt_cubic_hcomb_layout.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/set_bt_cubic_hcomb_layout.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,523 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>set_bitruncated_cubic_honeycomb_layout</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="count_upsilon_tessel_verts.html" title="count_upsilon_tessellation_layout_vertices">
+<link rel="next" href="count_bt_cubic_hcomb_verts.html" title="count_bitruncated_cubic_honeycomb_layout_vertices">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="count_upsilon_tessel_verts.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="count_bt_cubic_hcomb_verts.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.set_bt_cubic_hcomb_layout"></a><a class="link" href="set_bt_cubic_hcomb_layout.html" title="set_bitruncated_cubic_honeycomb_layout"><code class="computeroutput"><span class="identifier">set_bitruncated_cubic_honeycomb_layout</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bt_cubic_hcomb_layout.prototype"></a><a class="link" href="set_bt_cubic_hcomb_layout.html#index.set_bt_cubic_hcomb_layout.prototype" title="Prototype">Prototype</a>
+</h3></div></div></div>
+<p>
+ The function prototype that takes in <a href="http://www.boost.org/libs/graph/doc/bgl_named_params.html" target="_top">old-style
+ named parameters</a> is always defined.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">VertexIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Params</span><span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_bitruncated_cubic_honeycomb_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Params</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">params</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ The function prototype that explicitly takes in all parameters is defined
+ if the <code class="computeroutput"><span class="identifier">BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS</span></code>
+ preprocessor token is defined--that is, if you set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ to 9 or higher.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span>
+ <span class="keyword">typename</span> <span class="identifier">VertexIterator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Dimensions</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Scalar</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">WraparoundPolicy</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointFactory</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionIndexMap</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionMap</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point</span>
+ <span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_bitruncated_cubic_honeycomb_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Dimensions</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">Scalar</span> <span class="identifier">inscribed_radius</span>
+ <span class="special">,</span> <span class="identifier">WraparoundPolicy</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">wraparound_policy</span>
+ <span class="special">,</span> <span class="identifier">PointFactory</span> <span class="identifier">point_factory</span>
+ <span class="special">,</span> <span class="identifier">PositionIndexMap</span> <span class="identifier">position_index_map</span>
+ <span class="special">,</span> <span class="identifier">PositionMap</span> <span class="identifier">position_map</span>
+ <span class="special">,</span> <span class="identifier">Point</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">origin</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ Otherwise, the following function prototype is defined if the <code class="computeroutput"><span class="identifier">BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_5_PARAMS</span></code>
+ preprocessor token is defined--that is, if you <span class="emphasis"><em>don't</em></span>
+ set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ lower than its default value of 5.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span>
+ <span class="keyword">typename</span> <span class="identifier">VertexIterator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Dimensions</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Scalar</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">WraparoundPolicy</span>
+ <span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_bitruncated_cubic_honeycomb_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Dimensions</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">Scalar</span> <span class="identifier">inscribed_radius</span>
+ <span class="special">,</span> <span class="identifier">WraparoundPolicy</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">wraparound_policy</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ If you need to pass in any additional arguments, then either you must set
+ <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ to 9 or higher, or you must use the first prototype instead.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bt_cubic_hcomb_layout.description"></a><a class="link" href="set_bt_cubic_hcomb_layout.html#index.set_bt_cubic_hcomb_layout.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ This algorithm performs layout of directed or undirected graphs, positioning
+ each vertex at the centroid of a <a href="http://en.wikipedia.org/wiki/Truncated_octahedron" target="_top">truncated
+ octahedron</a> in a <a href="http://en.wikipedia.org/wiki/Bitruncated_cubic_honeycomb" target="_top">bitruncated
+ cubic honeycomb</a> that fits the specified dimensions. The edge function
+ will be invoked for each pair of vertices whose corresponding <a href="http://en.wikipedia.org/wiki/Truncated_octahedron" target="_top">truncated
+ octahedra</a> share a face in the honeycomb.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bt_cubic_hcomb_layout.definition"></a><a class="link" href="set_bt_cubic_hcomb_layout.html#index.set_bt_cubic_hcomb_layout.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/set_bt_cubic_hcomb_layout.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bt_cubic_hcomb_layout.type_requirements"></a><a class="link" href="set_bt_cubic_hcomb_layout.html#index.set_bt_cubic_hcomb_layout.type_requirements" title="Type Requirements">Type
+ Requirements</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Readable Iterator <span class="keyword">and</span>
+ Incrementable Iterator <span class="identifier">concepts</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">EdgeFunction</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Binary Function <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="identifier">both</span> <span class="identifier">the</span> <span class="identifier">first</span>
+ <span class="keyword">and</span> <span class="identifier">second</span> <span class="identifier">argument</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">EdgeFunction</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span>
+ <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="error">`</span><span class="identifier">point_factory</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="identifier">specified</span><span class="special">,</span> <span class="identifier">then</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span>
+ Default Constructible <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scalar</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">WraparoundPolicy</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span>
+ <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="error">`</span><span class="keyword">bool</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PointFactory</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Generator <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">PointFactory</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionIndexMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span>
+ <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Writable Property Map <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">usable</span> <span class="identifier">as</span> <span class="identifier">the</span> <span class="identifier">key</span> <span class="identifier">type</span> <span class="identifier">of</span>
+ <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span>
+ <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">usable</span> <span class="identifier">as</span> <span class="identifier">the</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="identifier">neither</span> <span class="error">`</span><span class="identifier">point_factory</span><span class="error">`</span> <span class="identifier">nor</span> <span class="error">`</span><span class="identifier">origin</span><span class="error">`</span> <span class="identifier">are</span> <span class="identifier">specified</span><span class="special">,</span> <span class="identifier">then</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span>
+ <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scalar</span><span class="error">`</span> <span class="keyword">and</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">index</span> <span class="identifier">operators</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="keyword">and</span>
+ <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">interoperable</span> <span class="identifier">arithmetic</span><span class="special">-</span><span class="identifier">wise</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bt_cubic_hcomb_layout.parameters"></a><a class="link" href="set_bt_cubic_hcomb_layout.html#index.set_bt_cubic_hcomb_layout.parameters" title="Parameters">Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Runtime requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An iterator over the vertices of a graph. The algorithm will store
+ copies of the vertex descriptors dereferenced from it.
+ </p>
+ </td>
+<td>
+ <p>
+ If this iterator points to the beginning of a range of vertices
+ in a graph, then this range must at least as large as the value
+ returned by <code class="literal"><a class="link" href="count_bt_cubic_hcomb_verts.html" title="count_bitruncated_cubic_honeycomb_layout_vertices">count_bitruncated_cubic_honeycomb_layout_vertices</a>(dimensions,
+ inscribed_radius, position_index_map)</code>.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">edge_function</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A function that is invoked each time the algorithm recognizes the
+ input vertices as edges.
+ </p>
+ </td>
+<td>
+ <p>
+ Each vertex descriptor dereferenced from <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ must be a valid argument.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimensions</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The physical size of the resulting layout.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ Furthermore, If <code class="computeroutput"><span class="identifier">point_factory</span></code>
+ is not specified, then the default constructor of <code class="computeroutput"><span class="identifier">Dimensions</span></code> must ensure that the
+ object returned fulfills this requirement.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">inscribed_radius</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The radius of the sphere inscribed by the <a href="http://en.wikipedia.org/wiki/Truncated_octahedron" target="_top">truncated
+ octahedron</a> that each vertex represents. See the <a class="link" href="set_bt_cubic_hcomb_layout.html#index.set_bt_cubic_hcomb_layout.description" title="Description">description</a>
+ for further information.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="number">1</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">wraparound_policy</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An object whose index operator returns a boolean flag indicating
+ whether or not the algorithm will allow edges to wrap around in
+ the specified dimension.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ An object whose index operator always returns <code class="computeroutput"><span class="keyword">false</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">point_factory</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A function that constructs and returns <code class="computeroutput"><span class="identifier">Point</span></code>
+ objects. Required if the default constructor of <code class="computeroutput"><span class="identifier">Point</span></code>
+ does not exist or prevents its index operator from fulfilling its
+ runtime requirement.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator of each object returned must accept values returned
+ by the index operator of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">value_factory<Dimensions>()</code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_index_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different upsilon tessellation layouts to reside on different dimensional
+ planes.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values in the range <code class="computeroutput"><span class="special">[</span><span class="number">0</span><span class="special">,</span> <span class="number">2</span><span class="special">]</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">identity_property_map()</code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each vertex to a <code class="computeroutput"><span class="identifier">Point</span></code>
+ object representing a position in the resulting layout.
+ </p>
+ </td>
+<td>
+ <p>
+ Each vertex descriptor dereferenced from <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ must be a valid key.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dummy_property_map</span><span class="special">()</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">origin</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An object representing the vertex position whose coordinates are
+ at the lower bound of each dimension.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ A <code class="computeroutput"><span class="identifier">Point</span></code> whose index
+ operator returns zero for each of the input dimensions returned
+ by the index operator of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ Remember that the BGL
+ prefixes each Boost.Parameter
+ keyword with an underscore and defines it in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span></code>
+ namespace.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_bt_cubic_hcomb_layout.example"></a><a class="link" href="set_bt_cubic_hcomb_layout.html#index.set_bt_cubic_hcomb_layout.example" title="Example">Example</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">ublas</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">Point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertex_distance_t</span> <span class="identifier">PositionTag</span><span class="special">;</span>
+
+ <span class="identifier">Point</span> <span class="identifier">dimensions</span><span class="special">(</span><span class="number">3</span><span class="special">);</span>
+
+ <span class="identifier">dimensions</span><span class="special">(</span><span class="number">0</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">dimensions</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">=</span> <span class="number">7.0</span><span class="special">;</span>
+ <span class="identifier">dimensions</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">=</span> <span class="number">8.0</span><span class="special">;</span>
+
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adjacency_list</span><span class="special"><</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multisetS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">listS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">undirectedS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">property</span><span class="special"><</span><span class="identifier">PositionTag</span><span class="special">,</span><span class="identifier">Point</span><span class="special">></span>
+ <span class="special">></span> <span class="identifier">graph</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">count_bitruncated_cubic_honeycomb_layout_vertices</span><span class="special">(</span><span class="identifier">dimensions</span><span class="special">)</span>
+ <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">bool</span><span class="special">,</span><span class="number">3</span><span class="special">></span> <span class="identifier">wraparound_policy</span> <span class="special">=</span> <span class="special">{{</span><span class="keyword">false</span><span class="special">,</span> <span class="keyword">true</span><span class="special">,</span> <span class="keyword">true</span><span class="special">}};</span>
+
+<span class="preprocessor">#ifdef</span> <span class="identifier">BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">set_bitruncated_cubic_honeycomb_layout</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertices</span><span class="special">(</span><span class="identifier">graph</span><span class="special">).</span><span class="identifier">first</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_2way_edge_adder</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_wraparound_policy</span> <span class="special">=</span> <span class="identifier">wraparound_policy</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_point_factory</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="identifier">Point</span><span class="special">(</span><span class="number">3</span><span class="special">))</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_position_map</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span>
+ <span class="identifier">PositionTag</span><span class="special">()</span>
+ <span class="special">,</span> <span class="identifier">graph</span>
+ <span class="special">)</span>
+ <span class="special">);</span>
+<span class="preprocessor">#else</span> <span class="comment">// !BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS
+</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">set_bitruncated_cubic_honeycomb_layout</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertices</span><span class="special">(</span><span class="identifier">graph</span><span class="special">).</span><span class="identifier">first</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_2way_edge_adder</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dimensions</span><span class="special">(</span>
+ <span class="identifier">dimensions</span>
+ <span class="special">).</span><span class="identifier">wraparound_policy</span><span class="special">(</span>
+ <span class="identifier">wraparound_policy</span>
+ <span class="special">).</span><span class="identifier">point_factory</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="identifier">Point</span><span class="special">(</span><span class="number">3</span><span class="special">))</span>
+ <span class="special">).</span><span class="identifier">position_map</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">graph</span><span class="special">)</span>
+ <span class="special">)</span>
+ <span class="special">);</span>
+<span class="preprocessor">#endif</span> <span class="comment">// BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS
+</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">print_graph</span><span class="special">(</span><span class="identifier">graph</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">graph</span><span class="special">));</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ The complete example program can be compiled from this file: <example/bitruncated_cubic_honeycomb.cpp>.
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="count_upsilon_tessel_verts.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="count_bt_cubic_hcomb_verts.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/set_bt_cubic_hcomb_layout.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/set_bt_cubic_hcomb_layout.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,268 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:set_bt_cubic_hcomb_layout `set_bitruncated_cubic_honeycomb_layout`]
+
+[section Prototype]
+The function prototype that takes in __old_style_named_parameters__ is always
+defined.
+
+``
+namespace boost {
+
+ template <typename VertexIterator, typename EdgeFunction, typename Params>
+ void
+ set_bitruncated_cubic_honeycomb_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Params const& params
+ );
+} // namespace boost
+``
+
+The function prototype that explicitly takes in all parameters is defined if
+the `BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS` preprocessor
+token is defined--that is, if you set `BOOST_PARAMETER_MAX_ARITY` to 9 or
+higher.
+
+``
+namespace boost {
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename Dimensions
+ , typename Scalar
+ , typename WraparoundPolicy
+ , typename PointFactory
+ , typename PositionIndexMap
+ , typename PositionMap
+ , typename Point
+ >
+ void
+ set_bitruncated_cubic_honeycomb_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Dimensions const& dimensions
+ , Scalar inscribed_radius
+ , WraparoundPolicy const& wraparound_policy
+ , PointFactory point_factory
+ , PositionIndexMap position_index_map
+ , PositionMap position_map
+ , Point const& origin
+ );
+} // namespace boost
+``
+
+Otherwise, the following function prototype is defined if the
+`BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_5_PARAMS` preprocessor token
+is defined--that is, if you /don't/ set `BOOST_PARAMETER_MAX_ARITY` lower than
+its default value of 5.
+
+``
+namespace boost {
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename Dimensions
+ , typename Scalar
+ , typename WraparoundPolicy
+ >
+ void
+ set_bitruncated_cubic_honeycomb_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Dimensions const& dimensions
+ , Scalar inscribed_radius
+ , WraparoundPolicy const& wraparound_policy
+ );
+} // namespace boost
+``
+
+If you need to pass in any additional arguments, then either you must set
+`BOOST_PARAMETER_MAX_ARITY` to 9 or higher, or you must use the first prototype
+instead.
+[endsect] [/ Prototype]
+
+[section Description]
+This algorithm performs layout of directed or undirected graphs, positioning
+each vertex at the centroid of a __truncated_octahedron__ in a
+__bitruncated_cubic_honeycomb__ that fits the specified dimensions. The edge
+function will be invoked for each pair of vertices whose corresponding
+__truncated_octahedra__ share a face in the honeycomb.
+[endsect] [/ Description]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_set_bt_cubic_hcomb_layout_hpp__>
+``
+[endsect]
+
+[section Type Requirements]
+
+ * `VertexIterator` must model the __Readable_Iterator__ and
+ __Incrementable_Iterator__ concepts.
+ * `EdgeFunction` must model the __Binary_Function__ concept.
+ * The value type of `VertexIterator` must be convertible to both the first
+ and second argument types of `EdgeFunction`.
+ * `Dimensions` must implement an index operator that accepts an integer type
+ as a valid argument and whose return type is a reference to a numeric type.
+ * If `point_factory` is not specified, then `Dimensions` must model the
+ __Default_Constructible__ concept.
+ * `Scalar` must be a numeric type.
+ * `WraparoundPolicy` must implement an index operator that accepts an integer
+ type as a valid argument and whose return type is `bool`.
+ * `PointFactory` must model the __Generator__ concept.
+ * The return type of `PointFactory` must be convertible to `Point`.
+ * `PositionIndexMap` must implement an index operator that accepts an integer
+ type as a valid argument and whose return type is also an integer type.
+ * `PositionMap` must model the __Writable_Property_Map__ concept.
+ * The value type of `VertexIterator` must be usable as the key type of
+ `PositionMap`.
+ * `Point` must implement an index operator that accepts an integer type as a
+ valid argument and whose return type is a reference to a numeric type.
+ * `Point` must be usable as the value type of `PositionMap`.
+ * If neither `point_factory` nor `origin` are specified, then `Dimensions`
+ must be convertible to `Point`.
+ * `Scalar` and the return types of the index operators of `Dimensions` and
+ `Point` must be interoperable arithmetic-wise.
+
+[endsect]
+
+[section Parameters]
+[table
+ [[Parameter][Description][Runtime requirements][Default]]
+ [
+ [`vertex_iterator`]
+ [
+ An iterator over the vertices of a graph. The algorithm will store
+ copies of the vertex descriptors dereferenced from it.
+ ]
+ [
+ If this iterator points to the beginning of a range of vertices
+ in a graph, then this range must at least as large as the value
+ returned by
+ [^_count_bitruncated_cubic_honeycomb_layout_vertices_(dimensions,
+ inscribed_radius, position_index_map)].
+ ]
+ [None; always required.]
+ ]
+ [
+ [`edge_function`]
+ [
+ A function that is invoked each time the algorithm recognizes the
+ input vertices as edges.
+ ]
+ [
+ Each vertex descriptor dereferenced from `vertex_iterator` must be
+ a valid argument.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`dimensions`]
+ [The physical size of the resulting layout.]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`. Furthermore, If `point_factory`
+ is not specified, then the default constructor of `Dimensions`
+ must ensure that the object returned fulfills this requirement.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`inscribed_radius`]
+ [
+ The radius of the sphere inscribed by the __truncated_octahedron__
+ that each vertex represents. See the
+ __set_bitruncated_cubic_honeycomb_layout__description__ for further
+ information.
+ ]
+ []
+ [`1`]
+ ]
+ [
+ [`wraparound_policy`]
+ [
+ An object whose index operator returns a boolean flag indicating
+ whether or not the algorithm will allow edges to wrap around in
+ the specified dimension.
+ ]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [An object whose index operator always returns `false`.]
+ ]
+ [
+ [`point_factory`]
+ [
+ A function that constructs and returns `Point` objects. Required
+ if the default constructor of `Point` does not exist or prevents
+ its index operator from fulfilling its runtime requirement.
+ ]
+ [
+ The index operator of each object returned must accept values
+ returned by the index operator of `position_index_map`.
+ ]
+ [[^_value_factory_<Dimensions>()]]
+ ]
+ [
+ [`position_index_map`]
+ [
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different upsilon tessellation layouts to reside on different
+ dimensional planes.
+ ]
+ [The index operator must accept values in the range `[0, 2]`.]
+ [[^_identity_property_map_()]]
+ ]
+ [
+ [`position_map`]
+ [
+ Maps each vertex to a `Point` object representing a position in the
+ resulting layout.
+ ]
+ [
+ Each vertex descriptor dereferenced from `vertex_iterator` must be
+ a valid key.
+ ]
+ [`dummy_property_map()`]
+ ]
+ [
+ [`origin`]
+ [
+ An object representing the vertex position whose coordinates are
+ at the lower bound of each dimension.
+ ]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [
+ A `Point` whose index operator returns zero for each of the input
+ dimensions returned by the index operator of `position_index_map`.
+ ]
+ ]
+]
+
+Remember that the __BGL__ prefixes each __Boost_Parameter__ keyword with an
+underscore and defines it in the `boost::graph::keywords` namespace.
+[endsect] [/ Parameters]
+
+[section Example]
+[example__bitruncated_cubic_honeycomb]
+
+The complete example program can be compiled from this file:
+<__example_bitruncated_cubic_honeycomb_cpp__>.
+[endsect]
+
+[endsect] [/ set_bitruncated_cubic_honeycomb_layout]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/set_orthogonal_grid_layout.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/set_orthogonal_grid_layout.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,601 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>set_orthogonal_grid_layout</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="../index.html" title="index 0.1">
+<link rel="next" href="count_ortho_grid_verts.html" title="count_orthogonal_grid_layout_vertices">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="count_ortho_grid_verts.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.set_orthogonal_grid_layout"></a><a class="link" href="set_orthogonal_grid_layout.html" title="set_orthogonal_grid_layout"><code class="computeroutput"><span class="identifier">set_orthogonal_grid_layout</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_orthogonal_grid_layout.prototype"></a><a class="link" href="set_orthogonal_grid_layout.html#index.set_orthogonal_grid_layout.prototype" title="Prototype">Prototype</a>
+</h3></div></div></div>
+<p>
+ The function prototype that takes in <a href="http://www.boost.org/libs/graph/doc/bgl_named_params.html" target="_top">old-style
+ named parameters</a> is always defined.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">VertexIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Params</span><span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_orthogonal_grid_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Params</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">params</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ The function prototype that explicitly takes in all parameters is defined
+ if the <code class="computeroutput"><span class="identifier">BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_TAKES_ALL_PARAMS</span></code>
+ preprocessor token is defined--that is, if you set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ to 11 or higher.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span>
+ <span class="keyword">typename</span> <span class="identifier">VertexIterator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Dimensions</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">DimensionCount</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">WraparoundPolicy</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointFactory</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionIndexMap</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Scale</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionMap</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point</span>
+ <span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_orthogonal_grid_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Dimensions</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">DimensionCount</span> <span class="identifier">dimension_count</span>
+ <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">is_zeta</span>
+ <span class="special">,</span> <span class="identifier">WraparoundPolicy</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">wraparound_policy</span>
+ <span class="special">,</span> <span class="identifier">PointFactory</span> <span class="identifier">point_factory</span>
+ <span class="special">,</span> <span class="identifier">PositionIndexMap</span> <span class="identifier">position_index_map</span>
+ <span class="special">,</span> <span class="identifier">Scale</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">scale</span>
+ <span class="special">,</span> <span class="identifier">PositionMap</span> <span class="identifier">position_map</span>
+ <span class="special">,</span> <span class="identifier">Point</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">origin</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ Otherwise, the following function prototype is defined if the <code class="computeroutput"><span class="identifier">BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_TAKES_5_PARAMS</span></code>
+ preprocessor token is defined--that is, if you <span class="emphasis"><em>don't</em></span>
+ set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ lower than its default value of 5.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span>
+ <span class="keyword">typename</span> <span class="identifier">VertexIterator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Dimensions</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">DimensionCount</span>
+ <span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_orthogonal_grid_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Dimensions</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">DimensionCount</span> <span class="identifier">dimension_count</span>
+ <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">is_zeta</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ If you need to pass in any additional arguments, then either you must set
+ <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ to 11 or higher, or you must use the first prototype instead.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_orthogonal_grid_layout.description"></a><a class="link" href="set_orthogonal_grid_layout.html#index.set_orthogonal_grid_layout.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ This algorithm performs layout of directed or undirected graphs, positioning
+ each vertex at a point in a standard rectangular grid that fits the specified
+ dimensions. The edge function will be invoked for each pair of vertices that
+ are horizontally or vertically next to each other in the layout. If a zeta layout is
+ requested, then the edge function will also be invoked for each pair of vertices
+ that are diagonally next to each other.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_orthogonal_grid_layout.definition"></a><a class="link" href="set_orthogonal_grid_layout.html#index.set_orthogonal_grid_layout.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/set_orthogonal_grid_layout.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_orthogonal_grid_layout.type_requirements"></a><a class="link" href="set_orthogonal_grid_layout.html#index.set_orthogonal_grid_layout.type_requirements" title="Type Requirements">Type
+ Requirements</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Readable Iterator <span class="keyword">and</span>
+ Incrementable Iterator <span class="identifier">concepts</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">EdgeFunction</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Binary Function <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="identifier">both</span> <span class="identifier">the</span> <span class="identifier">first</span>
+ <span class="keyword">and</span> <span class="identifier">second</span> <span class="identifier">argument</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">EdgeFunction</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span>
+ <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="error">`</span><span class="identifier">point_factory</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="identifier">specified</span><span class="special">,</span> <span class="identifier">then</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span>
+ Default Constructible <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">DimensionCount</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> MPL Integral Constant <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">that</span> <span class="error">`</span><span class="identifier">DimensionCount</span><span class="error">`</span> <span class="identifier">represents</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">greater</span> <span class="identifier">than</span> <span class="number">1.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">WraparoundPolicy</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span>
+ <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="error">`</span><span class="keyword">bool</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PointFactory</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Generator <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">PointFactory</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionIndexMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span>
+ <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scale</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span>
+ <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="identifier">neither</span> <span class="error">`</span><span class="identifier">point_factory</span><span class="error">`</span> <span class="identifier">nor</span> <span class="error">`</span><span class="identifier">scale</span><span class="error">`</span> <span class="identifier">are</span> <span class="identifier">specified</span><span class="special">,</span> <span class="identifier">then</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span>
+ <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Scale</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Writable Property Map <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">usable</span> <span class="identifier">as</span> <span class="identifier">the</span> <span class="identifier">key</span> <span class="identifier">type</span> <span class="identifier">of</span>
+ <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span>
+ <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">usable</span> <span class="identifier">as</span> <span class="identifier">the</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="identifier">neither</span> <span class="error">`</span><span class="identifier">point_factory</span><span class="error">`</span> <span class="identifier">nor</span> <span class="error">`</span><span class="identifier">origin</span><span class="error">`</span> <span class="identifier">are</span> <span class="identifier">specified</span><span class="special">,</span> <span class="identifier">then</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span>
+ <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="keyword">return</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">index</span> <span class="identifier">operators</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">Scale</span><span class="error">`</span><span class="special">,</span> <span class="keyword">and</span>
+ <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">interoperable</span> <span class="identifier">arithmetic</span><span class="special">-</span><span class="identifier">wise</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_orthogonal_grid_layout.parameters"></a><a class="link" href="set_orthogonal_grid_layout.html#index.set_orthogonal_grid_layout.parameters" title="Parameters">Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Runtime requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An iterator over the vertices of a graph. The algorithm will store
+ copies of the vertex descriptors dereferenced from it.
+ </p>
+ </td>
+<td>
+ <p>
+ If this iterator points to the beginning of a range of vertices
+ in a graph, then this range must at least as large as the value
+ returned by <code class="literal"><a class="link" href="count_ortho_grid_verts.html" title="count_orthogonal_grid_layout_vertices">count_orthogonal_grid_layout_vertices</a>(dimensions,
+ dimension_count, point_factory, position_index_map, scale)</code>.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">edge_function</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A function that is invoked each time the algorithm recognizes the
+ input vertices as edges.
+ </p>
+ </td>
+<td>
+ <p>
+ Each vertex descriptor dereferenced from <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ must be a valid argument.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimensions</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The physical size of the resulting layout.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ Furthermore, If <code class="computeroutput"><span class="identifier">point_factory</span></code>
+ is not specified, then the default constructor of <code class="computeroutput"><span class="identifier">Dimensions</span></code> must ensure that the
+ object returned fulfills this requirement.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimension_count</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An MPL Integral Constant representing
+ the number of dimensions the resulting layout will straddle.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ An MPL Integral Constant representing
+ the value <code class="computeroutput"><span class="number">2</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">is_zeta</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A boolean flag that controls whether or not the algorithm will
+ recognize diagonal edges. In two dimensions, setting this flag
+ to <code class="computeroutput"><span class="keyword">true</span></code> means that
+ a vertex will have 8 neighbors instead of 4; in three dimensions,
+ a vertex will have 26 neighbors instead of 6; in N dimensions,
+ a vertex will have (3 ^ N - 1) neighbors instead of 2 * N (assuming
+ wraparound is allowed for all dimensions). See the <a class="link" href="set_orthogonal_grid_layout.html#index.set_orthogonal_grid_layout.description" title="Description">description</a>
+ for further information.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">wraparound_policy</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An object whose index operator returns a boolean flag indicating
+ whether or not the algorithm will allow edges to wrap around in
+ the specified dimension.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ An object whose index operator always returns <code class="computeroutput"><span class="keyword">false</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">point_factory</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A function that constructs and returns <code class="computeroutput"><span class="identifier">Point</span></code>
+ objects. Required if the default constructor of <code class="computeroutput"><span class="identifier">Point</span></code>
+ does not exist or prevents its index operator from fulfilling its
+ runtime requirement.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator of each object returned must accept values returned
+ by the index operator of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">value_factory<Dimensions>()</code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_index_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different orthogonal layouts to reside on different dimensional
+ planes.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values in the range <code class="computeroutput"><span class="special">[</span><span class="number">0</span><span class="special">,</span> <span class="identifier">DimensionCount</span><span class="special">::</span><span class="identifier">value</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">identity_property_map()</code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">scale</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An object representing the distance between two adjacent vertices
+ in each dimension.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ A <code class="computeroutput"><span class="identifier">Point</span></code> whose index
+ operator returns one for each of the input dimensions returned
+ by the index operator of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each vertex to a <code class="computeroutput"><span class="identifier">Point</span></code>
+ object representing a position in the resulting layout.
+ </p>
+ </td>
+<td>
+ <p>
+ Each vertex descriptor dereferenced from <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ must be a valid key.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dummy_property_map</span><span class="special">()</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">origin</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An object representing the vertex position whose coordinates are
+ at the lower bound of each dimension.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ A <code class="computeroutput"><span class="identifier">Point</span></code> whose index
+ operator returns zero for each of the input dimensions returned
+ by the index operator of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ Remember that the BGL
+ prefixes each Boost.Parameter
+ keyword with an underscore and defines it in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span></code>
+ namespace.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_orthogonal_grid_layout.example"></a><a class="link" href="set_orthogonal_grid_layout.html#index.set_orthogonal_grid_layout.example" title="Example">Example</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">ublas</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">Point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertex_distance_t</span> <span class="identifier">PositionTag</span><span class="special">;</span>
+
+ <span class="identifier">Point</span> <span class="identifier">origin</span><span class="special">(</span><span class="number">3</span><span class="special">),</span> <span class="identifier">scale</span><span class="special">(</span><span class="number">3</span><span class="special">),</span> <span class="identifier">dimensions</span><span class="special">(</span><span class="number">3</span><span class="special">);</span>
+
+ <span class="identifier">scale</span><span class="special">(</span><span class="number">0</span><span class="special">)</span> <span class="special">=</span> <span class="number">2.0</span><span class="special">;</span>
+ <span class="identifier">scale</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">scale</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span>
+ <span class="identifier">dimensions</span><span class="special">(</span><span class="number">0</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">dimensions</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">=</span> <span class="number">6.0</span><span class="special">;</span>
+ <span class="identifier">dimensions</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">=</span> <span class="number">3.0</span><span class="special">;</span>
+
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adjacency_list</span><span class="special"><</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multisetS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">listS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">undirectedS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">property</span><span class="special"><</span><span class="identifier">PositionTag</span><span class="special">,</span><span class="identifier">Point</span><span class="special">></span>
+ <span class="special">></span> <span class="identifier">graph</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">count_orthogonal_grid_layout_vertices</span><span class="special">(</span>
+ <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="number">3</span><span class="special">>()</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_scale</span> <span class="special">=</span> <span class="identifier">scale</span>
+ <span class="special">)</span>
+ <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">bool</span><span class="special">,</span><span class="number">3</span><span class="special">></span> <span class="identifier">wraparound_policy</span> <span class="special">=</span> <span class="special">{{</span><span class="keyword">true</span><span class="special">,</span> <span class="keyword">false</span><span class="special">,</span> <span class="keyword">true</span><span class="special">}};</span>
+
+ <span class="identifier">origin</span><span class="special">(</span><span class="number">0</span><span class="special">)</span> <span class="special">=</span> <span class="special">-</span><span class="number">2.0</span><span class="special">;</span>
+ <span class="identifier">origin</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">=</span> <span class="special">-</span><span class="number">2.5</span><span class="special">;</span>
+ <span class="identifier">origin</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">=</span> <span class="special">-</span><span class="number">1.0</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">set_orthogonal_grid_layout</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertices</span><span class="special">(</span><span class="identifier">graph</span><span class="special">).</span><span class="identifier">first</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_2way_edge_adder</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">position_map</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">graph</span><span class="special">)</span>
+ <span class="special">).</span><span class="identifier">is_zeta</span><span class="special">(</span>
+ <span class="keyword">true</span>
+ <span class="special">).</span><span class="identifier">dimension_count</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="number">3</span><span class="special">>()</span>
+ <span class="special">).</span><span class="identifier">dimensions</span><span class="special">(</span>
+ <span class="identifier">dimensions</span>
+ <span class="special">).</span><span class="identifier">scale</span><span class="special">(</span>
+ <span class="identifier">scale</span>
+ <span class="special">).</span><span class="identifier">origin</span><span class="special">(</span>
+ <span class="identifier">origin</span>
+ <span class="special">).</span><span class="identifier">point_factory</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="identifier">Point</span><span class="special">(</span><span class="number">3</span><span class="special">))</span>
+ <span class="special">).</span><span class="identifier">wraparound_policy</span><span class="special">(</span>
+ <span class="identifier">wraparound_policy</span>
+ <span class="special">)</span>
+ <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">print_graph</span><span class="special">(</span><span class="identifier">graph</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">graph</span><span class="special">));</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="identifier">graph</span><span class="special">.</span><span class="identifier">clear</span><span class="special">();</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">set_orthogonal_grid_layout</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_vertex_inserter</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_2way_edge_adder</span><span class="special">(</span><span class="identifier">graph</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_scale</span> <span class="special">=</span> <span class="identifier">scale</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_origin</span> <span class="special">=</span> <span class="identifier">origin</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_position_map</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span>
+ <span class="identifier">PositionTag</span><span class="special">()</span>
+ <span class="special">,</span> <span class="identifier">graph</span>
+ <span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_point_factory</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="identifier">Point</span><span class="special">(</span><span class="number">2</span><span class="special">))</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_wraparound_policy</span> <span class="special">=</span> <span class="identifier">wraparound_policy</span>
+ <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">print_graph</span><span class="special">(</span><span class="identifier">graph</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">graph</span><span class="special">));</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ The complete example program can be compiled from this file: <example/orthogonal_grid_layouts.cpp>.
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="count_ortho_grid_verts.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/set_orthogonal_grid_layout.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/set_orthogonal_grid_layout.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,306 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:set_orthogonal_grid_layout `set_orthogonal_grid_layout`]
+
+[section Prototype]
+The function prototype that takes in __old_style_named_parameters__ is always
+defined.
+
+``
+namespace boost {
+
+ template <typename VertexIterator, typename EdgeFunction, typename Params>
+ void
+ set_orthogonal_grid_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Params const& params
+ );
+} // namespace boost
+``
+
+The function prototype that explicitly takes in all parameters is defined if
+the `BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_TAKES_ALL_PARAMS` preprocessor
+token is defined--that is, if you set `BOOST_PARAMETER_MAX_ARITY` to 11 or
+higher.
+
+``
+namespace boost {
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename Dimensions
+ , typename DimensionCount
+ , typename WraparoundPolicy
+ , typename PointFactory
+ , typename PositionIndexMap
+ , typename Scale
+ , typename PositionMap
+ , typename Point
+ >
+ void
+ set_orthogonal_grid_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Dimensions const& dimensions
+ , DimensionCount dimension_count
+ , bool is_zeta
+ , WraparoundPolicy const& wraparound_policy
+ , PointFactory point_factory
+ , PositionIndexMap position_index_map
+ , Scale const& scale
+ , PositionMap position_map
+ , Point const& origin
+ );
+} // namespace boost
+``
+
+Otherwise, the following function prototype is defined if the
+`BOOST_GRAPH_SET_ORTHOGONAL_GRID_LAYOUT_TAKES_5_PARAMS` preprocessor token is
+defined--that is, if you /don't/ set `BOOST_PARAMETER_MAX_ARITY` lower than its
+default value of 5.
+
+``
+namespace boost {
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename Dimensions
+ , typename DimensionCount
+ >
+ void
+ set_orthogonal_grid_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Dimensions const& dimensions
+ , DimensionCount dimension_count
+ , bool is_zeta
+ );
+} // namespace boost
+``
+
+If you need to pass in any additional arguments, then either you must set
+`BOOST_PARAMETER_MAX_ARITY` to 11 or higher, or you must use the first
+prototype instead.
+[endsect] [/ Prototype]
+
+[section Description]
+This algorithm performs layout of directed or undirected graphs, positioning
+each vertex at a point in a standard rectangular grid that fits the specified
+dimensions. The edge function will be invoked for each pair of vertices that
+are horizontally or vertically next to each other in the layout. If a
+__zeta_layout__ is requested, then the edge function will also be invoked for
+each pair of vertices that are diagonally next to each other.
+[endsect] [/ Description]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_set_orthogonal_grid_layout_hpp__>
+``
+[endsect]
+
+[section Type Requirements]
+
+ * `VertexIterator` must model the __Readable_Iterator__ and
+ __Incrementable_Iterator__ concepts.
+ * `EdgeFunction` must model the __Binary_Function__ concept.
+ * The value type of `VertexIterator` must be convertible to both the first
+ and second argument types of `EdgeFunction`.
+ * `Dimensions` must implement an index operator that accepts an integer type
+ as a valid argument and whose return type is a reference to a numeric type.
+ * If `point_factory` is not specified, then `Dimensions` must model the
+ __Default_Constructible__ concept.
+ * `DimensionCount` must model the __MPL_Integral_Constant__ concept.
+ * The value that `DimensionCount` represents must be greater than 1.
+ * `WraparoundPolicy` must implement an index operator that accepts an integer
+ type as a valid argument and whose return type is `bool`.
+ * `PointFactory` must model the __Generator__ concept.
+ * The return type of `PointFactory` must be convertible to `Point`.
+ * `PositionIndexMap` must implement an index operator that accepts an integer
+ type as a valid argument and whose return type is also an integer type.
+ * `Scale` must implement an index operator that accepts an integer type as a
+ valid argument and whose return type is a reference to a numeric type.
+ * If neither `point_factory` nor `scale` are specified, then `Dimensions`
+ must be convertible to `Scale`.
+ * `PositionMap` must model the __Writable_Property_Map__ concept.
+ * The value type of `VertexIterator` must be usable as the key type of
+ `PositionMap`.
+ * `Point` must implement an index operator that accepts an integer type as a
+ valid argument and whose return type is a reference to a numeric type.
+ * `Point` must be usable as the value type of `PositionMap`.
+ * If neither `point_factory` nor `origin` are specified, then `Dimensions`
+ must be convertible to `Point`.
+ * The return types of the index operators of `Dimensions`, `Scale`, and
+ `Point` must be interoperable arithmetic-wise.
+
+[endsect]
+
+[section Parameters]
+[table
+ [[Parameter][Description][Runtime requirements][Default]]
+ [
+ [`vertex_iterator`]
+ [
+ An iterator over the vertices of a graph. The algorithm will store
+ copies of the vertex descriptors dereferenced from it.
+ ]
+ [
+ If this iterator points to the beginning of a range of vertices
+ in a graph, then this range must at least as large as the value
+ returned by [^_count_orthogonal_grid_layout_vertices_(dimensions,
+ dimension_count, point_factory, position_index_map, scale)].
+ ]
+ [None; always required.]
+ ]
+ [
+ [`edge_function`]
+ [
+ A function that is invoked each time the algorithm recognizes the
+ input vertices as edges.
+ ]
+ [
+ Each vertex descriptor dereferenced from `vertex_iterator` must be
+ a valid argument.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`dimensions`]
+ [The physical size of the resulting layout.]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`. Furthermore, If `point_factory`
+ is not specified, then the default constructor of `Dimensions`
+ must ensure that the object returned fulfills this requirement.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`dimension_count`]
+ [
+ An __MPL_Integral_Constant__ representing the number of dimensions
+ the resulting layout will straddle.
+ ]
+ []
+ [An __MPL_Integral_Constant__ representing the value `2`.]
+ ]
+ [
+ [`is_zeta`]
+ [
+ A boolean flag that controls whether or not the algorithm will
+ recognize diagonal edges. In two dimensions, setting this flag to
+ `true` means that a vertex will have 8 neighbors instead of 4; in
+ three dimensions, a vertex will have 26 neighbors instead of 6;
+ in N dimensions, a vertex will have (3 ^ N - 1) neighbors instead
+ of 2 * N (assuming wraparound is allowed for all dimensions). See
+ the __set_orthogonal_grid_layout__description__ for further
+ information.
+ ]
+ []
+ [`false`]
+ ]
+ [
+ [`wraparound_policy`]
+ [
+ An object whose index operator returns a boolean flag indicating
+ whether or not the algorithm will allow edges to wrap around in
+ the specified dimension.
+ ]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [An object whose index operator always returns `false`.]
+ ]
+ [
+ [`point_factory`]
+ [
+ A function that constructs and returns `Point` objects. Required
+ if the default constructor of `Point` does not exist or prevents
+ its index operator from fulfilling its runtime requirement.
+ ]
+ [
+ The index operator of each object returned must accept values
+ returned by the index operator of `position_index_map`.
+ ]
+ [[^_value_factory_<Dimensions>()]]
+ ]
+ [
+ [`position_index_map`]
+ [
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different orthogonal layouts to reside on different dimensional
+ planes.
+ ]
+ [
+ The index operator must accept values in the range
+ `[0, DimensionCount::value)`.
+ ]
+ [[^_identity_property_map_()]]
+ ]
+ [
+ [`scale`]
+ [
+ An object representing the distance between two adjacent vertices
+ in each dimension.
+ ]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [
+ A `Point` whose index operator returns one for each of the input
+ dimensions returned by the index operator of `position_index_map`.
+ ]
+ ]
+ [
+ [`position_map`]
+ [
+ Maps each vertex to a `Point` object representing a position in the
+ resulting layout.
+ ]
+ [
+ Each vertex descriptor dereferenced from `vertex_iterator` must be
+ a valid key.
+ ]
+ [`dummy_property_map()`]
+ ]
+ [
+ [`origin`]
+ [
+ An object representing the vertex position whose coordinates are
+ at the lower bound of each dimension.
+ ]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [
+ A `Point` whose index operator returns zero for each of the input
+ dimensions returned by the index operator of `position_index_map`.
+ ]
+ ]
+]
+
+Remember that the __BGL__ prefixes each __Boost_Parameter__ keyword with an
+underscore and defines it in the `boost::graph::keywords` namespace.
+[endsect] [/ Parameters]
+
+[section Example]
+[example__orthogonal_grid_layouts]
+
+The complete example program can be compiled from this file:
+<__example_orthogonal_grid_layouts_cpp__>.
+[endsect]
+
+[endsect] [/ set_orthogonal_grid_layout]
+
Added: sandbox/graph-intrusive_layout/libs/graph/doc/set_upsilon_tessel_layout.html
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/set_upsilon_tessel_layout.html 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,548 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>set_upsilon_tessellation_layout</title>
+<link rel="stylesheet" href="../doc/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="../index.html" title="index 0.1">
+<link rel="up" href="../index.html" title="index 0.1">
+<link rel="prev" href="count_ortho_grid_verts.html" title="count_orthogonal_grid_layout_vertices">
+<link rel="next" href="count_upsilon_tessel_verts.html" title="count_upsilon_tessellation_layout_vertices">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="count_ortho_grid_verts.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="count_upsilon_tessel_verts.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="index.set_upsilon_tessel_layout"></a><a class="link" href="set_upsilon_tessel_layout.html" title="set_upsilon_tessellation_layout"><code class="computeroutput"><span class="identifier">set_upsilon_tessellation_layout</span></code></a>
+</h2></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_upsilon_tessel_layout.prototype"></a><a class="link" href="set_upsilon_tessel_layout.html#index.set_upsilon_tessel_layout.prototype" title="Prototype">Prototype</a>
+</h3></div></div></div>
+<p>
+ The function prototype that takes in <a href="http://www.boost.org/libs/graph/doc/bgl_named_params.html" target="_top">old-style
+ named parameters</a> is always defined.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">VertexIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Params</span><span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_upsilon_tessellation_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Params</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">params</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ The function prototype that explicitly takes in all parameters is defined
+ if the <code class="computeroutput"><span class="identifier">BOOST_GRAPH_SET_UPSILON_TESSELLATION_LAYOUT_TAKES_ALL_PARAMS</span></code>
+ preprocessor token is defined--that is, if you set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ to 10 or higher.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span>
+ <span class="keyword">typename</span> <span class="identifier">VertexIterator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Dimensions</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Scalar</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">WraparoundPolicy</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointFactory</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionIndexMap</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PositionMap</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point</span>
+ <span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_upsilon_tessellation_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Dimensions</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">Scalar</span> <span class="identifier">vertex_centroid_distance</span>
+ <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">has_square_origin</span>
+ <span class="special">,</span> <span class="identifier">WraparoundPolicy</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">wraparound_policy</span>
+ <span class="special">,</span> <span class="identifier">PointFactory</span> <span class="identifier">point_factory</span>
+ <span class="special">,</span> <span class="identifier">PositionIndexMap</span> <span class="identifier">position_index_map</span>
+ <span class="special">,</span> <span class="identifier">PositionMap</span> <span class="identifier">position_map</span>
+ <span class="special">,</span> <span class="identifier">Point</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">origin</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ Otherwise, the following function prototype is defined if the <code class="computeroutput"><span class="identifier">BOOST_GRAPH_SET_UPSILON_TESSELLATION_LAYOUT_TAKES_5_PARAMS</span></code>
+ preprocessor token is defined--that is, if you <span class="emphasis"><em>don't</em></span>
+ set <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ lower than its default value of 5.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special"><</span>
+ <span class="keyword">typename</span> <span class="identifier">VertexIterator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">EdgeFunction</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Dimensions</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Scalar</span>
+ <span class="special">></span>
+ <span class="keyword">void</span>
+ <span class="identifier">set_upsilon_tessellation_layout</span><span class="special">(</span>
+ <span class="identifier">VertexIterator</span> <span class="identifier">vertex_iterator</span>
+ <span class="special">,</span> <span class="identifier">EdgeFunction</span> <span class="identifier">edge_function</span>
+ <span class="special">,</span> <span class="identifier">Dimensions</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">Scalar</span> <span class="identifier">vertex_centroid_distance</span>
+ <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">has_square_origin</span>
+ <span class="special">);</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+<p>
+ </p>
+<p>
+ If you need to pass in any additional arguments, then either you must set
+ <code class="computeroutput"><span class="identifier">BOOST_PARAMETER_MAX_ARITY</span></code>
+ to 10 or higher, or you must use the first prototype instead.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_upsilon_tessel_layout.description"></a><a class="link" href="set_upsilon_tessel_layout.html#index.set_upsilon_tessel_layout.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ This algorithm performs layout of directed or undirected graphs, positioning
+ each vertex at the centroid of a square or an octagon in an <a href="http://www.astrolog.org/labyrnth/algrithm.htm" target="_top">upsilon
+ tessellation</a> that fits the specified dimensions. The edge function
+ will be invoked for each pair of vertices whose corresponding polygons share
+ a physical edge in the tessellation.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_upsilon_tessel_layout.definition"></a><a class="link" href="set_upsilon_tessel_layout.html#index.set_upsilon_tessel_layout.definition" title="Where Defined">Where Defined</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/graph/set_upsilon_tessel_layout.hpp<span class="special">></span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_upsilon_tessel_layout.type_requirements"></a><a class="link" href="set_upsilon_tessel_layout.html#index.set_upsilon_tessel_layout.type_requirements" title="Type Requirements">Type
+ Requirements</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Readable Iterator <span class="keyword">and</span>
+ Incrementable Iterator <span class="identifier">concepts</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">EdgeFunction</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Binary Function <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="identifier">both</span> <span class="identifier">the</span> <span class="identifier">first</span>
+ <span class="keyword">and</span> <span class="identifier">second</span> <span class="identifier">argument</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">EdgeFunction</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span>
+ <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="error">`</span><span class="identifier">point_factory</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="identifier">specified</span><span class="special">,</span> <span class="identifier">then</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span>
+ Default Constructible <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scalar</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">WraparoundPolicy</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span>
+ <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="error">`</span><span class="keyword">bool</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PointFactory</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Generator <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">PointFactory</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionIndexMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span>
+ <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">model</span> <span class="identifier">the</span> Writable Property Map <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">VertexIterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">usable</span> <span class="identifier">as</span> <span class="identifier">the</span> <span class="identifier">key</span> <span class="identifier">type</span> <span class="identifier">of</span>
+ <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">implement</span> <span class="identifier">an</span> <span class="identifier">index</span> <span class="keyword">operator</span> <span class="identifier">that</span> <span class="identifier">accepts</span> <span class="identifier">an</span> <span class="identifier">integer</span> <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span>
+ <span class="identifier">valid</span> <span class="identifier">argument</span> <span class="keyword">and</span> <span class="identifier">whose</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">a</span> <span class="identifier">reference</span> <span class="identifier">to</span> <span class="identifier">a</span> <span class="identifier">numeric</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">usable</span> <span class="identifier">as</span> <span class="identifier">the</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">PositionMap</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">If</span> <span class="identifier">neither</span> <span class="error">`</span><span class="identifier">point_factory</span><span class="error">`</span> <span class="identifier">nor</span> <span class="error">`</span><span class="identifier">origin</span><span class="error">`</span> <span class="identifier">are</span> <span class="identifier">specified</span><span class="special">,</span> <span class="identifier">then</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span>
+ <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="error">`</span><span class="identifier">Scalar</span><span class="error">`</span> <span class="keyword">and</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">types</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">index</span> <span class="identifier">operators</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Dimensions</span><span class="error">`</span> <span class="keyword">and</span>
+ <span class="error">`</span><span class="identifier">Point</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">interoperable</span> <span class="identifier">arithmetic</span><span class="special">-</span><span class="identifier">wise</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_upsilon_tessel_layout.parameters"></a><a class="link" href="set_upsilon_tessel_layout.html#index.set_upsilon_tessel_layout.parameters" title="Parameters">Parameters</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Runtime requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An iterator over the vertices of a graph. The algorithm will store
+ copies of the vertex descriptors dereferenced from it.
+ </p>
+ </td>
+<td>
+ <p>
+ If this iterator points to the beginning of a range of vertices
+ in a graph, then this range must at least as large as the value
+ returned by <code class="literal"><a class="link" href="count_upsilon_tessel_verts.html" title="count_upsilon_tessellation_layout_vertices">count_upsilon_tessellation_layout_vertices</a>(dimensions,
+ vertex_centroid_distance, position_index_map)</code>.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">edge_function</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A function that is invoked each time the algorithm recognizes the
+ input vertices as edges.
+ </p>
+ </td>
+<td>
+ <p>
+ Each vertex descriptor dereferenced from <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ must be a valid argument.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dimensions</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The physical size of the resulting layout.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ Furthermore, If <code class="computeroutput"><span class="identifier">point_factory</span></code>
+ is not specified, then the default constructor of <code class="computeroutput"><span class="identifier">Dimensions</span></code> must ensure that the
+ object returned fulfills this requirement.
+ </p>
+ </td>
+<td>
+ <p>
+ None; always required.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">vertex_centroid_distance</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The distance between two orthogonally adjacent vertices.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="number">1</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">has_square_origin</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A boolean flag that controls whether the vertex at the origin represents
+ a square or an octagon. See the <a class="link" href="set_upsilon_tessel_layout.html#index.set_upsilon_tessel_layout.description" title="Description">description</a>
+ for further information.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">wraparound_policy</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An object whose index operator returns a boolean flag indicating
+ whether or not the algorithm will allow edges to wrap around in
+ the specified dimension.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ An object whose index operator always returns <code class="computeroutput"><span class="keyword">false</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">point_factory</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A function that constructs and returns <code class="computeroutput"><span class="identifier">Point</span></code>
+ objects. Required if the default constructor of <code class="computeroutput"><span class="identifier">Point</span></code>
+ does not exist or prevents its index operator from fulfilling its
+ runtime requirement.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator of each object returned must accept values returned
+ by the index operator of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">value_factory<Dimensions>()</code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_index_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different upsilon tessellation layouts to reside on different dimensional
+ planes.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values in the range <code class="computeroutput"><span class="special">[</span><span class="number">0</span><span class="special">,</span> <span class="number">1</span><span class="special">]</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="literal">identity_property_map()</code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">position_map</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps each vertex to a <code class="computeroutput"><span class="identifier">Point</span></code>
+ object representing a position in the resulting layout.
+ </p>
+ </td>
+<td>
+ <p>
+ Each vertex descriptor dereferenced from <code class="computeroutput"><span class="identifier">vertex_iterator</span></code>
+ must be a valid key.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">dummy_property_map</span><span class="special">()</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">origin</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An object representing the vertex position whose coordinates are
+ at the lower bound of each dimension.
+ </p>
+ </td>
+<td>
+ <p>
+ The index operator must accept values returned by the index operator
+ of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ A <code class="computeroutput"><span class="identifier">Point</span></code> whose index
+ operator returns zero for each of the input dimensions returned
+ by the index operator of <code class="computeroutput"><span class="identifier">position_index_map</span></code>.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ Remember that the BGL
+ prefixes each Boost.Parameter
+ keyword with an underscore and defines it in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span></code>
+ namespace.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="index.set_upsilon_tessel_layout.example"></a><a class="link" href="set_upsilon_tessel_layout.html#index.set_upsilon_tessel_layout.example" title="Example">Example</a>
+</h3></div></div></div>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">ublas</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">Point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertex_distance_t</span> <span class="identifier">PositionTag</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adjacency_list</span><span class="special"><</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multisetS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">listS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">undirectedS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">property</span><span class="special"><</span><span class="identifier">PositionTag</span><span class="special">,</span><span class="identifier">Point</span><span class="special">></span>
+ <span class="special">></span>
+ <span class="identifier">Graph</span><span class="special">;</span>
+
+ <span class="identifier">Point</span> <span class="identifier">dimensions</span><span class="special">(</span><span class="number">2</span><span class="special">);</span>
+
+ <span class="identifier">dimensions</span><span class="special">(</span><span class="number">0</span><span class="special">)</span> <span class="special">=</span> <span class="number">5.0</span><span class="special">;</span>
+ <span class="identifier">dimensions</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">=</span> <span class="number">4.0</span><span class="special">;</span>
+
+ <span class="identifier">Graph</span> <span class="identifier">g</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">count_upsilon_tessellation_layout_vertices</span><span class="special">(</span><span class="identifier">dimensions</span><span class="special">));</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">bool</span><span class="special">,</span><span class="number">2</span><span class="special">></span> <span class="identifier">wraparound_policy</span> <span class="special">=</span> <span class="special">{{</span><span class="keyword">true</span><span class="special">,</span> <span class="keyword">false</span><span class="special">}};</span>
+
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">set_upsilon_tessellation_layout</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertices</span><span class="special">(</span><span class="identifier">g</span><span class="special">).</span><span class="identifier">first</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_2way_edge_adder</span><span class="special">(</span><span class="identifier">g</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dimensions</span><span class="special">(</span>
+ <span class="identifier">dimensions</span>
+ <span class="special">).</span><span class="identifier">has_square_origin</span><span class="special">(</span>
+ <span class="keyword">true</span>
+ <span class="special">).</span><span class="identifier">wraparound_policy</span><span class="special">(</span>
+ <span class="identifier">wraparound_policy</span>
+ <span class="special">).</span><span class="identifier">point_factory</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="identifier">Point</span><span class="special">(</span><span class="number">2</span><span class="special">))</span>
+ <span class="special">).</span><span class="identifier">position_map</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">g</span><span class="special">)</span>
+ <span class="special">)</span>
+ <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">print_graph</span><span class="special">(</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">g</span><span class="special">));</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph_traits</span><span class="special"><</span><span class="identifier">Graph</span><span class="special">>::</span><span class="identifier">vertex_iterator</span> <span class="identifier">vi</span><span class="special">,</span> <span class="identifier">vi_end</span><span class="special">;</span>
+
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">tie</span><span class="special">(</span><span class="identifier">vi</span><span class="special">,</span> <span class="identifier">vi_end</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertices</span><span class="special">(</span><span class="identifier">g</span><span class="special">);</span> <span class="identifier">vi</span> <span class="special">!=</span> <span class="identifier">vi_end</span><span class="special">;</span> <span class="special">++</span><span class="identifier">vi</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">clear_vertex</span><span class="special">(*</span><span class="identifier">vi</span><span class="special">,</span> <span class="identifier">g</span><span class="special">);</span>
+ <span class="special">}</span>
+
+ <span class="identifier">wraparound_policy</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">set_upsilon_tessellation_layout</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertices</span><span class="special">(</span><span class="identifier">g</span><span class="special">).</span><span class="identifier">first</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_2way_edge_adder</span><span class="special">(</span><span class="identifier">g</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">dimensions</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_wraparound_policy</span> <span class="special">=</span> <span class="identifier">wraparound_policy</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_point_factory</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="identifier">Point</span><span class="special">(</span><span class="number">2</span><span class="special">))</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">graph</span><span class="special">::</span><span class="identifier">keywords</span><span class="special">::</span><span class="identifier">_position_map</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">g</span><span class="special">)</span>
+ <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">print_graph</span><span class="special">(</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">PositionTag</span><span class="special">(),</span> <span class="identifier">g</span><span class="special">));</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ The complete example program can be compiled from this file: <example/upsilon_tessellation_layout.cpp>.
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011 Cromwell D. Enage<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="count_ortho_grid_verts.html"><img src="../doc/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../doc/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../doc/images/home.png" alt="Home"></a><a accesskey="n" href="count_upsilon_tessel_verts.html"><img src="../doc/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/graph-intrusive_layout/libs/graph/doc/set_upsilon_tessel_layout.qbk
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/doc/set_upsilon_tessel_layout.qbk 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,274 @@
+[/=============================================================================
+ Copyright (C) 2011 Cromwell D. Enage
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+=============================================================================/]
+
+[section:set_upsilon_tessel_layout `set_upsilon_tessellation_layout`]
+
+[section Prototype]
+The function prototype that takes in __old_style_named_parameters__ is always
+defined.
+
+``
+namespace boost {
+
+ template <typename VertexIterator, typename EdgeFunction, typename Params>
+ void
+ set_upsilon_tessellation_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Params const& params
+ );
+} // namespace boost
+``
+
+The function prototype that explicitly takes in all parameters is defined if
+the `BOOST_GRAPH_SET_UPSILON_TESSELLATION_LAYOUT_TAKES_ALL_PARAMS` preprocessor
+token is defined--that is, if you set `BOOST_PARAMETER_MAX_ARITY` to 10 or
+higher.
+
+``
+namespace boost {
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename Dimensions
+ , typename Scalar
+ , typename WraparoundPolicy
+ , typename PointFactory
+ , typename PositionIndexMap
+ , typename PositionMap
+ , typename Point
+ >
+ void
+ set_upsilon_tessellation_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Dimensions const& dimensions
+ , Scalar vertex_centroid_distance
+ , bool has_square_origin
+ , WraparoundPolicy const& wraparound_policy
+ , PointFactory point_factory
+ , PositionIndexMap position_index_map
+ , PositionMap position_map
+ , Point const& origin
+ );
+} // namespace boost
+``
+
+Otherwise, the following function prototype is defined if the
+`BOOST_GRAPH_SET_UPSILON_TESSELLATION_LAYOUT_TAKES_5_PARAMS` preprocessor token
+is defined--that is, if you /don't/ set `BOOST_PARAMETER_MAX_ARITY` lower than
+its default value of 5.
+
+``
+namespace boost {
+
+ template <
+ typename VertexIterator
+ , typename EdgeFunction
+ , typename Dimensions
+ , typename Scalar
+ >
+ void
+ set_upsilon_tessellation_layout(
+ VertexIterator vertex_iterator
+ , EdgeFunction edge_function
+ , Dimensions const& dimensions
+ , Scalar vertex_centroid_distance
+ , bool has_square_origin
+ );
+} // namespace boost
+``
+
+If you need to pass in any additional arguments, then either you must set
+`BOOST_PARAMETER_MAX_ARITY` to 10 or higher, or you must use the first
+prototype instead.
+[endsect] [/ Prototype]
+
+[section Description]
+This algorithm performs layout of directed or undirected graphs, positioning
+each vertex at the centroid of a square or an octagon in an
+__upsilon_tessellation__ that fits the specified dimensions. The edge function
+will be invoked for each pair of vertices whose corresponding polygons share a
+physical edge in the tessellation.
+[endsect] [/ Description]
+
+[section:definition Where Defined]
+``
+#include <__boost_graph_set_upsilon_tessel_layout_hpp__>
+``
+[endsect]
+
+[section Type Requirements]
+
+ * `VertexIterator` must model the __Readable_Iterator__ and
+ __Incrementable_Iterator__ concepts.
+ * `EdgeFunction` must model the __Binary_Function__ concept.
+ * The value type of `VertexIterator` must be convertible to both the first
+ and second argument types of `EdgeFunction`.
+ * `Dimensions` must implement an index operator that accepts an integer type
+ as a valid argument and whose return type is a reference to a numeric type.
+ * If `point_factory` is not specified, then `Dimensions` must model the
+ __Default_Constructible__ concept.
+ * `Scalar` must be a numeric type.
+ * `WraparoundPolicy` must implement an index operator that accepts an integer
+ type as a valid argument and whose return type is `bool`.
+ * `PointFactory` must model the __Generator__ concept.
+ * The return type of `PointFactory` must be convertible to `Point`.
+ * `PositionIndexMap` must implement an index operator that accepts an integer
+ type as a valid argument and whose return type is also an integer type.
+ * `PositionMap` must model the __Writable_Property_Map__ concept.
+ * The value type of `VertexIterator` must be usable as the key type of
+ `PositionMap`.
+ * `Point` must implement an index operator that accepts an integer type as a
+ valid argument and whose return type is a reference to a numeric type.
+ * `Point` must be usable as the value type of `PositionMap`.
+ * If neither `point_factory` nor `origin` are specified, then `Dimensions`
+ must be convertible to `Point`.
+ * `Scalar` and the return types of the index operators of `Dimensions` and
+ `Point` must be interoperable arithmetic-wise.
+
+[endsect]
+
+[section Parameters]
+[table
+ [[Parameter][Description][Runtime requirements][Default]]
+ [
+ [`vertex_iterator`]
+ [
+ An iterator over the vertices of a graph. The algorithm will store
+ copies of the vertex descriptors dereferenced from it.
+ ]
+ [
+ If this iterator points to the beginning of a range of vertices
+ in a graph, then this range must at least as large as the value
+ returned by
+ [^_count_upsilon_tessellation_layout_vertices_(dimensions,
+ vertex_centroid_distance, position_index_map)].
+ ]
+ [None; always required.]
+ ]
+ [
+ [`edge_function`]
+ [
+ A function that is invoked each time the algorithm recognizes the
+ input vertices as edges.
+ ]
+ [
+ Each vertex descriptor dereferenced from `vertex_iterator` must be
+ a valid argument.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`dimensions`]
+ [The physical size of the resulting layout.]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`. Furthermore, If `point_factory`
+ is not specified, then the default constructor of `Dimensions`
+ must ensure that the object returned fulfills this requirement.
+ ]
+ [None; always required.]
+ ]
+ [
+ [`vertex_centroid_distance`]
+ [The distance between two orthogonally adjacent vertices.]
+ []
+ [`1`]
+ ]
+ [
+ [`has_square_origin`]
+ [
+ A boolean flag that controls whether the vertex at the origin
+ represents a square or an octagon. See the
+ __set_upsilon_tessellation_layout__description__ for further
+ information.
+ ]
+ []
+ [`false`]
+ ]
+ [
+ [`wraparound_policy`]
+ [
+ An object whose index operator returns a boolean flag indicating
+ whether or not the algorithm will allow edges to wrap around in
+ the specified dimension.
+ ]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [An object whose index operator always returns `false`.]
+ ]
+ [
+ [`point_factory`]
+ [
+ A function that constructs and returns `Point` objects. Required
+ if the default constructor of `Point` does not exist or prevents
+ its index operator from fulfilling its runtime requirement.
+ ]
+ [
+ The index operator of each object returned must accept values
+ returned by the index operator of `position_index_map`.
+ ]
+ [[^_value_factory_<Dimensions>()]]
+ ]
+ [
+ [`position_index_map`]
+ [
+ Maps each dimension index to a unique integer. Specify an argument
+ for this parameter if, for example, a 3-D application calls for
+ different upsilon tessellation layouts to reside on different
+ dimensional planes.
+ ]
+ [The index operator must accept values in the range `[0, 1]`.]
+ [[^_identity_property_map_()]]
+ ]
+ [
+ [`position_map`]
+ [
+ Maps each vertex to a `Point` object representing a position in the
+ resulting layout.
+ ]
+ [
+ Each vertex descriptor dereferenced from `vertex_iterator` must be
+ a valid key.
+ ]
+ [`dummy_property_map()`]
+ ]
+ [
+ [`origin`]
+ [
+ An object representing the vertex position whose coordinates are
+ at the lower bound of each dimension.
+ ]
+ [
+ The index operator must accept values returned by the index
+ operator of `position_index_map`.
+ ]
+ [
+ A `Point` whose index operator returns zero for each of the input
+ dimensions returned by the index operator of `position_index_map`.
+ ]
+ ]
+]
+
+Remember that the __BGL__ prefixes each __Boost_Parameter__ keyword with an
+underscore and defines it in the `boost::graph::keywords` namespace.
+[endsect] [/ Parameters]
+
+[section Example]
+[example__upsilon_tessellation_layout]
+
+The complete example program can be compiled from this file:
+<__example_upsilon_tessellation_layout_cpp__>.
+[endsect]
+
+[endsect] [/ set_upsilon_tessellation_layout]
+
Added: sandbox/graph-intrusive_layout/libs/graph/example/bitruncated_cubic_honeycomb.cpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/example/bitruncated_cubic_honeycomb.cpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,76 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//#define BOOST_PARAMETER_MAX_ARITY 9
+
+#include <iostream>
+#include <boost/preprocessor/comparison/less.hpp>
+#include <boost/array.hpp>
+#include <boost/phoenix/core/value.hpp>
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/io.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/graph_selectors.hpp>
+#include <boost/graph/graph_utility.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/basic_vert_insert_iterator.hpp>
+#include <boost/graph/basic_add_edge_function.hpp>
+#include <boost/graph/set_bt_cubic_hcomb_layout.hpp>
+
+//[example__bitruncated_cubic_honeycomb
+int main()
+{
+ typedef boost::numeric::ublas::vector<double> Point;
+ typedef boost::vertex_distance_t PositionTag;
+
+ Point dimensions(3);
+
+ dimensions(0) = dimensions(1) = 7.0;
+ dimensions(2) = 8.0;
+
+ boost::adjacency_list<
+ boost::multisetS
+ , boost::listS
+ , boost::undirectedS
+ , boost::property<PositionTag,Point>
+ > graph(
+ boost::count_bitruncated_cubic_honeycomb_layout_vertices(dimensions)
+ );
+ boost::array<bool,3> wraparound_policy = {{false, true, true}};
+
+#ifdef BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS
+ boost::set_bitruncated_cubic_honeycomb_layout(
+ boost::vertices(graph).first
+ , boost::basic_2way_edge_adder(graph)
+ , dimensions
+ , boost::graph::keywords::_wraparound_policy = wraparound_policy
+ , boost::graph::keywords::_point_factory = boost::phoenix::val(Point(3))
+ , boost::graph::keywords::_position_map = boost::get(
+ PositionTag()
+ , graph
+ )
+ );
+#else // !BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS
+ boost::set_bitruncated_cubic_honeycomb_layout(
+ boost::vertices(graph).first
+ , boost::basic_2way_edge_adder(graph)
+ , boost::dimensions(
+ dimensions
+ ).wraparound_policy(
+ wraparound_policy
+ ).point_factory(
+ boost::phoenix::val(Point(3))
+ ).position_map(
+ boost::get(PositionTag(), graph)
+ )
+ );
+#endif // BOOST_GRAPH_SET_BITRUNCATED_CUBIC_HONEYCOMB_TAKES_ALL_PARAMS
+ boost::print_graph(graph, boost::get(PositionTag(), graph));
+
+ return 0;
+}
+//]
+
Added: sandbox/graph-intrusive_layout/libs/graph/example/bitset_grid_layouts.cpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/example/bitset_grid_layouts.cpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,68 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <map>
+#include <bitset>
+#include <boost/mpl/int.hpp>
+#include <boost/dynamic_bitset.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/graph_selectors.hpp>
+#include <boost/graph/graph_utility.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/basic_vert_insert_iterator.hpp>
+#include <boost/graph/basic_add_edge_function.hpp>
+#include <boost/graph/set_bitset_grid_layout.hpp>
+
+//[example__bitset_grid_layouts__static
+int main()
+{
+ typedef boost::adjacency_list<boost::vecS,boost::setS,boost::directedS>
+ MidGraph;
+ typedef std::map<
+ boost::graph_traits<MidGraph>::vertex_descriptor
+ , std::bitset<4>
+ >
+ Vertex2BitsMap;
+
+ Vertex2BitsMap v2b_map;
+ boost::associative_property_map<Vertex2BitsMap> pos_map(v2b_map);
+ MidGraph mid_graph(boost::count_bitset_grid_layout_vertices(pos_map));
+
+ boost::set_bitset_grid_layout(
+ boost::vertices(mid_graph).first
+ , boost::basic_2way_edge_adder(mid_graph)
+ , boost::position_map(pos_map)
+ );
+ boost::print_graph(mid_graph, pos_map);
+ std::cout << std::endl;
+ //]
+
+ //[example__bitset_grid_layouts__dynamic
+ typedef boost::vertex_distance_t PositionTag;
+
+ boost::mpl::int_<5> bit_count;
+ boost::adjacency_list<
+ boost::multisetS
+ , boost::listS
+ , boost::undirectedS
+ , boost::property<PositionTag,boost::dynamic_bitset<> >
+ > big_graph(
+ boost::count_bitset_grid_layout_vertices(bit_count)
+ );
+
+ boost::set_bitset_grid_layout(
+ boost::vertices(big_graph).first
+ , boost::basic_edge_adder(big_graph)
+ , boost::get(PositionTag(), big_graph)
+ , bit_count
+ );
+ boost::print_graph(big_graph, boost::get(PositionTag(), big_graph));
+
+ return 0;
+}
+//]
+
Added: sandbox/graph-intrusive_layout/libs/graph/example/orthogonal_grid_layouts.cpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/example/orthogonal_grid_layouts.cpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,95 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PARAMETER_MAX_ARITY 11
+
+#include <iostream>
+#include <boost/mpl/int.hpp>
+#include <boost/array.hpp>
+#include <boost/phoenix/core/value.hpp>
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/io.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/graph_selectors.hpp>
+#include <boost/graph/graph_utility.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/basic_vert_insert_iterator.hpp>
+#include <boost/graph/basic_add_edge_function.hpp>
+#include <boost/graph/set_orthogonal_grid_layout.hpp>
+
+//[example__orthogonal_grid_layouts
+int main()
+{
+ typedef boost::numeric::ublas::vector<double> Point;
+ typedef boost::vertex_distance_t PositionTag;
+
+ Point origin(3), scale(3), dimensions(3);
+
+ scale(0) = 2.0;
+ scale(1) = scale(2) = 1.0;
+ dimensions(0) = dimensions(1) = 6.0;
+ dimensions(2) = 3.0;
+
+ boost::adjacency_list<
+ boost::multisetS
+ , boost::listS
+ , boost::undirectedS
+ , boost::property<PositionTag,Point>
+ > graph(
+ boost::count_orthogonal_grid_layout_vertices(
+ dimensions
+ , boost::mpl::int_<3>()
+ , boost::graph::keywords::_scale = scale
+ )
+ );
+ boost::array<bool,3> wraparound_policy = {{true, false, true}};
+
+ origin(0) = -2.0;
+ origin(1) = -2.5;
+ origin(2) = -1.0;
+ boost::set_orthogonal_grid_layout(
+ boost::vertices(graph).first
+ , boost::basic_2way_edge_adder(graph)
+ , boost::position_map(
+ boost::get(PositionTag(), graph)
+ ).is_zeta(
+ true
+ ).dimension_count(
+ boost::mpl::int_<3>()
+ ).dimensions(
+ dimensions
+ ).scale(
+ scale
+ ).origin(
+ origin
+ ).point_factory(
+ boost::phoenix::val(Point(3))
+ ).wraparound_policy(
+ wraparound_policy
+ )
+ );
+ boost::print_graph(graph, boost::get(PositionTag(), graph));
+ std::cout << std::endl;
+ graph.clear();
+ boost::set_orthogonal_grid_layout(
+ boost::basic_vertex_inserter(graph)
+ , boost::basic_2way_edge_adder(graph)
+ , dimensions
+ , boost::graph::keywords::_scale = scale
+ , boost::graph::keywords::_origin = origin
+ , boost::graph::keywords::_position_map = boost::get(
+ PositionTag()
+ , graph
+ )
+ , boost::graph::keywords::_point_factory = boost::phoenix::val(Point(2))
+ , boost::graph::keywords::_wraparound_policy = wraparound_policy
+ );
+ boost::print_graph(graph, boost::get(PositionTag(), graph));
+
+ return 0;
+}
+//]
+
Added: sandbox/graph-intrusive_layout/libs/graph/example/upsilon_tessellation_layout.cpp
==============================================================================
--- (empty file)
+++ sandbox/graph-intrusive_layout/libs/graph/example/upsilon_tessellation_layout.cpp 2011-09-10 10:10:13 EDT (Sat, 10 Sep 2011)
@@ -0,0 +1,84 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PARAMETER_MAX_ARITY 10
+
+#include <iostream>
+#include <boost/mpl/int.hpp>
+#include <boost/tr1/tuple.hpp>
+#include <boost/array.hpp>
+#include <boost/phoenix/core/value.hpp>
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/io.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/graph_selectors.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_utility.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/basic_add_edge_function.hpp>
+#include <boost/graph/set_upsilon_tessel_layout.hpp>
+
+//[example__upsilon_tessellation_layout
+int main()
+{
+ typedef boost::numeric::ublas::vector<double> Point;
+ typedef boost::vertex_distance_t PositionTag;
+ typedef boost::adjacency_list<
+ boost::multisetS
+ , boost::listS
+ , boost::undirectedS
+ , boost::property<PositionTag,Point>
+ >
+ Graph;
+
+ Point dimensions(2);
+
+ dimensions(0) = 5.0;
+ dimensions(1) = 4.0;
+
+ Graph g(boost::count_upsilon_tessellation_layout_vertices(dimensions));
+ boost::array<bool,2> wraparound_policy = {{true, false}};
+
+ boost::set_upsilon_tessellation_layout(
+ boost::vertices(g).first
+ , boost::basic_2way_edge_adder(g)
+ , boost::dimensions(
+ dimensions
+ ).has_square_origin(
+ true
+ ).wraparound_policy(
+ wraparound_policy
+ ).point_factory(
+ boost::phoenix::val(Point(2))
+ ).position_map(
+ boost::get(PositionTag(), g)
+ )
+ );
+ boost::print_graph(g, boost::get(PositionTag(), g));
+ std::cout << std::endl;
+
+ boost::graph_traits<Graph>::vertex_iterator vi, vi_end;
+
+ for (std::tr1::tie(vi, vi_end) = boost::vertices(g); vi != vi_end; ++vi)
+ {
+ boost::clear_vertex(*vi, g);
+ }
+
+ wraparound_policy[1] = true;
+ boost::set_upsilon_tessellation_layout(
+ boost::vertices(g).first
+ , boost::basic_2way_edge_adder(g)
+ , dimensions
+ , boost::graph::keywords::_wraparound_policy = wraparound_policy
+ , boost::graph::keywords::_point_factory = boost::phoenix::val(Point(2))
+ , boost::graph::keywords::_position_map = boost::get(PositionTag(), g)
+ );
+ boost::print_graph(g, boost::get(PositionTag(), g));
+
+ return 0;
+}
+//]
+
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