$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r61739 - in sandbox/geometry: boost/geometry/iterators boost/geometry/strategies/transform libs/geometry/test/extensions/algorithms libs/geometry/test/extensions/gis/latlong libs/geometry/test/extensions/gis/projections libs/geometry/test/iterators libs/geometry/test/multi/algorithms
From: barend.gehrels_at_[hidden]
Date: 2010-05-02 17:38:14
Author: barendgehrels
Date: 2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
New Revision: 61739
URL: http://svn.boost.org/trac/boost/changeset/61739
Log:
Implemented circular_iterator to reverse also backwards
Reversed const std::string -> std::string const for consistency
Default mirror tempate argument for map transformer
Set embed manifest to false because of after-link errors, sometimes but not always, on VC2005 / Win7 / 64 bits
Text files modified: 
   sandbox/geometry/boost/geometry/iterators/circular_iterator.hpp                |    24 ++++++++                                
   sandbox/geometry/boost/geometry/iterators/ever_circling_iterator.hpp           |     2                                         
   sandbox/geometry/boost/geometry/strategies/transform/map_transformer.hpp       |     2                                         
   sandbox/geometry/libs/geometry/test/extensions/algorithms/midpoints.cpp        |     4                                         
   sandbox/geometry/libs/geometry/test/extensions/algorithms/selected.cpp         |     4                                         
   sandbox/geometry/libs/geometry/test/extensions/gis/latlong/parse_dms.cpp       |    12 ++--                                    
   sandbox/geometry/libs/geometry/test/extensions/gis/projections/projection.cpp  |     2                                         
   sandbox/geometry/libs/geometry/test/extensions/gis/projections/projections.cpp |     4                                         
   sandbox/geometry/libs/geometry/test/iterators/circular_iterator.cpp            |   114 +++++++++++++++++++++------------------ 
   sandbox/geometry/libs/geometry/test/iterators/circular_iterator.vcproj         |     2                                         
   sandbox/geometry/libs/geometry/test/iterators/ever_circling_iterator.cpp       |     2                                         
   sandbox/geometry/libs/geometry/test/iterators/ever_circling_iterator.vcproj    |     2                                         
   sandbox/geometry/libs/geometry/test/iterators/segment_iterator.cpp             |     2                                         
   sandbox/geometry/libs/geometry/test/iterators/segment_iterator.vcproj          |     2                                         
   sandbox/geometry/libs/geometry/test/multi/algorithms/multi_distance.cpp        |     6 +-                                      
   15 files changed, 110 insertions(+), 74 deletions(-)
Modified: sandbox/geometry/boost/geometry/iterators/circular_iterator.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/iterators/circular_iterator.hpp	(original)
+++ sandbox/geometry/boost/geometry/iterators/circular_iterator.hpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -15,6 +15,7 @@
 
 #include <boost/geometry/iterators/base.hpp>
 
+
 namespace boost { namespace geometry
 {
 
@@ -68,6 +69,27 @@
             check_end();
         }
     }
+    inline void decrement()
+    {
+        if (this->base() != m_end)
+        {
+            // If at begin, go back to end (assumed this is possible...)
+            if (this->base() == m_begin)
+            {
+                this->base_reference() = this->m_end;
+            }
+
+            // Decrement
+            (this->base_reference())--;
+
+            // If really back at start, go to end == end of iteration
+            if (this->base() == m_start)
+            {
+                this->base_reference() = this->m_end;
+            }
+        }
+    }
+
 
     inline void check_end()
     {
@@ -87,6 +109,8 @@
     Iterator m_start;
 };
 
+
 }} // namespace boost::geometry
 
+
 #endif // BOOST_GEOMETRY_ITERATORS_CIRCULAR_ITERATOR_HPP
