$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: troy_at_[hidden]
Date: 2008-06-29 11:39:21
Author: troy
Date: 2008-06-29 11:39:20 EDT (Sun, 29 Jun 2008)
New Revision: 46855
URL: http://svn.boost.org/trac/boost/changeset/46855
Log:
merge from release branch
Added:
   branches/CMake/release/libs/foreach/test/array_byref_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/array_byref_r.cpp
   branches/CMake/release/libs/foreach/test/array_byval_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/array_byval_r.cpp
   branches/CMake/release/libs/foreach/test/cstr_byref_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/cstr_byref_r.cpp
   branches/CMake/release/libs/foreach/test/cstr_byval_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/cstr_byval_r.cpp
   branches/CMake/release/libs/foreach/test/misc.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/misc.cpp
   branches/CMake/release/libs/foreach/test/pair_byref_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/pair_byref_r.cpp
   branches/CMake/release/libs/foreach/test/pair_byval_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/pair_byval_r.cpp
   branches/CMake/release/libs/foreach/test/rvalue_const_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/rvalue_const_r.cpp
   branches/CMake/release/libs/foreach/test/rvalue_nonconst_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/rvalue_nonconst_r.cpp
   branches/CMake/release/libs/foreach/test/stl_byref_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/stl_byref_r.cpp
   branches/CMake/release/libs/foreach/test/stl_byval_r.cpp
      - copied unchanged from r46809, /branches/release/libs/foreach/test/stl_byval_r.cpp
Text files modified: 
   branches/CMake/release/libs/foreach/doc/foreach.qbk       |    11 ++++++                                  
   branches/CMake/release/libs/foreach/test/CMakeLists.txt   |    13 +++++++                                 
   branches/CMake/release/libs/foreach/test/Jamfile.v2       |    11 ++++++                                  
   branches/CMake/release/libs/foreach/test/rvalue_const.cpp |     3 +                                       
   branches/CMake/release/libs/foreach/test/utility.hpp      |    64 ++++++++++++++++++++++++++++++++++++++++
   5 files changed, 100 insertions(+), 2 deletions(-)
Modified: branches/CMake/release/libs/foreach/doc/foreach.qbk
==============================================================================
--- branches/CMake/release/libs/foreach/doc/foreach.qbk	(original)
+++ branches/CMake/release/libs/foreach/doc/foreach.qbk	2008-06-29 11:39:20 EDT (Sun, 29 Jun 2008)
@@ -162,6 +162,14 @@
         // Note: get_vector_float() will be called exactly once
     }    
 
+Iterate in reverse:
+
+    std::list<int> list_int( /*...*/ );
+    BOOST_REVERSE_FOREACH( int i, list_int )
+    {
+        // do something with i
+    }
+
 Iterating over rvalues doesn't work on some older compilers. Check the 
 [link foreach.portability Portability] section to see whether your
 compiler supports this.
@@ -174,7 +182,8 @@
 doesn't mean you're stuck with it, though. If you would like to use a different
 identifier (`foreach`, perhaps), you can simply do:
 
-    #define foreach BOOST_FOREACH
+    #define foreach         BOOST_FOREACH
+    #define reverse_foreach BOOST_REVERSE_FOREACH
 
 Only do this if you are sure that the identifier you choose will not cause
 name conflicts in your code.
Modified: branches/CMake/release/libs/foreach/test/CMakeLists.txt
==============================================================================
--- branches/CMake/release/libs/foreach/test/CMakeLists.txt	(original)
+++ branches/CMake/release/libs/foreach/test/CMakeLists.txt	2008-06-29 11:39:20 EDT (Sun, 29 Jun 2008)
@@ -1,17 +1,28 @@
 set(TESTS 
 stl_byval
+stl_byval_r
 stl_byref
+stl_byref_r
 array_byval
+array_byval_r
 array_byref
+array_byref_r
 cstr_byval
+cstr_byval_r
 cstr_byref
+cstr_byref_r
 pair_byval
+pair_byval_r
 pair_byref
+pair_byref_r
 user_defined
 call_once
 rvalue_const
+rvalue_const_r
 rvalue_nonconst
-dependent_type)
+rvalue_nonconst_r
+dependent_type
+misc)
 
 foreach(test ${TESTS})
   boost_test_run(${test})
