$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r72573 - in sandbox-branches/geometry/index_080_new: boost/geometry/extensions/index/rtree boost/geometry/extensions/index/rtree/rstar boost/geometry/extensions/index/rtree/visitors boost/geometry/extensions/index/translator tests
From: adam.wulkiewicz_at_[hidden]
Date: 2011-06-13 17:04:56
Author: awulkiew
Date: 2011-06-13 17:04:55 EDT (Mon, 13 Jun 2011)
New Revision: 72573
URL: http://svn.boost.org/trac/boost/changeset/72573
Log:
translator::getter added + some cleanup e.g. in /rstar/insert.hpp visitors::insert replaced by detail::rstar::insert.
Added:
   sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/translator/getter.hpp   (contents, props changed)
   sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/translator/translator.hpp   (contents, props changed)
Text files modified: 
   sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/rstar/insert.hpp    |   186 +++++++++++++++------------------------ 
   sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/rtree.hpp           |     2                                         
   sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/visitors/insert.hpp |     3                                         
   sandbox-branches/geometry/index_080_new/tests/translators.hpp                                     |    18 +++                                     
   4 files changed, 91 insertions(+), 118 deletions(-)
Modified: sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/rstar/insert.hpp
==============================================================================
--- sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/rstar/insert.hpp	(original)
+++ sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/rstar/insert.hpp	2011-06-13 17:04:55 EDT (Mon, 13 Jun 2011)
@@ -364,133 +364,91 @@
     }
 };
 
+} // namespace rstar
+
+} // namespace detail
+
 // R*-tree insert visitor
 template <typename Element, typename Value, typename Options, typename Translator, typename Box>
