$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r61611 - in trunk: boost/property_tree/detail libs/property_tree/test
From: sebastian.redl_at_[hidden]
Date: 2010-04-27 06:05:04
Author: cornedbee
Date: 2010-04-27 06:05:03 EDT (Tue, 27 Apr 2010)
New Revision: 61611
URL: http://svn.boost.org/trac/boost/changeset/61611
Log:
Explicitly convert some iterators. Fixes bug 4140.
Text files modified: 
   trunk/boost/property_tree/detail/ptree_implementation.hpp |     6 +++---                                  
   trunk/libs/property_tree/test/test_property_tree.cpp      |     6 ++++++                                  
   trunk/libs/property_tree/test/test_property_tree.hpp      |    15 +++++++++++++++                         
   3 files changed, 24 insertions(+), 3 deletions(-)
Modified: trunk/boost/property_tree/detail/ptree_implementation.hpp
==============================================================================
--- trunk/boost/property_tree/detail/ptree_implementation.hpp	(original)
+++ trunk/boost/property_tree/detail/ptree_implementation.hpp	2010-04-27 06:05:03 EDT (Tue, 27 Apr 2010)
@@ -467,8 +467,8 @@
         std::pair<typename subs::by_name_index::iterator,
                   typename subs::by_name_index::iterator> r(
             subs::assoc(this).equal_range(key));
-        return std::pair<assoc_iterator, assoc_iterator>(r.first,
-                                                         r.second);
+        return std::pair<assoc_iterator, assoc_iterator>(
+          assoc_iterator(r.first), assoc_iterator(r.second));
     }
 
     template<class K, class D, class C> inline
@@ -481,7 +481,7 @@
                   typename subs::by_name_index::const_iterator> r(
             subs::assoc(this).equal_range(key));
         return std::pair<const_assoc_iterator, const_assoc_iterator>(
-            r.first, r.second);
+            const_assoc_iterator(r.first), const_assoc_iterator(r.second));
     }
 
     template<class K, class D, class C> inline
Modified: trunk/libs/property_tree/test/test_property_tree.cpp
==============================================================================
--- trunk/libs/property_tree/test/test_property_tree.cpp	(original)
+++ trunk/libs/property_tree/test/test_property_tree.cpp	2010-04-27 06:05:03 EDT (Tue, 27 Apr 2010)
@@ -9,8 +9,10 @@
 // ----------------------------------------------------------------------------
 #include "test_utils.hpp"
 #include <boost/any.hpp>
+#include <boost/range.hpp>
 #include <list>
 #include <cmath>
+#include <iostream>
 
 // If using VC, disable some warnings that trip in boost::serialization bowels
 #ifdef BOOST_MSVC
@@ -152,6 +154,7 @@
         test_front_back(pt);
         test_get_put(pt);
         test_get_child_put_child(pt);
+        test_equal_range(pt);
         test_path_separator(pt);
         test_path(pt);
         test_precision(pt);
@@ -184,6 +187,7 @@
         test_front_back(pt);
         test_get_put(pt);
         test_get_child_put_child(pt);
+        test_equal_range(pt);
         test_path_separator(pt);
         test_path(pt);
         test_precision(pt);
@@ -216,6 +220,7 @@
         test_front_back(pt);
         test_get_put(pt);
         test_get_child_put_child(pt);
+        test_equal_range(pt);
         test_path_separator(pt);
         test_path(pt);
         test_precision(pt);
@@ -248,6 +253,7 @@
         test_front_back(pt);
         test_get_put(pt);
         test_get_child_put_child(pt);
+        test_equal_range(pt);
         test_path_separator(pt);
         test_path(pt);
         test_precision(pt);
Modified: trunk/libs/property_tree/test/test_property_tree.hpp
==============================================================================
--- trunk/libs/property_tree/test/test_property_tree.hpp	(original)
+++ trunk/libs/property_tree/test/test_property_tree.hpp	2010-04-27 06:05:03 EDT (Tue, 27 Apr 2010)
@@ -914,6 +914,21 @@
 
 }
 
+void test_equal_range(PTREE *)
+{
+    PTREE pt;
+    pt.add_child(T("k1"), PTREE());
+    pt.add_child(T("k2"), PTREE());
+    pt.add_child(T("k1"), PTREE());
+    pt.add_child(T("k3"), PTREE());
+    pt.add_child(T("k1"), PTREE());
+    pt.add_child(T("k2"), PTREE());
+
+    BOOST_CHECK(boost::distance(pt.equal_range(T("k1"))) == 3);
+    BOOST_CHECK(boost::distance(pt.equal_range(T("k2"))) == 2);
+    BOOST_CHECK(boost::distance(pt.equal_range(T("k3"))) == 1);
+}
+
 void test_path_separator(PTREE *)
 {