Modified: sandbox/geometry/boost/geometry/iterators/ever_circling_iterator.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/iterators/ever_circling_iterator.hpp	(original)
+++ sandbox/geometry/boost/geometry/iterators/ever_circling_iterator.hpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -56,7 +56,7 @@
         this->base_reference() = start;
     }
 
-    /// Navigate to a certain position, should be in [start .. end], it at end
+    /// Navigate to a certain position, should be in [start .. end], if at end
     /// it will circle again.
     inline void moveto(Iterator it)
     {
Modified: sandbox/geometry/boost/geometry/strategies/transform/map_transformer.hpp
==============================================================================
--- sandbox/geometry/boost/geometry/strategies/transform/map_transformer.hpp	(original)
+++ sandbox/geometry/boost/geometry/strategies/transform/map_transformer.hpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -32,7 +32,7 @@
 template
 <
     typename P1, typename P2,
-    bool Mirror, bool SameScale = true,
+    bool Mirror = false, bool SameScale = true,
     std::size_t Dimension1 = dimension<P1>::type::value,
     std::size_t Dimension2 = dimension<P2>::type::value
 >
Modified: sandbox/geometry/libs/geometry/test/extensions/algorithms/midpoints.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/extensions/algorithms/midpoints.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/extensions/algorithms/midpoints.cpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -26,7 +26,7 @@
 #include <test_common/test_point.hpp>
 
 template <typename G>
-void test_midpoints(const G& g, bool start_and_end)
+void test_midpoints(G const& g, bool start_and_end)
 {
     G processed;
     boost::geometry::midpoints(g, start_and_end, std::back_inserter(processed));
@@ -34,7 +34,7 @@
 }
 
 template <typename G>
-void test_midpoints(const std::string& wkt)
+void test_midpoints(std::string const& wkt)
 {
     G g;
     boost::geometry::read_wkt(wkt, g);
Modified: sandbox/geometry/libs/geometry/test/extensions/algorithms/selected.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/extensions/algorithms/selected.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/extensions/algorithms/selected.cpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -23,14 +23,14 @@
 #include <test_common/test_point.hpp>
 
 template <typename G, typename P>
-void test_selected(const G& g, const P& point, bool result, double dist)
+void test_selected(G const& g, P const& point, bool result, double dist)
 {
     bool sel = boost::geometry::selected(g, point, dist);
     BOOST_CHECK_EQUAL(sel, result);
 }
 
 template <typename G, typename P>
-void test_selected(const std::string& wkt, const P& point, bool result, double dist)
+void test_selected(std::string const& wkt, P const& point, bool result, double dist)
 {
     G g;
     boost::geometry::read_wkt(wkt, g);
Modified: sandbox/geometry/libs/geometry/test/extensions/gis/latlong/parse_dms.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/extensions/gis/latlong/parse_dms.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/extensions/gis/latlong/parse_dms.cpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -16,36 +16,36 @@
 
 
 
-void check(const boost::geometry::dms_result& r, double v, int axis)
+void check(boost::geometry::dms_result const& r, double v, int axis)
 {
-    const double d = r;
+    double const d = r;
     BOOST_CHECK_CLOSE(d, v, 0.0001);
     BOOST_CHECK(int(r.axis()) == axis);
 }
 
 template <bool as_radian>
-void test_dms(const std::string& s, double v, int axis)
+void test_dms(std::string const& s, double v, int axis)
 {
     boost::geometry::strategy::dms_parser<as_radian> parser;
     check(parser(s.c_str()), v, axis);
 }
 
 template <bool as_radian>
-void test_dms_french(const std::string& s, double v, int axis)
+void test_dms_french(std::string const& s, double v, int axis)
 {
     boost::geometry::strategy::dms_parser<as_radian, 'N', 'E', 'S', 'O'> parser;
     check(parser(s.c_str()), v, axis);
 }
 
 template <bool as_radian>
-void test_dms_dutch(const std::string& s, double v, int axis)
+void test_dms_dutch(std::string const& s, double v, int axis)
 {
     boost::geometry::strategy::dms_parser<as_radian, 'N', 'O', 'Z', 'W'> parser;
     check(parser(s.c_str()), v, axis);
 }
 
 template <bool as_radian>
-void test_dms_case(const std::string& s, double v, int axis)
+void test_dms_case(std::string const& s, double v, int axis)
 {
     boost::geometry::strategy::dms_parser<as_radian, 'n', 'e', 's', 'w'> parser;
     check(parser(s.c_str()), v, axis);
Modified: sandbox/geometry/libs/geometry/test/extensions/gis/projections/projection.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/extensions/gis/projections/projection.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/extensions/gis/projections/projection.cpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -33,7 +33,7 @@
 void test_one(double lon, double lat,
               typename boost::geometry::coordinate_type<P2>::type x,
               typename boost::geometry::coordinate_type<P2>::type y,
-              const std::string& parameters)
+              std::string const& parameters)
 {
     boost::geometry::projection::parameters par = boost::geometry::projection::detail::pj_init_plus(parameters);
     Prj prj(par);
Modified: sandbox/geometry/libs/geometry/test/extensions/gis/projections/projections.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/extensions/gis/projections/projections.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/extensions/gis/projections/projections.cpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -47,7 +47,7 @@
               double lon, double lat,
               typename boost::geometry::coordinate_type<P>::type x,
               typename boost::geometry::coordinate_type<P>::type y,
-              const std::string& parameters)
+              std::string const& parameters)
 {
     typedef typename boost::geometry::coordinate_type<P>::type coord_type;
     typedef boost::geometry::point_ll<coord_type, boost::geometry::cs::geographic<boost::geometry::degree> > lonlat_type;
@@ -75,7 +75,7 @@
               typename boost::geometry::coordinate_type<P>::type x,
               typename boost::geometry::coordinate_type<P>::type y,
               double lon, double lat,
-              const std::string& parameters)
+              std::string const& parameters)
 {
     typedef typename boost::geometry::coordinate_type<P>::type coord_type;
     typedef boost::geometry::point_ll<coord_type, boost::geometry::cs::geographic<boost::geometry::degree> > lonlat_type;
Modified: sandbox/geometry/libs/geometry/test/iterators/circular_iterator.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/iterators/circular_iterator.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/iterators/circular_iterator.cpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -19,80 +19,86 @@
 #include <boost/geometry/extensions/gis/io/wkt/read_wkt.hpp>
 #include <boost/geometry/geometries/cartesian2d.hpp>
 
-template <typename G>
-void test_geometry(const std::string& wkt)
-{
-    G geo;
-    boost::geometry::read_wkt(wkt, geo);
-    typedef typename boost::range_const_iterator<G>::type normal_iterator;
-    typedef boost::geometry::circular_iterator<normal_iterator> circular_iterator;
 
-    circular_iterator end(boost::end(geo));
+template <typename Geometry, typename CircularIterator>
+void test_forward(Geometry const& geometry, CircularIterator end,
+        int offset, std::string const& expected)
+{
+    CircularIterator it(boost::begin(geometry), boost::end(geometry), 
+                boost::begin(geometry) + offset);
 
+    std::ostringstream out;
+    for (; it != end; ++it)
     {
-        // 1: normal start position
-        normal_iterator start = boost::begin(geo);
-
-        std::ostringstream out;
-        for (circular_iterator it(boost::begin(geo), boost::end(geo), start);
-             it != end; ++it)
-        {
-            out << boost::geometry::get<0>(*it);
-        }
-        BOOST_CHECK_EQUAL(out.str(), "12345");
+        out << boost::geometry::get<0>(*it);
     }
+    BOOST_CHECK_EQUAL(out.str(), expected);
+}
 
-    {
-        // 2: start somewhere in the middle
-        normal_iterator start = boost::begin(geo) + 2;
 
-        std::ostringstream out;
-        for (circular_iterator it(boost::begin(geo), boost::end(geo), start);
-             it != end; ++it)
-        {
-            out << boost::geometry::get<0>(*it);
-        }
-        BOOST_CHECK_EQUAL(out.str(), "34512");
-    }
+template <typename Geometry, typename CircularIterator>
+void test_backward(Geometry const& geometry, CircularIterator end,
+        int offset, std::string const& expected)
+{
+    CircularIterator it(boost::begin(geometry), boost::end(geometry), 
+                boost::begin(geometry) + offset);
 
+    std::ostringstream out;
+    for (; it != end; --it)
     {
-        // 3: start at end position
-        normal_iterator start = boost::begin(geo) + boost::size(geo) - 1;
-
-        std::ostringstream out;
-        for (circular_iterator it(boost::begin(geo), boost::end(geo), start);
-             it != end; ++it)
-        {
-            out << boost::geometry::get<0>(*it);
-        }
-        BOOST_CHECK_EQUAL(out.str(), "51234");
+        out << boost::geometry::get<0>(*it);
     }
+    BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
 
-    {
-        // 4: check copy behaviour
-        G copy;
 
-        {
-            normal_iterator start = boost::begin(geo) + 2;
-            circular_iterator it(boost::begin(geo), boost::end(geo), start);
-            std::copy<circular_iterator>(it, end, std::back_inserter(copy));
-        }
-
-        std::ostringstream out;
-        for (normal_iterator cit = boost::begin(copy); cit != boost::end(copy); ++cit)
-        {
-            out << boost::geometry::get<0>(*cit);
-        }
-        BOOST_CHECK_EQUAL(out.str(), "34512");
+template <typename G>
+void test_geometry(std::string const& wkt)
+{
+    G geo;
+    boost::geometry::read_wkt(wkt, geo);
+    typedef typename boost::range_const_iterator<G>::type normal_iterator;
+    typedef boost::geometry::circular_iterator<normal_iterator> circular_iterator;
+
+    circular_iterator end(boost::end(geo));
+
+    // 2: start somewhere in the middle (first == test before)
+    test_forward(geo, end, 0, "12345");
+    test_forward(geo, end, 1, "23451");
+    test_forward(geo, end, 2, "34512");
+    test_forward(geo, end, 3, "45123");
+    test_forward(geo, end, 4, "51234");
+
+    test_backward(geo, end, 0, "15432");
+    test_backward(geo, end, 1, "21543");
+    test_backward(geo, end, 2, "32154");
+    test_backward(geo, end, 3, "43215");
+    test_backward(geo, end, 4, "54321");
+
+    // 4: check copy behaviour
+    G copy;
+
+    normal_iterator start = boost::begin(geo) + 2;
+    circular_iterator it(boost::begin(geo), boost::end(geo), start);
+    std::copy<circular_iterator>(it, end, std::back_inserter(copy));
+
+    std::ostringstream out;
+    for (normal_iterator cit = boost::begin(copy); cit != boost::end(copy); ++cit)
+    {
+        out << boost::geometry::get<0>(*cit);
     }
+    BOOST_CHECK_EQUAL(out.str(), "34512");
 }
 
+
 template <typename P>
 void test_all()
 {
     test_geometry<boost::geometry::linestring<P> >("linestring(1 1,2 2,3 3,4 4,5 5)");
 }
 
+
 int test_main(int, char* [])
 {
     test_all<boost::geometry::point_2d>();
Modified: sandbox/geometry/libs/geometry/test/iterators/circular_iterator.vcproj
==============================================================================
--- sandbox/geometry/libs/geometry/test/iterators/circular_iterator.vcproj	(original)
+++ sandbox/geometry/libs/geometry/test/iterators/circular_iterator.vcproj	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -69,6 +69,7 @@
                         />
                         <Tool
                                 Name="VCManifestTool"
+				EmbedManifest="false"
                         />
                         <Tool
                                 Name="VCXDCMakeTool"
@@ -142,6 +143,7 @@
                         />
                         <Tool
                                 Name="VCManifestTool"
+				EmbedManifest="false"
                         />
                         <Tool
                                 Name="VCXDCMakeTool"
Modified: sandbox/geometry/libs/geometry/test/iterators/ever_circling_iterator.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/iterators/ever_circling_iterator.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/iterators/ever_circling_iterator.cpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -18,7 +18,7 @@
 #include <boost/geometry/geometries/cartesian2d.hpp>
 
 template <typename G>
-void test_geometry(const std::string& wkt)
+void test_geometry(std::string const& wkt)
 {
     G geo;
     boost::geometry::read_wkt(wkt, geo);
Modified: sandbox/geometry/libs/geometry/test/iterators/ever_circling_iterator.vcproj
==============================================================================
--- sandbox/geometry/libs/geometry/test/iterators/ever_circling_iterator.vcproj	(original)
+++ sandbox/geometry/libs/geometry/test/iterators/ever_circling_iterator.vcproj	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -69,6 +69,7 @@
                         />
                         <Tool
                                 Name="VCManifestTool"
+				EmbedManifest="false"
                         />
                         <Tool
                                 Name="VCXDCMakeTool"
@@ -142,6 +143,7 @@
                         />
                         <Tool
                                 Name="VCManifestTool"
+				EmbedManifest="false"
                         />
                         <Tool
                                 Name="VCXDCMakeTool"
Modified: sandbox/geometry/libs/geometry/test/iterators/segment_iterator.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/iterators/segment_iterator.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/iterators/segment_iterator.cpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -23,7 +23,7 @@
 #include <boost/geometry/extensions/gis/io/wkt/read_wkt.hpp>
 
 template <typename C>
-void test_linestring(const std::string& wkt, const std::string& expected)
+void test_linestring(std::string const& wkt, std::string const& expected)
 {
     typedef C point_list;
     typedef typename C::value_type point;
Modified: sandbox/geometry/libs/geometry/test/iterators/segment_iterator.vcproj
==============================================================================
--- sandbox/geometry/libs/geometry/test/iterators/segment_iterator.vcproj	(original)
+++ sandbox/geometry/libs/geometry/test/iterators/segment_iterator.vcproj	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -68,6 +68,7 @@
                         />
                         <Tool
                                 Name="VCManifestTool"
+				EmbedManifest="false"
                         />
                         <Tool
                                 Name="VCXDCMakeTool"
@@ -140,6 +141,7 @@
                         />
                         <Tool
                                 Name="VCManifestTool"
+				EmbedManifest="false"
                         />
                         <Tool
                                 Name="VCXDCMakeTool"
Modified: sandbox/geometry/libs/geometry/test/multi/algorithms/multi_distance.cpp
==============================================================================
--- sandbox/geometry/libs/geometry/test/multi/algorithms/multi_distance.cpp	(original)
+++ sandbox/geometry/libs/geometry/test/multi/algorithms/multi_distance.cpp	2010-05-02 17:38:12 EDT (Sun, 02 May 2010)
@@ -29,7 +29,7 @@
 
 
 template <typename Geometry1, typename Geometry2>
-void test_distance(const std::string& wkt1, const std::string& wkt2, double expected)
+void test_distance(std::string const& wkt1, std::string const& wkt2, double expected)
 {
     Geometry1 g1;
     Geometry2 g2;
@@ -41,8 +41,8 @@
 }
 
 template <typename Geometry1, typename Geometry2, typename Strategy>
-void test_distance(const Strategy& strategy, const std::string& wkt1,
-                   const std::string& wkt2, double expected)
+void test_distance(Strategy const& strategy, std::string const& wkt1,
+                   std::string const& wkt2, double expected)
 {
     Geometry1 g1;
     Geometry2 g2;