-class insert : public rtree::visitor<Value, Box, typename Options::node_tag, false>::type
+class insert<Element, Value, Options, Translator, Box, reinsert_tag>
+	: public rtree::visitor<Value, Box, typename Options::node_tag, false>::type
 {
-protected:
-    typedef typename rtree::node<Value, Box, typename Options::node_tag>::type node;
-    typedef typename rtree::internal_node<Value, Box, typename Options::node_tag>::type internal_node;
-    typedef typename rtree::leaf<Value, Box, typename Options::node_tag>::type leaf;
+private:
+	typedef typename rtree::node<Value, Box, typename Options::node_tag>::type node;
+	typedef typename rtree::internal_node<Value, Box, typename Options::node_tag>::type internal_node;
+	typedef typename rtree::leaf<Value, Box, typename Options::node_tag>::type leaf;
 
 public:
-    inline insert(node* & root,
-                  size_t & leafs_level,
-                  Element const& element,
-                  size_t min_elements,
-                  size_t max_elements,
-                  Translator const& tr,
-                  size_t relative_level = 0
-    )
-        : m_root(root), m_leafs_level(leafs_level), m_element(element)
-        , m_min_elements(min_elements), m_max_elements(max_elements)
-        , m_tr(tr), m_relative_level(relative_level)
-    {}
-
-    inline void operator()(internal_node & n)
-    {
-        typedef typename elements_type<internal_node>::type elements_type;
-
-        rstar::level_insert<0, Element, Value, Options, Translator, Box> lins_v(
-            m_root, m_leafs_level, m_element, m_min_elements, m_max_elements, m_tr, m_relative_level);
-
-        rtree::apply_visitor(lins_v, n);
-
-        if ( !lins_v.result_elements.empty() )
-        {
-            recursive_reinsert(lins_v.result_elements, lins_v.result_relative_level);
-        }
-    }
-
-    inline void operator()(leaf & n)
-    {
-        rstar::level_insert<0, Element, Value, Options, Translator, Box> lins_v(
-            m_root, m_leafs_level, m_element, m_min_elements, m_max_elements, m_tr, m_relative_level);
+	inline insert(node* & root,
+				  size_t & leafs_level,
+				  Element const& element,
+				  size_t min_elements,
+				  size_t max_elements,
+				  Translator const& tr,
+				  size_t relative_level = 0)
+		: m_root(root), m_leafs_level(leafs_level), m_element(element)
+		, m_min_elements(min_elements), m_max_elements(max_elements)
+		, m_tr(tr), m_relative_level(relative_level)
+	{}
+
+	inline void operator()(internal_node & n)
+	{
+		typedef typename elements_type<internal_node>::type elements_type;
+
+		detail::rstar::level_insert<0, Element, Value, Options, Translator, Box> lins_v(
+			m_root, m_leafs_level, m_element, m_min_elements, m_max_elements, m_tr, m_relative_level);
+
+		rtree::apply_visitor(lins_v, n);
+
+		if ( !lins_v.result_elements.empty() )
+		{
+			recursive_reinsert(lins_v.result_elements, lins_v.result_relative_level);
+		}
+	}
+
+	inline void operator()(leaf & n)
+	{
+		detail::rstar::level_insert<0, Element, Value, Options, Translator, Box> lins_v(
+			m_root, m_leafs_level, m_element, m_min_elements, m_max_elements, m_tr, m_relative_level);
 
-        rtree::apply_visitor(lins_v, n);
+		rtree::apply_visitor(lins_v, n);
 
                 // we're in the root, so root should be split and there should be no elements to reinsert
-        assert(lins_v.result_elements.empty());
-    }
+		assert(lins_v.result_elements.empty());
+	}
 
-protected:
-    template <typename Elements>
-    inline void recursive_reinsert(Elements const& elements, size_t relative_level)
-    {
-        typedef typename Elements::value_type element_type;
-
-        // reinsert children starting from the minimum distance
-        for ( typename Elements::const_reverse_iterator it = elements.rbegin();
-            it != elements.rend(); ++it)
-        {
-            rstar::level_insert<1, element_type, Value, Options, Translator, Box> lins_v(
-                m_root, m_leafs_level, *it, m_min_elements, m_max_elements, m_tr, relative_level);
+private:
+	template <typename Elements>
+	inline void recursive_reinsert(Elements const& elements, size_t relative_level)
+	{
+		typedef typename Elements::value_type element_type;
+
+		// reinsert children starting from the minimum distance
+		for ( typename Elements::const_reverse_iterator it = elements.rbegin();
+			it != elements.rend(); ++it)
+		{
+			detail::rstar::level_insert<1, element_type, Value, Options, Translator, Box> lins_v(
+				m_root, m_leafs_level, *it, m_min_elements, m_max_elements, m_tr, relative_level);
 
-            rtree::apply_visitor(lins_v, *m_root);
+			rtree::apply_visitor(lins_v, *m_root);
 
-            assert(relative_level + 1 == lins_v.result_relative_level);
+			assert(relative_level + 1 == lins_v.result_relative_level);
 
                         // non-root relative level
-            if ( lins_v.result_relative_level < m_leafs_level && !lins_v.result_elements.empty())
-            {
-                recursive_reinsert(lins_v.result_elements, lins_v.result_relative_level);
-            }
-        }
-    }
-
-    node* & m_root;
-    size_t & m_leafs_level;
-    Element const& m_element;
-    size_t m_min_elements;
-    size_t m_max_elements;
-    Translator const& m_tr;
-    size_t m_relative_level;
-};
-
-} // namespace rstar
-
-} // namespace detail
-
-// R*-tree insert visitor
-template <typename Element, typename Value, typename Options, typename Translator, typename Box>
-class insert<Element, Value, Options, Translator, Box, reinsert_tag>
-    : public detail::rstar::insert<Element, Value, Options, Translator, Box>
-{
-    typedef detail::rstar::insert<Element, Value, Options, Translator, Box> base;
-    typedef typename base::node node;
-
-public:
-    inline insert(node* & root,
-                  size_t & leafs_level,
-                  Element const& element,
-                  size_t min_elements,
-                  size_t max_elements,
-                  Translator const& tr,
-                  size_t relative_level = 0
-    )
-        : base(root, leafs_level, element, min_elements, max_elements, tr, relative_level)
-    {}
-};
-
-// R*-tree insert visitor
-template <typename Value, typename Options, typename Translator, typename Box>
-class insert<Value, Value, Options, Translator, Box, reinsert_tag>
-    : public detail::rstar::insert<Value, Value, Options, Translator, Box>
-{
-    typedef detail::rstar::insert<Value, Value, Options, Translator, Box> base;
-    typedef typename base::node node;
-
-public:
-    inline insert(node* & root,
-                  size_t & leafs_level,
-                  Value const& element,
-                  size_t min_elements,
-                  size_t max_elements,
-                  Translator const& tr,
-                  size_t relative_level = 0
-    )
-        : base(root, leafs_level, element, min_elements, max_elements, tr, relative_level)
-    {}
+			if ( lins_v.result_relative_level < m_leafs_level && !lins_v.result_elements.empty())
+			{
+				recursive_reinsert(lins_v.result_elements, lins_v.result_relative_level);
+			}
+		}
+	}
+
+	node* & m_root;
+	size_t & m_leafs_level;
+	Element const& m_element;
+	size_t m_min_elements;
+	size_t m_max_elements;
+	Translator const& m_tr;
+	size_t m_relative_level;
 };
 
 }}} // namespace detail::rtree::visitors
Modified: sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/rtree.hpp
==============================================================================
--- sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/rtree.hpp	(original)
+++ sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/rtree.hpp	2011-06-13 17:04:55 EDT (Mon, 13 Jun 2011)
@@ -14,7 +14,7 @@
 #include <boost/geometry/geometries/point.hpp>
 #include <boost/geometry/geometries/box.hpp>
 
