From 136e2fc742e49cdc39428710897cabe2a9e8048c Mon Sep 17 00:00:00 2001 From: Adam Wulkiewicz Date: Sun, 30 Sep 2012 12:12:34 +0000 Subject: [PATCH] dynamic_visitor added and nodes tags changed. [SVN r80779] --- .../extensions/index/rtree/node/concept.hpp | 85 ++++++++++ .../index/rtree/node/dynamic_visitor.hpp | 70 ++++++++ .../extensions/index/rtree/node/node.hpp | 10 +- ...ode_default.hpp => node_d_mem_dynamic.hpp} | 152 ++++++------------ ...fault_static.hpp => node_d_mem_static.hpp} | 75 ++++++--- ...ult_variant.hpp => node_s_mem_dynamic.hpp} | 34 ++-- ...atic_variant.hpp => node_s_mem_static.hpp} | 56 +++---- .../extensions/index/rtree/options.hpp | 22 +-- .../geometry/extensions/index/rtree/rtree.hpp | 2 +- 9 files changed, 306 insertions(+), 200 deletions(-) create mode 100644 include/boost/geometry/extensions/index/rtree/node/concept.hpp create mode 100644 include/boost/geometry/extensions/index/rtree/node/dynamic_visitor.hpp rename include/boost/geometry/extensions/index/rtree/node/{node_default.hpp => node_d_mem_dynamic.hpp} (60%) rename include/boost/geometry/extensions/index/rtree/node/{node_default_static.hpp => node_d_mem_static.hpp} (51%) rename include/boost/geometry/extensions/index/rtree/node/{node_default_variant.hpp => node_s_mem_dynamic.hpp} (88%) rename include/boost/geometry/extensions/index/rtree/node/{node_default_static_variant.hpp => node_s_mem_static.hpp} (69%) diff --git a/include/boost/geometry/extensions/index/rtree/node/concept.hpp b/include/boost/geometry/extensions/index/rtree/node/concept.hpp new file mode 100644 index 000000000..55238ddb0 --- /dev/null +++ b/include/boost/geometry/extensions/index/rtree/node/concept.hpp @@ -0,0 +1,85 @@ +// Boost.Geometry Index +// +// R-tree node concept +// +// 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_CONCEPT_HPP +#define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_CONCEPT_HPP + +namespace boost { namespace geometry { namespace index { + +namespace detail { namespace rtree { + +template +struct node +{ + BOOST_MPL_ASSERT_MSG( + (false), + NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE, + (node)); +}; + +template +struct internal_node +{ + BOOST_MPL_ASSERT_MSG( + (false), + NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE, + (internal_node)); +}; + +template +struct leaf +{ + BOOST_MPL_ASSERT_MSG( + (false), + NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE, + (leaf)); +}; + +template +struct visitor +{ + BOOST_MPL_ASSERT_MSG( + (false), + NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE, + (visitor)); +}; + +template +struct allocators +{ + BOOST_MPL_ASSERT_MSG( + (false), + NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE, + (allocators)); +}; + +template +struct create_node +{ + BOOST_MPL_ASSERT_MSG( + (false), + NOT_IMPLEMENTED_FOR_THIS_NODE_TYPE, + (create_node)); +}; + +template +struct destroy_node +{ + BOOST_MPL_ASSERT_MSG( + (false), + NOT_IMPLEMENTED_FOR_THIS_NODE_TYPE, + (destroy_node)); +}; + +}} // namespace detail::rtree + +}}} // namespace boost::geometry::index + +#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_CONCEPT_HPP diff --git a/include/boost/geometry/extensions/index/rtree/node/dynamic_visitor.hpp b/include/boost/geometry/extensions/index/rtree/node/dynamic_visitor.hpp new file mode 100644 index 000000000..0514bc907 --- /dev/null +++ b/include/boost/geometry/extensions/index/rtree/node/dynamic_visitor.hpp @@ -0,0 +1,70 @@ +// Boost.Geometry Index +// +// R-tree nodes dynamic visitor and nodes base type +// +// 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_DYNAMIC_VISITOR_HPP +#define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_DYNAMIC_VISITOR_HPP + +namespace boost { namespace geometry { namespace index { + +namespace detail { namespace rtree { + +// visitor forward declaration +template +struct dynamic_visitor; + +// node + +template +struct dynamic_node +{ + virtual ~dynamic_node() {} + virtual void apply_visitor(dynamic_visitor &) = 0; + virtual void apply_visitor(dynamic_visitor &) const = 0; +}; + +// nodes variants forward declarations + +template +struct dynamic_internal_node; + +template +struct dynamic_leaf; + +// visitor + +template +struct dynamic_visitor +{ + typedef dynamic_internal_node internal_node; + typedef dynamic_leaf leaf; + + virtual ~dynamic_visitor() {} + + virtual void operator()(internal_node const&) = 0; + virtual void operator()(leaf const&) = 0; +}; + +template +struct dynamic_visitor +{ + typedef dynamic_internal_node internal_node; + typedef dynamic_leaf leaf; + + virtual ~dynamic_visitor() {} + + virtual void operator()(internal_node &) = 0; + virtual void operator()(leaf &) = 0; +}; + +}} // namespace detail::rtree + +}}} // namespace boost::geometry::index + +#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_DYNAMIC_VISITOR_HPP diff --git a/include/boost/geometry/extensions/index/rtree/node/node.hpp b/include/boost/geometry/extensions/index/rtree/node/node.hpp index 5b25b003d..bc4071d07 100644 --- a/include/boost/geometry/extensions/index/rtree/node/node.hpp +++ b/include/boost/geometry/extensions/index/rtree/node/node.hpp @@ -11,11 +11,13 @@ #ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_NODE_HPP #define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_NODE_HPP -#include -#include +#include -#include -#include +#include +#include + +#include +#include #include diff --git a/include/boost/geometry/extensions/index/rtree/node/node_default.hpp b/include/boost/geometry/extensions/index/rtree/node/node_d_mem_dynamic.hpp similarity index 60% rename from include/boost/geometry/extensions/index/rtree/node/node_default.hpp rename to include/boost/geometry/extensions/index/rtree/node/node_d_mem_dynamic.hpp index d2ca25d81..54790364c 100644 --- a/include/boost/geometry/extensions/index/rtree/node/node_default.hpp +++ b/include/boost/geometry/extensions/index/rtree/node/node_d_mem_dynamic.hpp @@ -13,128 +13,92 @@ #include +#include + namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { -// visitor forward declaration -template -struct visitor_poly; - -// nodes types - -template -struct node_poly -{ - virtual ~node_poly() {} - virtual void apply_visitor(visitor_poly &) = 0; - virtual void apply_visitor(visitor_poly &) const = 0; -}; - -template -struct internal_node_poly : public node_poly +template +struct dynamic_internal_node + : public dynamic_node { typedef std::vector< - std::pair *>, + std::pair *>, typename Allocators::internal_node_elements_allocator_type > elements_type; - inline internal_node_poly(typename Allocators::internal_node_elements_allocator_type & al) + inline dynamic_internal_node(typename Allocators::internal_node_elements_allocator_type & al) : elements(al) {} - void apply_visitor(visitor_poly & v) { v(*this); } - void apply_visitor(visitor_poly & v) const { v(*this); } + void apply_visitor(dynamic_visitor & v) { v(*this); } + void apply_visitor(dynamic_visitor & v) const { v(*this); } elements_type elements; }; -template -struct leaf_poly : public node_poly +template +struct dynamic_leaf + : public dynamic_node { typedef std::vector< Value, typename Allocators::leaf_elements_allocator_type > elements_type; - inline leaf_poly(typename Allocators::leaf_elements_allocator_type & al) + inline dynamic_leaf(typename Allocators::leaf_elements_allocator_type & al) : elements(al) {} - void apply_visitor(visitor_poly & v) { v(*this); } - void apply_visitor(visitor_poly & v) const { v(*this); } + void apply_visitor(dynamic_visitor & v) { v(*this); } + void apply_visitor(dynamic_visitor & v) const { v(*this); } elements_type elements; }; // nodes traits -template -struct node +template +struct node { - typedef node_poly type; + typedef dynamic_node type; }; -template -struct internal_node +template +struct internal_node { - typedef internal_node_poly type; + typedef dynamic_internal_node type; }; -template -struct leaf +template +struct leaf { - typedef leaf_poly type; + typedef dynamic_leaf type; }; // nodes conversion template -inline Derived & get(node_poly & n) +inline Derived & get(dynamic_node & n) { assert(dynamic_cast(&n)); return static_cast(n); } template -inline Derived * get(node_poly * n) +inline Derived * get(dynamic_node * n) { assert(dynamic_cast(n)); return static_cast(n); } -// visitor - -template -struct visitor_poly -{ - typedef typename internal_node::type internal_node; - typedef typename leaf::type leaf; - - virtual ~visitor_poly() {} - - virtual void operator()(internal_node const&) = 0; - virtual void operator()(leaf const&) = 0; -}; - -template -struct visitor_poly -{ - typedef typename internal_node::type internal_node; - typedef typename leaf::type leaf; - - virtual ~visitor_poly() {} - - virtual void operator()(internal_node &) = 0; - virtual void operator()(leaf &) = 0; -}; - // visitor traits -template -struct visitor +template +struct visitor { - typedef visitor_poly type; + typedef dynamic_visitor type; }; template @@ -153,7 +117,7 @@ struct element_indexable_type template struct element_indexable_type< - std::pair *>, + std::pair *>, Translator > { @@ -172,7 +136,7 @@ element_indexable(Value const& el, Translator const& tr) template inline Box const& element_indexable( - std::pair< Box, node_poly *> const& el, + std::pair< Box, dynamic_node *> const& el, Translator const&) { return el.first; @@ -209,29 +173,29 @@ struct container_from_elements_type // allocators -template -struct allocators_poly +template +struct allocators { typedef Allocator allocator_type; typedef typename allocator_type::size_type size_type; typedef typename allocator_type::template rebind< - typename internal_node::type + typename internal_node::type >::other internal_node_allocator_type; typedef typename allocator_type::template rebind< - typename leaf::type + typename leaf::type >::other leaf_allocator_type; typedef typename allocator_type::template rebind< - std::pair *> + std::pair *> >::other internal_node_elements_allocator_type; typedef typename allocator_type::template rebind< Value >::other leaf_elements_allocator_type; - inline explicit allocators_poly(Allocator alloc) + inline explicit allocators(Allocator alloc) : allocator(alloc) , internal_node_allocator(allocator) , leaf_allocator(allocator) @@ -246,14 +210,6 @@ struct allocators_poly leaf_elements_allocator_type leaf_elements_allocator; }; -// allocators - -template -struct allocators -{ - typedef allocators_poly type; -}; - // create_node_impl template @@ -297,26 +253,17 @@ struct destroy_node_poly // create_node -template -struct create_node -{ - BOOST_MPL_ASSERT_MSG( - (false), - NOT_IMPLEMENTED_FOR_THIS_NODE_TYPE, - (create_node)); -}; - template struct create_node< Allocators, - internal_node_poly + dynamic_internal_node > { static inline typename node::type * apply(Allocators & allocators) { return create_node_poly< - internal_node_poly + dynamic_internal_node >::template apply< typename node::type >(allocators.internal_node_allocator, allocators.internal_node_elements_allocator); @@ -326,14 +273,14 @@ struct create_node< template struct create_node< Allocators, - leaf_poly + dynamic_leaf > { static inline typename node::type * apply(Allocators & allocators) { return create_node_poly< - leaf_poly + dynamic_leaf >::template apply< typename node::type >(allocators.leaf_allocator, allocators.leaf_elements_allocator); @@ -342,25 +289,16 @@ struct create_node< // destroy_node -template -struct destroy_node -{ - BOOST_MPL_ASSERT_MSG( - (false), - NOT_IMPLEMENTED_FOR_THIS_NODE_TYPE, - (destroy_node)); -}; - template struct destroy_node< Allocators, - internal_node_poly + dynamic_internal_node > { static inline void apply(Allocators & allocators, typename node::type * n) { destroy_node_poly< - internal_node_poly + dynamic_internal_node >::apply(allocators.internal_node_allocator, n); } }; @@ -368,13 +306,13 @@ struct destroy_node< template struct destroy_node< Allocators, - leaf_poly + dynamic_leaf > { static inline void apply(Allocators & allocators, typename node::type * n) { destroy_node_poly< - leaf_poly + dynamic_leaf >::apply(allocators.leaf_allocator, n); } }; diff --git a/include/boost/geometry/extensions/index/rtree/node/node_default_static.hpp b/include/boost/geometry/extensions/index/rtree/node/node_d_mem_static.hpp similarity index 51% rename from include/boost/geometry/extensions/index/rtree/node/node_default_static.hpp rename to include/boost/geometry/extensions/index/rtree/node/node_d_mem_static.hpp index 6c4f8563c..820d88ddf 100644 --- a/include/boost/geometry/extensions/index/rtree/node/node_default_static.hpp +++ b/include/boost/geometry/extensions/index/rtree/node/node_d_mem_static.hpp @@ -11,6 +11,7 @@ #ifndef BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_NODE_DEFAULT_STATIC_HPP #define BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_NODE_DEFAULT_STATIC_HPP +#include #include namespace boost { namespace geometry { namespace index { @@ -18,41 +19,67 @@ namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { template -struct internal_node_poly - : public node_poly +struct dynamic_internal_node + : public dynamic_node { typedef index::pushable_array< std::pair< Box, - node_poly * + dynamic_node * >, Parameters::max_elements + 1 > elements_type; template - inline internal_node_poly(Dummy) {} + inline dynamic_internal_node(Dummy) {} - void apply_visitor(visitor_poly & v) { v(*this); } - void apply_visitor(visitor_poly & v) const { v(*this); } + void apply_visitor(dynamic_visitor & v) { v(*this); } + void apply_visitor(dynamic_visitor & v) const { v(*this); } elements_type elements; }; template -struct leaf_poly - : public node_poly +struct dynamic_leaf + : public dynamic_node { typedef index::pushable_array elements_type; template - inline leaf_poly(Dummy) {} + inline dynamic_leaf(Dummy) {} - void apply_visitor(visitor_poly & v) { v(*this); } - void apply_visitor(visitor_poly & v) const { v(*this); } + void apply_visitor(dynamic_visitor & v) { v(*this); } + void apply_visitor(dynamic_visitor & v) const { v(*this); } elements_type elements; }; +// nodes traits + +template +struct node +{ + typedef dynamic_node type; +}; + +template +struct internal_node +{ + typedef dynamic_internal_node type; +}; + +template +struct leaf +{ + typedef dynamic_leaf type; +}; + +template +struct visitor +{ + typedef dynamic_visitor type; +}; + // elements derived type template struct container_from_elements_type, NewValue> @@ -60,23 +87,23 @@ struct container_from_elements_type, NewValue typedef index::pushable_array type; }; -// allocators_poly +// allocators template -struct allocators_poly +struct allocators { typedef Allocator allocator_type; typedef typename allocator_type::size_type size_type; typedef typename allocator_type::template rebind< - typename internal_node::type + typename internal_node::type >::other internal_node_allocator_type; typedef typename allocator_type::template rebind< - typename leaf::type + typename leaf::type >::other leaf_allocator_type; - inline explicit allocators_poly(Allocator alloc) + inline explicit allocators(Allocator alloc) : allocator(alloc) , internal_node_allocator(allocator) , leaf_allocator(allocator) @@ -92,16 +119,16 @@ struct allocators_poly struct create_node< Allocators, - internal_node_poly + dynamic_internal_node > { - static inline typename node::type * + static inline typename node::type * apply(Allocators & allocators) { return create_node_poly< - internal_node_poly + dynamic_internal_node >::template apply< - typename node::type + typename node::type >(allocators.internal_node_allocator, allocators.internal_node_allocator); } }; @@ -109,16 +136,16 @@ struct create_node< template struct create_node< Allocators, - leaf_poly + dynamic_leaf > { - static inline typename node::type * + static inline typename node::type * apply(Allocators & allocators) { return create_node_poly< - leaf_poly + dynamic_leaf >::template apply< - typename node::type + typename node::type >(allocators.leaf_allocator, allocators.leaf_allocator); } }; diff --git a/include/boost/geometry/extensions/index/rtree/node/node_default_variant.hpp b/include/boost/geometry/extensions/index/rtree/node/node_s_mem_dynamic.hpp similarity index 88% rename from include/boost/geometry/extensions/index/rtree/node/node_default_variant.hpp rename to include/boost/geometry/extensions/index/rtree/node/node_s_mem_dynamic.hpp index 51e08d1f8..7ba08aabc 100644 --- a/include/boost/geometry/extensions/index/rtree/node/node_default_variant.hpp +++ b/include/boost/geometry/extensions/index/rtree/node/node_s_mem_dynamic.hpp @@ -56,24 +56,24 @@ struct leaf_variant // nodes traits template -struct node +struct node { typedef boost::variant< - leaf_variant, - internal_node_variant + leaf_variant, + internal_node_variant > type; }; template -struct internal_node +struct internal_node { - typedef internal_node_variant type; + typedef internal_node_variant type; }; template -struct leaf +struct leaf { - typedef leaf_variant type; + typedef leaf_variant type; }; // nodes conversion @@ -103,7 +103,7 @@ inline V * get( // visitor traits template -struct visitor +struct visitor { typedef static_visitor<> type; }; @@ -163,25 +163,25 @@ element_indexable(std::pair< // allocators -template -struct allocators_variant +template +struct allocators { typedef Allocator allocator_type; typedef typename allocator_type::size_type size_type; typedef typename allocator_type::template rebind< - typename node::type + typename node::type >::other node_allocator_type; typedef typename allocator_type::template rebind< - std::pair *> + std::pair::type *> >::other internal_node_elements_allocator_type; typedef typename allocator_type::template rebind< Value >::other leaf_elements_allocator_type; - inline explicit allocators_variant(Allocator alloc) + inline explicit allocators(Allocator alloc) : allocator(alloc) , node_allocator(allocator) , internal_node_elements_allocator(allocator) @@ -194,14 +194,6 @@ struct allocators_variant leaf_elements_allocator_type leaf_elements_allocator; }; -// allocators - -template -struct allocators -{ - typedef allocators_variant type; -}; - // create_node_variant template diff --git a/include/boost/geometry/extensions/index/rtree/node/node_default_static_variant.hpp b/include/boost/geometry/extensions/index/rtree/node/node_s_mem_static.hpp similarity index 69% rename from include/boost/geometry/extensions/index/rtree/node/node_default_static_variant.hpp rename to include/boost/geometry/extensions/index/rtree/node/node_s_mem_static.hpp index 2a97c255c..78e63b62e 100644 --- a/include/boost/geometry/extensions/index/rtree/node/node_default_static_variant.hpp +++ b/include/boost/geometry/extensions/index/rtree/node/node_s_mem_static.hpp @@ -21,12 +21,12 @@ namespace detail { namespace rtree { // nodes default types template -struct internal_node_variant +struct internal_node_variant { typedef index::pushable_array< std::pair< Box, - typename node::type * + typename node::type * >, Parameters::max_elements + 1 > elements_type; @@ -38,7 +38,7 @@ struct internal_node_variant -struct leaf_variant +struct leaf_variant { typedef index::pushable_array elements_type; @@ -51,55 +51,55 @@ struct leaf_variant -struct node +struct node { typedef boost::variant< - leaf_variant, - internal_node_variant + leaf_variant, + internal_node_variant > type; }; template -struct internal_node +struct internal_node { - typedef internal_node_variant type; + typedef internal_node_variant type; }; template -struct leaf +struct leaf { - typedef leaf_variant type; + typedef leaf_variant type; }; // visitor traits template -struct visitor +struct visitor { typedef static_visitor<> type; }; -// allocators_variant +// allocators template -struct allocators_variant +struct allocators { typedef Allocator allocator_type; typedef typename allocator_type::size_type size_type; typedef typename allocator_type::template rebind< - typename node::type + typename node::type >::other node_allocator_type; typedef typename allocator_type::template rebind< - std::pair *> + std::pair::type *> >::other internal_node_elements_allocator_type; typedef typename allocator_type::template rebind< Value >::other leaf_elements_allocator_type; - inline explicit allocators_variant(Allocator alloc) + inline explicit allocators(Allocator alloc) : allocator(alloc) , node_allocator(allocator) {} @@ -108,29 +108,21 @@ struct allocators_variant -struct allocators -{ - typedef allocators_variant type; -}; - // create_node template struct create_node< Allocators, - internal_node_variant + internal_node_variant > { - static inline typename node::type * + static inline typename node::type * apply(Allocators & allocators) { return create_node_variant< - internal_node_variant + internal_node_variant >::template apply< - typename node::type + typename node::type >(allocators.node_allocator, allocators.node_allocator); } }; @@ -138,16 +130,16 @@ struct create_node< template struct create_node< Allocators, - leaf_variant + leaf_variant > { - static inline typename node::type * + static inline typename node::type * apply(Allocators & allocators) { return create_node_variant< - leaf_variant + leaf_variant >::template apply< - typename node::type + typename node::type >(allocators.node_allocator, allocators.node_allocator); } }; diff --git a/include/boost/geometry/extensions/index/rtree/options.hpp b/include/boost/geometry/extensions/index/rtree/options.hpp index 52300faf9..87d26a02f 100644 --- a/include/boost/geometry/extensions/index/rtree/options.hpp +++ b/include/boost/geometry/extensions/index/rtree/options.hpp @@ -33,10 +33,10 @@ struct quadratic_tag {}; struct rstar_tag {}; // NodeTag -struct node_default_tag {}; -struct node_default_variant_tag {}; -struct node_default_static_tag {}; -struct node_default_static_variant_tag {}; +struct node_d_mem_dynamic_tag {}; +struct node_d_mem_static_tag {}; +struct node_s_mem_dynamic_tag {}; +struct node_s_mem_static_tag {}; // TODO: awulkiew - implement those: //if ( m_min_elems_per_node < 1 ) @@ -216,7 +216,7 @@ struct options_type< linear > choose_by_content_diff_tag, split_default_tag, linear_tag, - node_default_static_tag + node_d_mem_static_tag > type; }; @@ -229,7 +229,7 @@ struct options_type< quadratic > choose_by_content_diff_tag, split_default_tag, quadratic_tag, - node_default_static_tag + node_d_mem_static_tag > type; }; @@ -242,7 +242,7 @@ struct options_type< rstar type; }; @@ -255,7 +255,7 @@ struct options_type< rstar type; //}; @@ -268,7 +268,7 @@ struct options_type< runtime::linear > choose_by_content_diff_tag, split_default_tag, linear_tag, - node_default_tag + node_d_mem_dynamic_tag > type; }; @@ -281,7 +281,7 @@ struct options_type< runtime::quadratic > choose_by_content_diff_tag, split_default_tag, quadratic_tag, - node_default_tag + node_d_mem_dynamic_tag > type; }; @@ -294,7 +294,7 @@ struct options_type< runtime::rstar > choose_by_overlap_diff_tag, split_default_tag, rstar_tag, - node_default_tag + node_d_mem_dynamic_tag > type; }; diff --git a/include/boost/geometry/extensions/index/rtree/rtree.hpp b/include/boost/geometry/extensions/index/rtree/rtree.hpp index 10b3272b2..1aa17f3e8 100644 --- a/include/boost/geometry/extensions/index/rtree/rtree.hpp +++ b/include/boost/geometry/extensions/index/rtree/rtree.hpp @@ -86,7 +86,7 @@ public: typedef typename options_type::node_tag node_tag; typedef Allocator allocator_type; - typedef typename detail::rtree::allocators::type allocators_type; + typedef detail::rtree::allocators allocators_type; typedef typename allocators_type::size_type size_type; typedef typename detail::rtree::node::type node;