Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r80782 - sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node
From: adam.wulkiewicz_at_[hidden]
Date: 2012-09-30 08:54:26


Author: awulkiew
Date: 2012-09-30 08:54:25 EDT (Sun, 30 Sep 2012)
New Revision: 80782
URL: http://svn.boost.org/trac/boost/changeset/80782

Log:
code related to nodes visitation moved to XXX_visitor.hpp
Added:
   sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/static_visitor.hpp (contents, props changed)
Text files modified:
   sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/dynamic_visitor.hpp | 24 +++++++++++
   sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node.hpp | 4
   sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_d_mem_dynamic.hpp | 22 ----------
   sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_s_mem_dynamic.hpp | 87 ++++++++++-----------------------------
   sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_s_mem_static.hpp | 29 ++++++------
   5 files changed, 63 insertions(+), 103 deletions(-)

Modified: sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/dynamic_visitor.hpp
==============================================================================
--- sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/dynamic_visitor.hpp (original)
+++ sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/dynamic_visitor.hpp 2012-09-30 08:54:25 EDT (Sun, 30 Sep 2012)
@@ -63,6 +63,30 @@
     virtual void operator()(leaf &) = 0;
 };
 
+// nodes conversion
+
+template <typename Derived, typename Parameters, typename Value, typename Box, typename Allocators, typename Tag>
+inline Derived & get(dynamic_node<Value, Parameters, Box, Allocators, Tag> & n)
+{
+ assert(dynamic_cast<Derived*>(&n));
+ return static_cast<Derived&>(n);
+}
+
+template <typename Derived, typename Parameters, typename Value, typename Box, typename Allocators, typename Tag>
+inline Derived * get(dynamic_node<Value, Parameters, Box, Allocators, Tag> * n)
+{
+ assert(dynamic_cast<Derived*>(n));
+ return static_cast<Derived*>(n);
+}
+
+// apply visitor
+
+template <typename Visitor, typename Visitable>
+inline void apply_visitor(Visitor &v, Visitable & n)
+{
+ n.apply_visitor(v);
+}
+
 }} // namespace detail::rtree
 
 }}} // namespace boost::geometry::index

Modified: sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node.hpp
==============================================================================
--- sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node.hpp (original)
+++ sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node.hpp 2012-09-30 08:54:25 EDT (Sun, 30 Sep 2012)
@@ -14,9 +14,9 @@
 #include <boost/geometry/extensions/index/rtree/node/concept.hpp>
 
 #include <boost/geometry/extensions/index/rtree/node/node_d_mem_dynamic.hpp>
-#include <boost/geometry/extensions/index/rtree/node/node_s_mem_dynamic.hpp>
-
 #include <boost/geometry/extensions/index/rtree/node/node_d_mem_static.hpp>
+
+#include <boost/geometry/extensions/index/rtree/node/node_s_mem_dynamic.hpp>
 #include <boost/geometry/extensions/index/rtree/node/node_s_mem_static.hpp>
 
 #include <boost/geometry/algorithms/expand.hpp>

Modified: sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_d_mem_dynamic.hpp
==============================================================================
--- sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_d_mem_dynamic.hpp (original)
+++ sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_d_mem_dynamic.hpp 2012-09-30 08:54:25 EDT (Sun, 30 Sep 2012)
@@ -77,22 +77,6 @@
     typedef dynamic_leaf<Value, Parameters, Box, Allocators, node_d_mem_dynamic_tag> type;
 };
 
-// nodes conversion
-
-template <typename Derived, typename Parameters, typename Value, typename Box, typename Allocators, typename Tag>
-inline Derived & get(dynamic_node<Value, Parameters, Box, Allocators, Tag> & n)
-{
- assert(dynamic_cast<Derived*>(&n));
- return static_cast<Derived&>(n);
-}
-
-template <typename Derived, typename Parameters, typename Value, typename Box, typename Allocators, typename Tag>
-inline Derived * get(dynamic_node<Value, Parameters, Box, Allocators, Tag> * n)
-{
- assert(dynamic_cast<Derived*>(n));
- return static_cast<Derived*>(n);
-}
-
 // visitor traits
 
 template <typename Value, typename Parameters, typename Box, typename Allocators, bool IsVisitableConst>