-#include <boost/geometry/extensions/index/translator/def.hpp>
+#include <boost/geometry/extensions/index/translator/translator.hpp>
 
 #include <boost/geometry/extensions/index/rtree/options.hpp>
 #include <boost/geometry/extensions/index/rtree/filters.hpp>
Modified: sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/visitors/insert.hpp
==============================================================================
--- sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/visitors/insert.hpp	(original)
+++ sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/rtree/visitors/insert.hpp	2011-06-13 17:04:55 EDT (Mon, 13 Jun 2011)
@@ -227,10 +227,11 @@
 
 } // namespace detail
 
+// Insert visitor forward declaration
 template <typename Element, typename Value, typename Options, typename Translator, typename Box, typename InsertTag>
 struct insert;
 
-// Default insert visitor
+// Default insert visitor used for nodes elements
 template <typename Element, typename Value, typename Options, typename Translator, typename Box>
 struct insert<Element, Value, Options, Translator, Box, insert_tag>
         : public detail::insert<Element, Value, Options, Translator, Box>
Added: sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/translator/getter.hpp
==============================================================================
--- (empty file)
+++ sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/translator/getter.hpp	2011-06-13 17:04:55 EDT (Mon, 13 Jun 2011)
@@ -0,0 +1,33 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Boost.SpatialIndex - value to bounding object translation as a getter (object's member function)
+//
+// Copyright 2011 Adam Wulkiewicz.
+// 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_TRANSLATOR_GETTER_HPP
+#define BOOST_GEOMETRY_EXTENSIONS_INDEX_TRANSLATOR_GETTER_HPP
+
+namespace boost { namespace geometry { namespace index { namespace translator {
+
+template <typename Value, typename Indexable, Indexable const& (Value::*Getter)() const>
+struct getter
+{
+    typedef Indexable indexable_type;
+
+	indexable_type const& operator()(Value const& v) const
+    {
+        return (v.*Getter)();
+    }
+
+    bool equals(Value const& v1, Value const& v2) const
+    {
+        return geometry::equals(operator()(v1), operator()(v2));
+    }
+};
+
+}}}} // namespace boost::geometry::index::translator
+
+#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_TRANSLATOR_GETTER_HPP
Added: sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/translator/translator.hpp
==============================================================================
--- (empty file)
+++ sandbox-branches/geometry/index_080_new/boost/geometry/extensions/index/translator/translator.hpp	2011-06-13 17:04:55 EDT (Mon, 13 Jun 2011)
@@ -0,0 +1,17 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Boost.SpatialIndex - translators
+//
+// Copyright 2011 Adam Wulkiewicz.
+// 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_TRANSLATOR_TRANSLATOR_HPP
+#define BOOST_GEOMETRY_EXTENSIONS_INDEX_TRANSLATOR_TRANSLATOR_HPP
+
+#include <boost/geometry/extensions/index/translator/def.hpp>
+#include <boost/geometry/extensions/index/translator/index.hpp>
+#include <boost/geometry/extensions/index/translator/getter.hpp>
+
+#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_TRANSLATOR_TRANSLATOR_HPP
Modified: sandbox-branches/geometry/index_080_new/tests/translators.hpp
==============================================================================
--- sandbox-branches/geometry/index_080_new/tests/translators.hpp	(original)
+++ sandbox-branches/geometry/index_080_new/tests/translators.hpp	2011-06-13 17:04:55 EDT (Mon, 13 Jun 2011)
@@ -5,8 +5,7 @@
 #include <boost/geometry/geometries/polygon.hpp>
 #include <boost/geometry/extensions/index/rtree/rtree.hpp>
 
-#include <boost/geometry/extensions/index/translator/def.hpp>
-#include <boost/geometry/extensions/index/translator/index.hpp>
+#include <boost/geometry/extensions/index/translator/translator.hpp>
 
 #include <vector>
 #include <map>
@@ -14,6 +13,17 @@
 #include <boost/shared_ptr.hpp>
 #include <boost/scoped_ptr.hpp>
 
+template <typename Indexable>
+struct tests_translators_val
+{
+	Indexable const& get_box() const
+	{
+		return i;
+	}
+
+	Indexable i;
+};
+
 void tests_translators_hpp()
 {
         std::cout << "tests/translators.hpp\n";
@@ -68,6 +78,10 @@
     B tmp_b;
     tmp_b = d( std::pair<model::polygon<P>, B>() );
     tmp_b = dd( std::pair<B, model::polygon<P> >() );
+
+	tests_translators_val<P> val_p;
+	index::translator::getter<tests_translators_val<P>, P, &tests_translators_val<P>::get_box> tr_get_p;
+	tmp_p = tr_get_p(val_p);
 }
 
 #endif // TESTS_TRANSLATORS_HPP