From eb7ba34800dd04cff9c3268abb93e059b6a2cc69 Mon Sep 17 00:00:00 2001 From: Adam Wulkiewicz Date: Sun, 30 Sep 2012 11:40:09 +0000 Subject: [PATCH] NodeProxy create() template member replaced by template function. [SVN r80774] --- .../extensions/index/rtree/node_proxy.hpp | 40 +++++++++++++------ .../geometry/extensions/index/rtree/rtree.hpp | 2 +- .../extensions/index/rtree/visitors/copy.hpp | 4 +- .../index/rtree/visitors/destroy.hpp | 4 +- .../index/rtree/visitors/insert.hpp | 4 +- .../index/rtree/visitors/remove.hpp | 6 +-- 6 files changed, 37 insertions(+), 23 deletions(-) diff --git a/include/boost/geometry/extensions/index/rtree/node_proxy.hpp b/include/boost/geometry/extensions/index/rtree/node_proxy.hpp index 6662bb976..ab5940f84 100644 --- a/include/boost/geometry/extensions/index/rtree/node_proxy.hpp +++ b/include/boost/geometry/extensions/index/rtree/node_proxy.hpp @@ -57,18 +57,6 @@ public: , m_allocators(allocator) {} - template - node * create() - { - return detail::rtree::create_node::apply(m_allocators); - } - - template - void destroy(node * n) - { - return detail::rtree::destroy_node::apply(m_allocators, n); - } - // HMMMM - trzeba zwracac uwage na translator::return_type // template // typename element_indexable_type::type const& @@ -120,7 +108,12 @@ public: return m_translator; } - allocator_type allocator() const + allocators_type & allocators() + { + return m_allocators; + } + + allocator_type & allocator() { return m_allocators.allocator; } @@ -131,6 +124,27 @@ private: allocators_type m_allocators; }; +template +typename node_proxy::node * + create(node_proxy & np) +{ + return detail::rtree::create_node< + typename node_proxy::allocators_type, + Node + >::apply(np.allocators()); +} + +template +void destroy( + typename node_proxy::node * n, + node_proxy & np) +{ + return detail::rtree::destroy_node< + typename node_proxy::allocators_type, + Node + >::apply(np.allocators(), n); +} + }}}}} // namespace boost::geometry::index::detail::rtree #endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_NODE_PROXY_HPP diff --git a/include/boost/geometry/extensions/index/rtree/rtree.hpp b/include/boost/geometry/extensions/index/rtree/rtree.hpp index eb4a48e26..211a0c5ea 100644 --- a/include/boost/geometry/extensions/index/rtree/rtree.hpp +++ b/include/boost/geometry/extensions/index/rtree/rtree.hpp @@ -588,7 +588,7 @@ private: { assert(0 == m_root); - m_root = m_node_proxy.template create_node(); + m_root = detail::rtree::create(m_node_proxy); m_values_count = 0; m_leafs_level = 0; } diff --git a/include/boost/geometry/extensions/index/rtree/visitors/copy.hpp b/include/boost/geometry/extensions/index/rtree/visitors/copy.hpp index 92c05f908..8a59dc78a 100644 --- a/include/boost/geometry/extensions/index/rtree/visitors/copy.hpp +++ b/include/boost/geometry/extensions/index/rtree/visitors/copy.hpp @@ -41,7 +41,7 @@ public: inline void operator()(internal_node & n) { - node * new_node = m_node_proxy.template create(); + node * new_node = rtree::create(m_node_proxy); typedef typename rtree::elements_type::type elements_type; elements_type & elements = rtree::elements(n); @@ -61,7 +61,7 @@ public: inline void operator()(leaf & l) { - node * new_node = m_node_proxy.template create(); + node * new_node = rtree::create(m_node_proxy); typedef typename rtree::elements_type::type elements_type; elements_type & elements = rtree::elements(l); diff --git a/include/boost/geometry/extensions/index/rtree/visitors/destroy.hpp b/include/boost/geometry/extensions/index/rtree/visitors/destroy.hpp index 28403e2a1..ed48747d9 100644 --- a/include/boost/geometry/extensions/index/rtree/visitors/destroy.hpp +++ b/include/boost/geometry/extensions/index/rtree/visitors/destroy.hpp @@ -55,14 +55,14 @@ public: rtree::apply_visitor(*this, *m_current_node); } - m_node_proxy.template destroy(node_to_destroy); + rtree::destroy(node_to_destroy, m_node_proxy); } inline void operator()(leaf & l) { BOOST_GEOMETRY_INDEX_ASSERT(&l == rtree::get(m_current_node), "invalid pointers"); - m_node_proxy.template destroy(m_current_node); + rtree::destroy(m_current_node, m_node_proxy); } private: diff --git a/include/boost/geometry/extensions/index/rtree/visitors/insert.hpp b/include/boost/geometry/extensions/index/rtree/visitors/insert.hpp index ea708d7a9..6410dfee3 100644 --- a/include/boost/geometry/extensions/index/rtree/visitors/insert.hpp +++ b/include/boost/geometry/extensions/index/rtree/visitors/insert.hpp @@ -130,7 +130,7 @@ public: NodeProxy & node_proxy) { // create additional node - node * second_node = node_proxy.template create(); + node * second_node = rtree::create(node_proxy); Node & n2 = rtree::get(*second_node); // redistribute elements @@ -287,7 +287,7 @@ protected: BOOST_GEOMETRY_INDEX_ASSERT(&n == rtree::get(m_root_node), "node should be the root"); // create new root and add nodes - node * new_root = m_node_proxy.template create(); + node * new_root = rtree::create(m_node_proxy); rtree::elements(rtree::get(*new_root)).push_back(std::make_pair(n_box, m_root_node)); rtree::elements(rtree::get(*new_root)).push_back(additional_nodes[0]); diff --git a/include/boost/geometry/extensions/index/rtree/visitors/remove.hpp b/include/boost/geometry/extensions/index/rtree/visitors/remove.hpp index 815a8a9f3..a825da553 100644 --- a/include/boost/geometry/extensions/index/rtree/visitors/remove.hpp +++ b/include/boost/geometry/extensions/index/rtree/visitors/remove.hpp @@ -128,13 +128,13 @@ public: { reinsert_elements(rtree::get(*it->second), it->first); - m_node_proxy.template destroy(it->second); + index::detail::rtree::destroy(it->second, m_node_proxy); } else { reinsert_elements(rtree::get(*it->second), it->first); - m_node_proxy.template destroy(it->second); + rtree::destroy(it->second, m_node_proxy); } } @@ -145,7 +145,7 @@ public: m_root_node = rtree::elements(n)[0].second; --m_leafs_level; - m_node_proxy.template destroy(root_to_destroy); + rtree::destroy(root_to_destroy, m_node_proxy); } } }