$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r64590 - in sandbox/geometry: boost/geometry/iterators boost/geometry/ranges libs/geometry/test/ranges
From: barend.gehrels_at_[hidden]
Date: 2010-08-04 05:36:48
Author: barendgehrels
Date: 2010-08-04 05:17:31 EDT (Wed, 04 Aug 2010)
New Revision: 64590
URL: http://svn.boost.org/trac/boost/changeset/64590
Log:
Made box/segment iterators random access
Text files modified: 
   sandbox/geometry/boost/geometry/iterators/box_iterator.hpp           |     7 ++++++-                                 
   sandbox/geometry/boost/geometry/iterators/segment_range_iterator.hpp |     9 +++++++--                               
   sandbox/geometry/boost/geometry/ranges/box_range.hpp                 |     2 +-                                      
   sandbox/geometry/libs/geometry/test/ranges/box_range.cpp             |     6 ++++++                                  
   sandbox/geometry/libs/geometry/test/ranges/segment_range.cpp         |     6 ++++++                                  
   5 files changed, 26 insertions(+), 4 deletions(-)
Modified: sandbox/geometry/boost/geometry/iterators/box_iterator.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/iterators/box_iterator.hpp	(original)
+++ sandbox/geometry/boost/geometry/iterators/box_iterator.hpp	2010-08-04 05:17:31 EDT (Wed, 04 Aug 2010)
@@ -32,7 +32,7 @@
     <
         box_iterator<Box>,
         typename point_type<Box>::type const,
-        boost::bidirectional_traversal_tag
+        boost::random_access_traversal_tag
     >
 {
     explicit inline box_iterator(Box const& box)
@@ -80,6 +80,11 @@
         m_index--;
     }
 
+    inline difference_type distance_to(box_iterator<Box> const& other) const
+    {
+        return other.m_index - this->m_index;
+    }
+
     inline void init(Box const& box)
     {
         // asb -> lower_left, lower_right, upper_left, upper_right
Modified: sandbox/geometry/boost/geometry/iterators/segment_range_iterator.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/iterators/segment_range_iterator.hpp	(original)
+++ sandbox/geometry/boost/geometry/iterators/segment_range_iterator.hpp	2010-08-04 05:17:31 EDT (Wed, 04 Aug 2010)
@@ -32,7 +32,7 @@
     <
         segment_range_iterator<Segment>,
         typename point_type<Segment>::type const,
-        boost::bidirectional_traversal_tag
+        boost::random_access_traversal_tag
     >
 {
     // Default constructor is required to check concept of Range
@@ -90,13 +90,18 @@
         m_index--;
     }
 
+    inline difference_type distance_to(segment_range_iterator<Segment> const& other) const
+    {
+        return other.m_index - this->m_index;
+    }
+
     inline void init(Segment const& segment)
     {
         assign_point_from_index<0>(segment, m_points[0]);
         assign_point_from_index<1>(segment, m_points[1]);
     }
 
-    // We HAVE TO copy the points, because a segment does not need 
+    // We HAVE TO copy the points, because a segment does not need
     // to consist of two points,
     // and we are expected to return a point here
     point_type m_points[2];
Modified: sandbox/geometry/boost/geometry/ranges/box_range.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/ranges/box_range.hpp	(original)
+++ sandbox/geometry/boost/geometry/ranges/box_range.hpp	2010-08-04 05:17:31 EDT (Wed, 04 Aug 2010)
@@ -43,7 +43,7 @@
 };
 
 
-// All box ranges can be handled as linestrings
+// All box ranges can be handled as rings
 namespace traits
 {
     template<typename Box>
Modified: sandbox/geometry/libs/geometry/test/ranges/box_range.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/ranges/box_range.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/ranges/box_range.cpp	2010-08-04 05:17:31 EDT (Wed, 04 Aug 2010)
@@ -46,6 +46,12 @@
         it--;
         // Not verified further, same as segment
     }
+
+    {
+        // Check random access behaviour
+        int const n = boost::size(range);
+        BOOST_CHECK_EQUAL(n, 5);
+    }
 }
 
 
Modified: sandbox/geometry/libs/geometry/test/ranges/segment_range.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/ranges/segment_range.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/ranges/segment_range.cpp	2010-08-04 05:17:31 EDT (Wed, 04 Aug 2010)
@@ -52,6 +52,12 @@
         out << " " << boost::geometry::get<0>(*it2) << boost::geometry::get<1>(*it2);
         BOOST_CHECK_EQUAL(out.str(), expected);
     }
+
+    {
+        // Check random access behaviour
+        int const n = boost::size(range);
+        BOOST_CHECK_EQUAL(n, 2);
+    }
 }