Modified: branches/CMake/release/libs/foreach/test/Jamfile.v2
==============================================================================
--- branches/CMake/release/libs/foreach/test/Jamfile.v2	(original)
+++ branches/CMake/release/libs/foreach/test/Jamfile.v2	2008-06-29 11:39:20 EDT (Sun, 29 Jun 2008)
@@ -8,16 +8,27 @@
 test-suite "foreach"
     : [ run stl_byval.cpp ]
       [ run stl_byref.cpp ]
+      [ run stl_byval_r.cpp ]
+      [ run stl_byref_r.cpp ]
       [ run array_byval.cpp ]
       [ run array_byref.cpp ]
+      [ run array_byval_r.cpp ]
+      [ run array_byref_r.cpp ]
       [ run cstr_byval.cpp ]
       [ run cstr_byref.cpp ]
+      [ run cstr_byval_r.cpp ]
+      [ run cstr_byref_r.cpp ]
       [ run pair_byval.cpp ]
       [ run pair_byref.cpp ]
+      [ run pair_byval_r.cpp ]
+      [ run pair_byref_r.cpp ]
       [ run user_defined.cpp ]
       [ run call_once.cpp ]
       [ run rvalue_const.cpp ]
       [ run rvalue_nonconst.cpp ]
+      [ run rvalue_const_r.cpp ]
+      [ run rvalue_nonconst_r.cpp ]
       [ run dependent_type.cpp ]
+      [ run misc.cpp ]
       [ compile noncopyable.cpp ]
     ;
Modified: branches/CMake/release/libs/foreach/test/rvalue_const.cpp
==============================================================================
--- branches/CMake/release/libs/foreach/test/rvalue_const.cpp	(original)
+++ branches/CMake/release/libs/foreach/test/rvalue_const.cpp	2008-06-29 11:39:20 EDT (Sun, 29 Jun 2008)
@@ -13,7 +13,10 @@
 #include <boost/foreach.hpp>
 
 #ifdef BOOST_FOREACH_NO_CONST_RVALUE_DETECTION
+// ignore error during Microsoft Code Analysis
+#if !defined(_PREFAST_)
 # error Expected failure : const rvalues disallowed
+#endif
 #else
 
 std::vector<int> const get_vector()
Modified: branches/CMake/release/libs/foreach/test/utility.hpp
==============================================================================
--- branches/CMake/release/libs/foreach/test/utility.hpp	(original)
+++ branches/CMake/release/libs/foreach/test/utility.hpp	2008-06-29 11:39:20 EDT (Sun, 29 Jun 2008)
@@ -76,4 +76,68 @@
     }
 }
 
+
+///////////////////////////////////////////////////////////////////////////////
+// sequence_equal_byval_n_r
+inline bool sequence_equal_byval_n_r( foreach_container_type & rng, char const * result )
+{
+    BOOST_REVERSE_FOREACH( foreach_value_type i, rng )
+    {
+        if(0 == *result || i != *result)
+            return false;
+        ++result;
+    }
+    return 0 == *result;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// sequence_equal_byval_c_r
+inline bool sequence_equal_byval_c_r( foreach_const_container_type & rng, char const * result )
+{
+    BOOST_REVERSE_FOREACH( foreach_value_type i, rng )
+    {
+        if(0 == *result || i != *result)
+            return false;
+        ++result;
+    }
+    return 0 == *result;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// sequence_equal_byref_n_r
+inline bool sequence_equal_byref_n_r( foreach_container_type & rng, char const * result )
+{
+    BOOST_REVERSE_FOREACH( foreach_reference_type i, rng )
+    {
+        if(0 == *result || i != *result)
+            return false;
+        ++result;
+    }
+    return 0 == *result;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// sequence_equal_byref_c_r
+inline bool sequence_equal_byref_c_r( foreach_const_container_type & rng, char const * result )
+{
+    BOOST_REVERSE_FOREACH( foreach_const_reference_type i, rng )
+    {
+        if(0 == *result || i != *result)
+            return false;
+        ++result;
+    }
+    return 0 == *result;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// mutate_foreach_byref
+//
+inline void mutate_foreach_byref_r( foreach_container_type & rng )
+{
+    BOOST_REVERSE_FOREACH( foreach_reference_type i, rng )
+    {
+        ++i;
+    }
+}
+
 #endif