$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r82611 - in sandbox-branches/geometry/index/boost/geometry/index: . adaptors detail/rtree
From: adam.wulkiewicz_at_[hidden]
Date: 2013-01-25 13:43:49
Author: awulkiew
Date: 2013-01-25 13:43:48 EST (Fri, 25 Jan 2013)
New Revision: 82611
URL: http://svn.boost.org/trac/boost/changeset/82611
Log:
Added rtree free function insert.
Added adaptors::queried().
nearest_query_range and spatial_query_range moved to adaptors::detail.
Added:
   sandbox-branches/geometry/index/boost/geometry/index/adaptors/query.hpp   (contents, props changed)
Text files modified: 
   sandbox-branches/geometry/index/boost/geometry/index/adaptors/nearest_query.hpp |     8 ++++----                                
   sandbox-branches/geometry/index/boost/geometry/index/adaptors/spatial_query.hpp |     8 ++++----                                
   sandbox-branches/geometry/index/boost/geometry/index/detail/rtree/adaptors.hpp  |    29 +++++++++++++++++++++++++++--           
   sandbox-branches/geometry/index/boost/geometry/index/rtree.hpp                  |    18 ++++++++++++++++++                      
   4 files changed, 53 insertions(+), 10 deletions(-)
Modified: sandbox-branches/geometry/index/boost/geometry/index/adaptors/nearest_query.hpp
==============================================================================
--- sandbox-branches/geometry/index/boost/geometry/index/adaptors/nearest_query.hpp	(original)
+++ sandbox-branches/geometry/index/boost/geometry/index/adaptors/nearest_query.hpp	2013-01-25 13:43:48 EST (Fri, 25 Jan 2013)
@@ -19,6 +19,8 @@
 
 namespace adaptors {
 
+namespace detail {
+
 template <typename Index>
 class nearest_query_range
 {
@@ -45,8 +47,6 @@
     inline const_iterator end() const { return 0; }
 };
 
-namespace detail {
-
 // TODO: awulkiew - consider removing references from predicates
 
 template<typename DistancesPredicates, typename Predicates>
@@ -108,12 +108,12 @@
 } // namespace adaptors
 
 template<typename Index, typename DistancesPredicates, typename Predicates>
-index::adaptors::nearest_query_range<Index>
+index::adaptors::detail::nearest_query_range<Index>
 operator|(
     Index const& si,
     index::adaptors::detail::nearest_query<DistancesPredicates, Predicates> const& f)
 {
-    return index::adaptors::nearest_query_range<Index>(
+    return index::adaptors::detail::nearest_query_range<Index>(
         si, f.distances_predicates, f.count, f.predicates);
 }
 
Added: sandbox-branches/geometry/index/boost/geometry/index/adaptors/query.hpp
==============================================================================
--- (empty file)
+++ sandbox-branches/geometry/index/boost/geometry/index/adaptors/query.hpp	2013-01-25 13:43:48 EST (Fri, 25 Jan 2013)
@@ -0,0 +1,88 @@
+// Boost.Geometry Index
+//
+// Query range adaptor
+//
+// Copyright (c) 2011-2013 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_INDEX_ADAPTORS_QUERY_HPP
+#define BOOST_GEOMETRY_INDEX_ADAPTORS_QUERY_HPP
+
+/*!
+\defgroup adaptors Adaptors (boost::geometry::index::adaptors::)
+*/
+
+namespace boost { namespace geometry { namespace index {
+
+namespace adaptors {
+
+namespace detail {
+
+template <typename Index>
+class query_range
+{
+    BOOST_MPL_ASSERT_MSG(
+        (false),
+        NOT_IMPLEMENTED_FOR_THIS_INDEX,
+        (query_range));
+
+    typedef int* iterator;
+    typedef const int* const_iterator;
+
+    template <typename Predicates>
+    inline query_range(
+        Index const&,
+        Predicates const&)
+    {}
+
+    inline iterator begin() { return 0; }
+    inline iterator end() { return 0; }
+    inline const_iterator begin() const { return 0; }
+    inline const_iterator end() const { return 0; }
+};
+
+// TODO: awulkiew - consider removing reference from predicates
+
+template<typename Predicates>
+struct query
+{
+    inline explicit query(Predicates const& pred)
+        : predicates(pred)
+    {}
+
+    Predicates const& predicates;
+};
+
+} // namespace detail
+
+/*!
+\brief The query index adaptor generator.
+
+\ingroup adaptors
+
+\param pred   Predicates.
+*/
+template <typename Predicates>
+detail::query<Predicates>
+queried(Predicates const& pred)
+{
+    return detail::query<Predicates>(pred);
+}
+
+} // namespace adaptors
+
+template<typename Index, typename Predicates>
+index::adaptors::detail::query_range<Index>
+operator|(
+    Index const& si,
+    index::adaptors::detail::query<Predicates> const& f)
+{
+    return index::adaptors::detail::query_range<Index>(si, f.predicates);
+}
+
+}}} // namespace boost::geometry::index
+
+#endif // BOOST_GEOMETRY_INDEX_ADAPTORS_QUERY_HPP
Modified: sandbox-branches/geometry/index/boost/geometry/index/adaptors/spatial_query.hpp
==============================================================================
--- sandbox-branches/geometry/index/boost/geometry/index/adaptors/spatial_query.hpp	(original)
+++ sandbox-branches/geometry/index/boost/geometry/index/adaptors/spatial_query.hpp	2013-01-25 13:43:48 EST (Fri, 25 Jan 2013)
@@ -19,6 +19,8 @@
 
 namespace adaptors {
 
+namespace detail {
+
 template <typename Index>
 class spatial_query_range
 {
@@ -42,8 +44,6 @@
     inline const_iterator end() const { return 0; }
 };
 
-namespace detail {
-
 // TODO: awulkiew - consider removing reference from predicates
 
 template<typename Predicates>
@@ -75,12 +75,12 @@
 } // namespace adaptors
 
 template<typename Index, typename Predicates>
-index::adaptors::spatial_query_range<Index>
+index::adaptors::detail::spatial_query_range<Index>
 operator|(
     Index const& si,
     index::adaptors::detail::spatial_query<Predicates> const& f)
 {
-    return index::adaptors::spatial_query_range<Index>(si, f.predicates);
+    return index::adaptors::detail::spatial_query_range<Index>(si, f.predicates);
 }
 
 }}} // namespace boost::geometry::index
Modified: sandbox-branches/geometry/index/boost/geometry/index/detail/rtree/adaptors.hpp
==============================================================================
--- sandbox-branches/geometry/index/boost/geometry/index/detail/rtree/adaptors.hpp	(original)
+++ sandbox-branches/geometry/index/boost/geometry/index/detail/rtree/adaptors.hpp	2013-01-25 13:43:48 EST (Fri, 25 Jan 2013)
@@ -16,13 +16,14 @@
 
 #include <boost/geometry/index/adaptors/spatial_query.hpp>
 #include <boost/geometry/index/adaptors/nearest_query.hpp>
+#include <boost/geometry/index/adaptors/query.hpp>
 
 namespace boost { namespace geometry { namespace index {
 
 template <typename Value, typename Options, typename Translator, typename Allocator>
 class rtree;
 
-namespace adaptors {
+namespace adaptors { namespace detail {
 
 template <typename Value, typename Options, typename Translator, typename Allocator>
 class spatial_query_range< index::rtree<Value, Options, Translator, Allocator> >
@@ -78,7 +79,31 @@
     result_type m_result;
 };
 
-} // namespace adaptors
+template <typename Value, typename Options, typename Translator, typename Allocator>
+class query_range< index::rtree<Value, Options, Translator, Allocator> >
+{
+public:
+    typedef std::vector<Value> result_type;
+    typedef typename result_type::iterator iterator;
+    typedef typename result_type::const_iterator const_iterator;
+
+    template <typename Predicates> inline
+    query_range(index::rtree<Value, Options, Translator, Allocator> const& rtree,
+                Predicates const& pred)
+    {
+        rtree.query(pred, std::back_inserter(m_result));
+    }
+
+    inline iterator begin() { return m_result.begin(); }
+    inline iterator end() { return m_result.end(); }
+    inline const_iterator begin() const { return m_result.begin(); }
+    inline const_iterator end() const { return m_result.end(); }
+
+private:
+    result_type m_result;
+};
+
+}} // namespace adaptors::detail
 
 }}} // namespace boost::geometry::index
 
Modified: sandbox-branches/geometry/index/boost/geometry/index/rtree.hpp
==============================================================================
--- sandbox-branches/geometry/index/boost/geometry/index/rtree.hpp	(original)
+++ sandbox-branches/geometry/index/boost/geometry/index/rtree.hpp	2013-01-25 13:43:48 EST (Fri, 25 Jan 2013)
@@ -1461,6 +1461,24 @@
     return tree.remove(rng);
 }
 
+template <typename Value, typename Options, typename Translator, typename Allocator, typename Predicates, typename OutIter> inline
+typename rtree<Value, Options, Translator, Allocator>::size_type
+query(rtree<Value, Options, Translator, Allocator> const& tree,
+      Predicates const& pred,
+      OutIter out_it)
+{
+    return tree.query(pred, out_it);
+}
+
+template <typename Value, typename Options, typename Translator, typename Allocator, typename Predicates> inline
+typename rtree<Value, Options, Translator, Allocator>::size_type
+query(rtree<Value, Options, Translator, Allocator> const& tree,
+      Predicates const& pred,
+      typename rtree<Value, Options, Translator, Allocator>::value_type & v)
+{
+    return tree.query(pred, v);
+}
+
 /*!
 \brief Find values meeting spatial predicates.