@@ -101,12 +85,6 @@
     typedef dynamic_visitor<Value, Parameters, Box, Allocators, node_d_mem_dynamic_tag, IsVisitableConst> type;
 };
 
-template <typename Visitor, typename Visitable>
-inline void apply_visitor(Visitor &v, Visitable & n)
-{
- n.apply_visitor(v);
-}
-
 // element's indexable type
 
 template <typename Value, typename Translator>

Modified: sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_s_mem_dynamic.hpp
==============================================================================
--- sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_s_mem_dynamic.hpp (original)
+++ sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_s_mem_dynamic.hpp 2012-09-30 08:54:25 EDT (Sun, 30 Sep 2012)
@@ -12,7 +12,8 @@
 #define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_NODE_DEFAULT_VARIANT_HPP
 
 #include <vector>
-#include <boost/variant.hpp>
+
+#include <boost/geometry/extensions/index/rtree/node/static_visitor.hpp>
 
 namespace boost { namespace geometry { namespace index {
 
@@ -21,7 +22,7 @@
 // nodes default types
 
 template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct internal_node_variant
+struct static_internal_node
 {
     typedef std::vector<
         std::pair<
@@ -31,7 +32,7 @@
         typename Allocators::internal_node_elements_allocator_type
> elements_type;
 
- inline internal_node_variant(typename Allocators::internal_node_elements_allocator_type & al)
+ inline static_internal_node(typename Allocators::internal_node_elements_allocator_type & al)
         : elements(al)
     {}
 
@@ -39,14 +40,14 @@
 };
 
 template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct leaf_variant
+struct static_leaf
 {
     typedef std::vector<
         Value,
         typename Allocators::leaf_elements_allocator_type
> elements_type;
 
- inline leaf_variant(typename Allocators::leaf_elements_allocator_type & al)
+ inline static_leaf(typename Allocators::leaf_elements_allocator_type & al)
         : elements(al)
     {}
 
@@ -59,47 +60,23 @@
 struct node<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag>
 {
         typedef boost::variant<
- leaf_variant<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag>,
- internal_node_variant<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag>
+ static_leaf<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag>,
+ static_internal_node<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag>
> type;
 };
 
 template <typename Value, typename Parameters, typename Box, typename Allocators>
 struct internal_node<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag>
 {
- typedef internal_node_variant<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag> type;
+ typedef static_internal_node<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag> type;
 };
 
 template <typename Value, typename Parameters, typename Box, typename Allocators>
 struct leaf<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag>
 {
- typedef leaf_variant<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag> type;
+ typedef static_leaf<Value, Parameters, Box, Allocators, node_s_mem_dynamic_tag> type;
 };
 
-// nodes conversion
-
-template <typename V, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-inline V & get(
- boost::variant<
- leaf_variant<Value, Parameters, Box, Allocators, Tag>,
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
- > &v
-)
-{
- return boost::get<V>(v);
-}
-
-template <typename V, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-inline V * get(
- boost::variant<
- leaf_variant<Value, Parameters, Box, Allocators, Tag>,
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
- > *v
-)
-{
- return boost::get<V>(v);
-}
-
 // visitor traits
 
 template <typename Value, typename Parameters, typename Box, typename Allocators, bool IsVisitableConst>
@@ -108,26 +85,6 @@
     typedef static_visitor<> type;
 };
 
-template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-inline void apply_visitor(Visitor & v,
- boost::variant<
- leaf_variant<Value, Parameters, Box, Allocators, Tag>,
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
- > & n)
-{
- boost::apply_visitor(v, n);
-}
-
-template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-inline void apply_visitor(Visitor & v,
- boost::variant<
- leaf_variant<Value, Parameters, Box, Allocators, Tag>,
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
- > const& n)
-{
- boost::apply_visitor(v, n);
-}
-
 // element's indexable type
 
 template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag, typename Translator>
@@ -135,8 +92,8 @@
     std::pair<
         Box,
         boost::variant<
- leaf_variant<Value, Parameters, Box, Allocators, Tag>,
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
+ static_leaf<Value, Parameters, Box, Allocators, Tag>,
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
> *
>,
     Translator
@@ -152,8 +109,8 @@
 element_indexable(std::pair<
                                           Box,
                                           boost::variant<
- leaf_variant<Value, Parameters, Box, Allocators, Tag>,
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
+ static_leaf<Value, Parameters, Box, Allocators, Tag>,
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
> *
> const& el,
                                   Translator const&)
@@ -239,14 +196,14 @@
 template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
 struct create_node<
     Allocators,
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
>
 {
     static inline typename node<Value, Parameters, Box, Allocators, Tag>::type *
     apply(Allocators & allocators)
     {
         return create_node_variant<
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
>::template apply<
             typename node<Value, Parameters, Box, Allocators, Tag>::type
>(allocators.node_allocator, allocators.internal_node_elements_allocator);
@@ -256,14 +213,14 @@
 template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
 struct create_node<
     Allocators,
- leaf_variant<Value, Parameters, Box, Allocators, Tag>
+ static_leaf<Value, Parameters, Box, Allocators, Tag>
>
 {
     static inline typename node<Value, Parameters, Box, Allocators, Tag>::type *
     apply(Allocators & allocators)
     {
         return create_node_variant<
- leaf_variant<Value, Parameters, Box, Allocators, Tag>
+ static_leaf<Value, Parameters, Box, Allocators, Tag>
>::template apply<
             typename node<Value, Parameters, Box, Allocators, Tag>::type
>(allocators.node_allocator, allocators.leaf_elements_allocator);
@@ -275,13 +232,13 @@
 template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
 struct destroy_node<
     Allocators,
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
>
 {
     static inline void apply(Allocators & allocators, typename node<Value, Parameters, Box, Allocators, Tag>::type * n)
     {
         destroy_node_variant<
- internal_node_variant<Value, Parameters, Box, Allocators, Tag>
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
>::apply(allocators.node_allocator, n);
     }
 };
@@ -289,13 +246,13 @@
 template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
 struct destroy_node<
     Allocators,
- leaf_variant<Value, Parameters, Box, Allocators, Tag>
+ static_leaf<Value, Parameters, Box, Allocators, Tag>
>
 {
     static inline void apply(Allocators & allocators, typename node<Value, Parameters, Box, Allocators, Tag>::type * n)
     {
         destroy_node_variant<
- leaf_variant<Value, Parameters, Box, Allocators, Tag>
+ static_leaf<Value, Parameters, Box, Allocators, Tag>
>::apply(allocators.node_allocator, n);
     }
 };

Modified: sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_s_mem_static.hpp
==============================================================================
--- sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_s_mem_static.hpp (original)
+++ sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/node_s_mem_static.hpp 2012-09-30 08:54:25 EDT (Sun, 30 Sep 2012)
@@ -11,8 +11,9 @@
 #ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_NODE_DEFAULT_STATIC_VARIANT_HPP
 #define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_NODE_DEFAULT_STATIC_VARIANT_HPP
 
-#include <vector>
-#include <boost/variant.hpp>
+#include <boost/geometry/extensions/index/pushable_array.hpp>
+
+#include <boost/geometry/extensions/index/rtree/node/static_visitor.hpp>
 
 namespace boost { namespace geometry { namespace index {
 
@@ -21,7 +22,7 @@
 // nodes default types
 
 template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct internal_node_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
+struct static_internal_node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
 {
     typedef index::pushable_array<
         std::pair<
@@ -32,18 +33,18 @@
> elements_type;
 
     template <typename Dummy>
- inline internal_node_variant(Dummy) {}
+ inline static_internal_node(Dummy) {}
 
     elements_type elements;
 };
 
 template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct leaf_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
+struct static_leaf<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
 {
     typedef index::pushable_array<Value, Parameters::max_elements + 1> elements_type;
 
     template <typename Dummy>
- inline leaf_variant(Dummy) {}
+ inline static_leaf(Dummy) {}
 
     elements_type elements;
 };
@@ -54,21 +55,21 @@
 struct node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
 {
         typedef boost::variant<
- leaf_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag>,
- internal_node_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
+ static_leaf<Value, Parameters, Box, Allocators, node_s_mem_static_tag>,
+ static_internal_node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
> type;
 };
 
 template <typename Value, typename Parameters, typename Box, typename Allocators>
 struct internal_node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
 {
- typedef internal_node_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag> type;
+ typedef static_internal_node<Value, Parameters, Box, Allocators, node_s_mem_static_tag> type;
 };
 
 template <typename Value, typename Parameters, typename Box, typename Allocators>
 struct leaf<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
 {
- typedef leaf_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag> type;
+ typedef static_leaf<Value, Parameters, Box, Allocators, node_s_mem_static_tag> type;
 };
 
 // visitor traits
@@ -113,14 +114,14 @@
 template <typename Allocators, typename Value, typename Parameters, typename Box>
 struct create_node<
     Allocators,
- internal_node_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
+ static_internal_node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
>
 {
     static inline typename node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>::type *
     apply(Allocators & allocators)
     {
         return create_node_variant<
- internal_node_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
+ static_internal_node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
>::template apply<
             typename node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>::type
>(allocators.node_allocator, allocators.node_allocator);
@@ -130,14 +131,14 @@
 template <typename Allocators, typename Value, typename Parameters, typename Box>
 struct create_node<
     Allocators,
- leaf_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
+ static_leaf<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
>
 {
     static inline typename node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>::type *
     apply(Allocators & allocators)
     {
         return create_node_variant<
- leaf_variant<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
+ static_leaf<Value, Parameters, Box, Allocators, node_s_mem_static_tag>
>::template apply<
             typename node<Value, Parameters, Box, Allocators, node_s_mem_static_tag>::type
>(allocators.node_allocator, allocators.node_allocator);

Added: sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/static_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox-branches/geometry/index/boost/geometry/extensions/index/rtree/node/static_visitor.hpp 2012-09-30 08:54:25 EDT (Sun, 30 Sep 2012)
@@ -0,0 +1,76 @@
+// Boost.Geometry Index
+//
+// R-tree nodes static visitor related code
+//
+// Copyright (c) 2011-2012 Adam Wulkiewicz, Lodz, Poland.
+//
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_STATIC_VISITOR_HPP
+#define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_STATIC_VISITOR_HPP
+
+#include <boost/variant.hpp>
+
+namespace boost { namespace geometry { namespace index {
+
+namespace detail { namespace rtree {
+
+// nodes variants forward declarations
+
+template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
+struct static_internal_node;
+
+template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
+struct static_leaf;
+
+// nodes conversion
+
+template <typename V, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
+inline V & get(
+ boost::variant<
+ static_leaf<Value, Parameters, Box, Allocators, Tag>,
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
+ > & v)
+{
+ return boost::get<V>(v);
+}
+
+template <typename V, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
+inline V * get(
+ boost::variant<
+ static_leaf<Value, Parameters, Box, Allocators, Tag>,
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
+ > *v)
+{
+ return boost::get<V>(v);
+}
+
+// apply visitor
+
+template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
+inline void apply_visitor(Visitor & v,
+ boost::variant<
+ static_leaf<Value, Parameters, Box, Allocators, Tag>,
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
+ > & n)
+{
+ boost::apply_visitor(v, n);
+}
+
+template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
+inline void apply_visitor(Visitor & v,
+ boost::variant<
+ static_leaf<Value, Parameters, Box, Allocators, Tag>,
+ static_internal_node<Value, Parameters, Box, Allocators, Tag>
+ > const& n)
+{
+ boost::apply_visitor(v, n);
+}
+
+}} // namespace detail::rtree
+
+}}} // namespace boost::geometry::index
+
+#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_STATIC_VISITOR_HPP


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk