Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r83347 - in branches/release: boost/algorithm boost/algorithm/cxx11 boost/algorithm/searching boost/algorithm/searching/detail boost/algorithm/string boost/algorithm/string/detail libs/algorithm/doc libs/algorithm/test libs/algorithm/test/search_test_data
From: marshall_at_[hidden]
Date: 2013-03-07 10:37:09


Author: marshall
Date: 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
New Revision: 83347
URL: http://svn.boost.org/trac/boost/changeset/83347

Log:
Merge Algorithm changes to release; hex code cleanups; gather iterator requirements; copy_while and copy_until interface changes
Properties modified:
   branches/release/boost/algorithm/ (props changed)
   branches/release/boost/algorithm/clamp.hpp (props changed)
   branches/release/boost/algorithm/cxx11/all_of.hpp (props changed)
   branches/release/boost/algorithm/cxx11/any_of.hpp (props changed)
   branches/release/boost/algorithm/cxx11/copy_if.hpp (contents, props changed)
   branches/release/boost/algorithm/cxx11/copy_n.hpp (props changed)
   branches/release/boost/algorithm/cxx11/find_if_not.hpp (props changed)
   branches/release/boost/algorithm/cxx11/iota.hpp (props changed)
   branches/release/boost/algorithm/cxx11/is_partitioned.hpp (props changed)
   branches/release/boost/algorithm/cxx11/is_permutation.hpp (props changed)
   branches/release/boost/algorithm/cxx11/is_sorted.hpp (props changed)
   branches/release/boost/algorithm/cxx11/none_of.hpp (props changed)
   branches/release/boost/algorithm/cxx11/one_of.hpp (props changed)
   branches/release/boost/algorithm/cxx11/partition_copy.hpp (props changed)
   branches/release/boost/algorithm/cxx11/partition_point.hpp (props changed)
   branches/release/boost/algorithm/hex.hpp (contents, props changed)
   branches/release/boost/algorithm/minmax_element.hpp (props changed)
   branches/release/boost/algorithm/searching/ (props changed)
   branches/release/boost/algorithm/searching/boyer_moore.hpp (props changed)
   branches/release/boost/algorithm/searching/boyer_moore_horspool.hpp (props changed)
   branches/release/boost/algorithm/searching/detail/bm_traits.hpp (props changed)
   branches/release/boost/algorithm/searching/detail/debugging.hpp (props changed)
   branches/release/boost/algorithm/searching/knuth_morris_pratt.hpp (props changed)
   branches/release/boost/algorithm/string/ (props changed)
   branches/release/boost/algorithm/string/detail/case_conv.hpp (props changed)
   branches/release/boost/algorithm/string/detail/classification.hpp (props changed)
   branches/release/boost/algorithm/string/find.hpp (props changed)
   branches/release/libs/algorithm/doc/ (props changed)
   branches/release/libs/algorithm/doc/Jamfile.v2 (props changed)
   branches/release/libs/algorithm/doc/algorithm.qbk (props changed)
   branches/release/libs/algorithm/doc/all_of.qbk (props changed)
   branches/release/libs/algorithm/doc/any_of.qbk (props changed)
   branches/release/libs/algorithm/doc/boyer_moore.qbk (props changed)
   branches/release/libs/algorithm/doc/boyer_moore_horspool.qbk (props changed)
   branches/release/libs/algorithm/doc/clamp-hpp.qbk (props changed)
   branches/release/libs/algorithm/doc/hex.qbk (props changed)
   branches/release/libs/algorithm/doc/is_partitioned.qbk (props changed)
   branches/release/libs/algorithm/doc/knuth_morris_pratt.qbk (props changed)
   branches/release/libs/algorithm/doc/none_of.qbk (props changed)
   branches/release/libs/algorithm/doc/one_of.qbk (props changed)
   branches/release/libs/algorithm/doc/ordered-hpp.qbk (props changed)
   branches/release/libs/algorithm/doc/partition_point.qbk (props changed)
   branches/release/libs/algorithm/test/ (props changed)
   branches/release/libs/algorithm/test/Jamfile.v2 (props changed)
   branches/release/libs/algorithm/test/all_of_test.cpp (props changed)
   branches/release/libs/algorithm/test/any_of_test.cpp (props changed)
   branches/release/libs/algorithm/test/clamp_test.cpp (props changed)
   branches/release/libs/algorithm/test/copy_if_test1.cpp (contents, props changed)
   branches/release/libs/algorithm/test/copy_n_test1.cpp (props changed)
   branches/release/libs/algorithm/test/empty_search_test.cpp (props changed)
   branches/release/libs/algorithm/test/find_if_not_test1.cpp (props changed)
   branches/release/libs/algorithm/test/hex_fail1.cpp (props changed)
   branches/release/libs/algorithm/test/hex_test1.cpp (props changed)
   branches/release/libs/algorithm/test/hex_test2.cpp (props changed)
   branches/release/libs/algorithm/test/hex_test3.cpp (props changed)
   branches/release/libs/algorithm/test/hex_test4.cpp (props changed)
   branches/release/libs/algorithm/test/iota_test1.cpp (props changed)
   branches/release/libs/algorithm/test/is_partitioned_test1.cpp (props changed)
   branches/release/libs/algorithm/test/is_permutation_test1.cpp (props changed)
   branches/release/libs/algorithm/test/none_of_test.cpp (props changed)
   branches/release/libs/algorithm/test/one_of_test.cpp (props changed)
   branches/release/libs/algorithm/test/ordered_test.cpp (props changed)
   branches/release/libs/algorithm/test/partition_copy_test1.cpp (props changed)
   branches/release/libs/algorithm/test/partition_point_test1.cpp (props changed)
   branches/release/libs/algorithm/test/search_fail1.cpp (props changed)
   branches/release/libs/algorithm/test/search_fail2.cpp (props changed)
   branches/release/libs/algorithm/test/search_fail3.cpp (props changed)
   branches/release/libs/algorithm/test/search_test1.cpp (props changed)
   branches/release/libs/algorithm/test/search_test2.cpp (contents, props changed)
   branches/release/libs/algorithm/test/search_test3.cpp (contents, props changed)
   branches/release/libs/algorithm/test/search_test_data/0001.corpus (props changed)
   branches/release/libs/algorithm/test/search_test_data/0001b.pat (props changed)
   branches/release/libs/algorithm/test/search_test_data/0001e.pat (props changed)
   branches/release/libs/algorithm/test/search_test_data/0001f.pat (props changed)
   branches/release/libs/algorithm/test/search_test_data/0001n.pat (props changed)
   branches/release/libs/algorithm/test/search_test_data/0002b.pat (props changed)
   branches/release/libs/algorithm/test/search_test_data/0002e.pat (props changed)
   branches/release/libs/algorithm/test/search_test_data/0002f.pat (props changed)
   branches/release/libs/algorithm/test/search_test_data/0002n.pat (props changed)
Text files modified:
   branches/release/boost/algorithm/cxx11/copy_if.hpp | 21 ++++---
   branches/release/boost/algorithm/gather.hpp | 19 +++---
   branches/release/boost/algorithm/hex.hpp | 32 ++++-------
   branches/release/libs/algorithm/doc/gather.qbk | 18 +++---
   branches/release/libs/algorithm/test/copy_if_test1.cpp | 101 ++++++++++++++++++++++++++++++++++++++-
   branches/release/libs/algorithm/test/gather_test1.cpp | 4 -
   branches/release/libs/algorithm/test/search_test2.cpp | 1
   branches/release/libs/algorithm/test/search_test3.cpp | 1
   8 files changed, 142 insertions(+), 55 deletions(-)

Modified: branches/release/boost/algorithm/cxx11/copy_if.hpp
==============================================================================
--- branches/release/boost/algorithm/cxx11/copy_if.hpp (original)
+++ branches/release/boost/algorithm/cxx11/copy_if.hpp 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -63,7 +63,7 @@
 /// \fn copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
 /// \brief Copies all the elements at the start of the input range that
 /// satisfy the predicate to the output range.
-/// \return The updated output iterator
+/// \return The updated input and output iterators
 ///
 /// \param first The start of the input sequence
 /// \param last One past the end of the input sequence
@@ -71,25 +71,26 @@
 /// \param p A predicate for testing the elements of the range
 ///
 template<typename InputIterator, typename OutputIterator, typename Predicate>
-OutputIterator copy_while ( InputIterator first, InputIterator last,
- OutputIterator result, Predicate p )
+std::pair<InputIterator, OutputIterator>
+copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
 {
     for ( ; first != last && p(*first); ++first )
         *result++ = *first;
- return result;
+ return std::make_pair(first, result);
 }
 
 /// \fn copy_while ( const Range &r, OutputIterator result, Predicate p )
 /// \brief Copies all the elements at the start of the input range that
 /// satisfy the predicate to the output range.
-/// \return The updated output iterator
+/// \return The updated input and output iterators
 ///
 /// \param r The input range
 /// \param result An output iterator to write the results into
 /// \param p A predicate for testing the elements of the range
 ///
 template<typename Range, typename OutputIterator, typename Predicate>
-OutputIterator copy_while ( const Range &r, OutputIterator result, Predicate p )
+std::pair<typename boost::range_iterator<const Range>::type, OutputIterator>
+copy_while ( const Range &r, OutputIterator result, Predicate p )
 {
     return boost::algorithm::copy_while (boost::begin (r), boost::end(r), result, p);
 }
@@ -106,11 +107,12 @@
 /// \param p A predicate for testing the elements of the range
 ///
 template<typename InputIterator, typename OutputIterator, typename Predicate>
-OutputIterator copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
+std::pair<InputIterator, OutputIterator>
+copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
 {
     for ( ; first != last && !p(*first); ++first )
         *result++ = *first;
- return result;
+ return std::make_pair(first, result);
 }
 
 /// \fn copy_until ( const Range &r, OutputIterator result, Predicate p )
@@ -123,7 +125,8 @@
 /// \param p A predicate for testing the elements of the range
 ///
 template<typename Range, typename OutputIterator, typename Predicate>
-OutputIterator copy_until ( const Range &r, OutputIterator result, Predicate p )
+std::pair<typename boost::range_iterator<const Range>::type, OutputIterator>
+copy_until ( const Range &r, OutputIterator result, Predicate p )
 {
     return boost::algorithm::copy_until (boost::begin (r), boost::end(r), result, p);
 }

Modified: branches/release/boost/algorithm/gather.hpp
==============================================================================
--- branches/release/boost/algorithm/gather.hpp (original)
+++ branches/release/boost/algorithm/gather.hpp 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -18,7 +18,7 @@
 */
 
 #ifndef BOOST_ALGORITHM_GATHER_HPP
-#define ADOBE_ALGORITHM_GATHER_HPP
+#define BOOST_ALGORITHM_GATHER_HPP
 
 #include <algorithm> // for std::stable_partition
 #include <functional>
@@ -80,9 +80,10 @@
 */
 
 template <
- typename ForwardIterator, // Iter models ForwardIterator
- typename Pred> // Pred models UnaryPredicate
-std::pair<ForwardIterator,ForwardIterator> gather ( ForwardIterator first, ForwardIterator last, ForwardIterator pivot, Pred pred )
+ typename BidirectionalIterator, // Iter models BidirectionalIterator
+ typename Pred> // Pred models UnaryPredicate
+std::pair<BidirectionalIterator, BidirectionalIterator> gather
+ ( BidirectionalIterator first, BidirectionalIterator last, BidirectionalIterator pivot, Pred pred )
 {
 // The first call partitions everything up to (but not including) the pivot element,
 // while the second call partitions the rest of the sequence.
@@ -99,14 +100,14 @@
 */
 
 template <
- typename ForwardRange, //
+ typename BidirectionalRange, //
     typename Pred> // Pred models UnaryPredicate
 std::pair<
- typename boost::range_iterator<ForwardRange>::type,
- typename boost::range_iterator<ForwardRange>::type>
+ typename boost::range_iterator<const BidirectionalRange>::type,
+ typename boost::range_iterator<const BidirectionalRange>::type>
 gather (
- ForwardRange &range,
- typename boost::range_iterator<ForwardRange>::type pivot,
+ const BidirectionalRange &range,
+ typename boost::range_iterator<const BidirectionalRange>::type pivot,
     Pred pred )
 {
     return boost::algorithm::gather ( boost::begin ( range ), boost::end ( range ), pivot, pred );

Modified: branches/release/boost/algorithm/hex.hpp
==============================================================================
--- branches/release/boost/algorithm/hex.hpp (original)
+++ branches/release/boost/algorithm/hex.hpp 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -10,12 +10,6 @@
 /*
     General problem - turn a sequence of integral types into a sequence of hexadecimal characters.
     - and back.
-
-TO DO:
- 1. these should really only work on integral types. (see the >> and << operations)
- -- this is done, I think.
- 2. The 'value_type_or_char' struct is really a hack.
- -- but it's a better hack now that it works with back_insert_iterators
 */
 
 /// \file hex.hpp
@@ -42,11 +36,11 @@
 /*!
     \struct hex_decode_error
     \brief Base exception class for all hex decoding errors
-
+*/ /*!
     \struct non_hex_input
     \brief Thrown when a non-hex value (0-9, A-F) encountered when decoding.
                 Contains the offending character
-
+*/ /*!
     \struct not_enough_input
     \brief Thrown when the input sequence unexpectedly ends
     
@@ -69,18 +63,16 @@
         return std::copy ( res, res + num_hex_digits, out );
         }
 
-// this needs to be in an un-named namespace because it is not a template
-// and might get included in several compilation units. This could cause
-// multiple definition errors at link time.
- namespace {
- unsigned hex_char_to_int ( char c ) {
- if ( c >= '0' && c <= '9' ) return c - '0';
- if ( c >= 'A' && c <= 'F' ) return c - 'A' + 10;
- if ( c >= 'a' && c <= 'f' ) return c - 'a' + 10;
- BOOST_THROW_EXCEPTION (non_hex_input() << bad_char (c));
- return 0; // keep dumb compilers happy
+ template <typename T>
+ unsigned char hex_char_to_int ( T val ) {
+ char c = static_cast<char> ( val );
+ unsigned retval = 0;
+ if ( c >= '0' && c <= '9' ) retval = c - '0';
+ else if ( c >= 'A' && c <= 'F' ) retval = c - 'A' + 10;
+ else if ( c >= 'a' && c <= 'f' ) retval = c - 'a' + 10;
+ else BOOST_THROW_EXCEPTION (non_hex_input() << bad_char (c));
+ return retval;
         }
- }
 
 // My own iterator_traits class.
 // It is here so that I can "reach inside" some kinds of output iterators
@@ -134,7 +126,7 @@
         for ( std::size_t i = 0; i < 2 * sizeof ( T ); ++i, ++first ) {
             if ( pred ( first, last ))
                 BOOST_THROW_EXCEPTION (not_enough_input ());
- res = ( 16 * res ) + hex_char_to_int (static_cast<char> (*first));
+ res = ( 16 * res ) + hex_char_to_int (*first);
             }
         
         *out = res;

Modified: branches/release/libs/algorithm/doc/gather.qbk
==============================================================================
--- branches/release/libs/algorithm/doc/gather.qbk (original)
+++ branches/release/libs/algorithm/doc/gather.qbk 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -22,13 +22,13 @@
 ``
 namespace boost { namespace algorithm {
 
-template <typename ForwardIterator, typename Pred>
-std::pair<ForwardIterator,ForwardIterator>
-gather ( ForwardIterator first, ForwardIterator last, ForwardIterator pivot, Pred pred );
-
-template <typename ForwardRange, typename Pred>
-std::pair<typename boost::range_iterator<ForwardRange>::type, typename boost::range_iterator<ForwardRange>::type>
-gather ( ForwardRange &range, typename boost::range_iterator<ForwardRange>::type pivot, Pred pred );
+template <typename BidirectionalIterator, typename Pred>
+std::pair<BidirectionalIterator,BidirectionalIterator>
+gather ( BidirectionalIterator first, BidirectionalIterator last, BidirectionalIterator pivot, Pred pred );
+
+template <typename BidirectionalRange, typename Pred>
+std::pair<typename boost::range_iterator<const BidirectionalRange>::type, typename boost::range_iterator<const BidirectionalRange>::type>
+gather ( const BidirectionalRange &range, typename boost::range_iterator<const BidirectionalRange>::type pivot, Pred pred );
 
 }}
 ``
@@ -53,11 +53,11 @@
 
 [heading Iterator Requirements]
 
-`gather` work on all iterators except input or output iterators.
+`gather` work on bidirectional iterators or better. This requirement comes from the usage of `stable_partition`, which requires bidirectional iterators. Some standard libraries (libstdc++ and libc++, for example) have implementations of `stable_partition` that work with forward iterators. If that is the case, then `gather` will work with forward iterators as well.
 
 [heading Storage Requirements]
 
-`gather` uses stable_partition, which will attempt to allocate temporary memory, but will work in-situ if there is none available.
+`gather` uses `stable_partition`, which will attempt to allocate temporary memory, but will work in-situ if there is none available.
 
 [heading Complexity]
 

Modified: branches/release/libs/algorithm/test/copy_if_test1.cpp
==============================================================================
--- branches/release/libs/algorithm/test/copy_if_test1.cpp (original)
+++ branches/release/libs/algorithm/test/copy_if_test1.cpp 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -20,6 +20,7 @@
 #include <list>
 
 #include <boost/algorithm/cxx11/all_of.hpp>
+#include <boost/algorithm/cxx11/none_of.hpp>
 
 namespace ba = boost::algorithm;
 // namespace ba = boost;
@@ -30,7 +31,7 @@
 bool is_odd ( int v ) { return v % 2 == 1; }
 
 template <typename Container>
-void test_sequence ( Container const &c ) {
+void test_copy_if ( Container const &c ) {
 
     typedef typename Container::value_type value_type;
     std::vector<value_type> v;
@@ -48,13 +49,13 @@
     v.clear ();
     ba::copy_if ( c.begin (), c.end (), back_inserter ( v ), is_true);
     BOOST_CHECK ( v.size () == c.size ());
- BOOST_CHECK ( std::equal ( c.begin (), c.end (), v.begin ()));
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
 
     v.clear ();
     ba::copy_if ( c, back_inserter ( v ), is_true);
     BOOST_CHECK ( v.size () == c.size ());
     BOOST_CHECK ( v.size () == c.size ());
- BOOST_CHECK ( std::equal ( c.begin (), c.end (), v.begin ()));
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
 
 // Some of the elements
     v.clear ();
@@ -69,16 +70,106 @@
     }
 
 
+template <typename Container>
+void test_copy_while ( Container const &c ) {
+
+ typedef typename Container::value_type value_type;
+ typename Container::const_iterator it;
+ std::vector<value_type> v;
+
+// None of the elements
+ v.clear ();
+ ba::copy_while ( c.begin (), c.end (), back_inserter ( v ), is_false);
+ BOOST_CHECK ( v.size () == 0 );
+
+ v.clear ();
+ ba::copy_while ( c, back_inserter ( v ), is_false);
+ BOOST_CHECK ( v.size () == 0 );
+
+// All the elements
+ v.clear ();
+ ba::copy_while ( c.begin (), c.end (), back_inserter ( v ), is_true);
+ BOOST_CHECK ( v.size () == c.size ());
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+ v.clear ();
+ ba::copy_while ( c, back_inserter ( v ), is_true);
+ BOOST_CHECK ( v.size () == c.size ());
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+// Some of the elements
+ v.clear ();
+ it = ba::copy_while ( c.begin (), c.end (), back_inserter ( v ), is_even ).first;
+ BOOST_CHECK ( v.size () == (size_t) std::distance ( c.begin (), it ));
+ BOOST_CHECK ( it == c.end () || !is_even ( *it ));
+ BOOST_CHECK ( ba::all_of ( v.begin (), v.end (), is_even ));
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+ v.clear ();
+ it = ba::copy_while ( c, back_inserter ( v ), is_even ).first;
+ BOOST_CHECK ( v.size () == (size_t) std::distance ( c.begin (), it ));
+ BOOST_CHECK ( it == c.end () || !is_even ( *it ));
+ BOOST_CHECK ( ba::all_of ( v.begin (), v.end (), is_even ));
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+ }
+
+template <typename Container>
+void test_copy_until ( Container const &c ) {
+
+ typedef typename Container::value_type value_type;
+ typename Container::const_iterator it;
+ std::vector<value_type> v;
+
+// None of the elements
+ v.clear ();
+ ba::copy_until ( c.begin (), c.end (), back_inserter ( v ), is_true);
+ BOOST_CHECK ( v.size () == 0 );
+
+ v.clear ();
+ ba::copy_until ( c, back_inserter ( v ), is_true);
+ BOOST_CHECK ( v.size () == 0 );
+
+// All the elements
+ v.clear ();
+ ba::copy_until ( c.begin (), c.end (), back_inserter ( v ), is_false);
+ BOOST_CHECK ( v.size () == c.size ());
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+ v.clear ();
+ ba::copy_until ( c, back_inserter ( v ), is_false);
+ BOOST_CHECK ( v.size () == c.size ());
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+// Some of the elements
+ v.clear ();
+ it = ba::copy_until ( c.begin (), c.end (), back_inserter ( v ), is_even ).first;
+ BOOST_CHECK ( v.size () == (size_t) std::distance ( c.begin (), it ));
+ BOOST_CHECK ( it == c.end () || is_even ( *it ));
+ BOOST_CHECK ( ba::none_of ( v.begin (), v.end (), is_even ));
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+ v.clear ();
+ it = ba::copy_until ( c, back_inserter ( v ), is_even ).first;
+ BOOST_CHECK ( v.size () == (size_t) std::distance ( c.begin (), it ));
+ BOOST_CHECK ( it == c.end () || is_even ( *it ));
+ BOOST_CHECK ( ba::none_of ( v.begin (), v.end (), is_even ));
+ BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+ }
+
 void test_sequence1 () {
     std::vector<int> v;
     for ( int i = 5; i < 15; ++i )
         v.push_back ( i );
- test_sequence ( v );
+ test_copy_if ( v );
+ test_copy_while ( v );
+ test_copy_until ( v );
     
     std::list<int> l;
     for ( int i = 25; i > 15; --i )
         l.push_back ( i );
- test_sequence ( l );
+ test_copy_if ( l );
+ test_copy_while ( l );
+ test_copy_until ( l );
     }
 
 

Modified: branches/release/libs/algorithm/test/gather_test1.cpp
==============================================================================
--- branches/release/libs/algorithm/test/gather_test1.cpp (original)
+++ branches/release/libs/algorithm/test/gather_test1.cpp 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -55,14 +55,12 @@
 template <typename Container, typename Predicate>
 void test_iterator_types ( const Container &c, Predicate comp, std::size_t offset ) {
     typedef std::vector<typename Container::value_type> vec;
- typedef forward_iterator<typename vec::iterator> FI;
+
     typedef bidirectional_iterator<typename vec::iterator> BDI;
     typedef random_access_iterator<typename vec::iterator> RAI;
     
     vec v;
     v.assign ( c.begin (), c.end ());
- test_iterators ( FI ( v.begin ()), FI ( v.end ()), comp, offset );
- v.assign ( c.begin (), c.end ());
     test_iterators ( BDI ( v.begin ()), BDI ( v.end ()), comp, offset );
     v.assign ( c.begin (), c.end ());
     test_iterators ( RAI ( v.begin ()), RAI ( v.end ()), comp, offset );

Modified: branches/release/libs/algorithm/test/search_test2.cpp
==============================================================================
--- branches/release/libs/algorithm/test/search_test2.cpp (original)
+++ branches/release/libs/algorithm/test/search_test2.cpp 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -14,6 +14,7 @@
 #define BOOST_TEST_MAIN
 #include <boost/test/unit_test.hpp>
 
+#include <ctime> // for clock_t
 #include <iostream>
 #include <fstream>
 #include <iomanip>

Modified: branches/release/libs/algorithm/test/search_test3.cpp
==============================================================================
--- branches/release/libs/algorithm/test/search_test3.cpp (original)
+++ branches/release/libs/algorithm/test/search_test3.cpp 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -14,6 +14,7 @@
 #define BOOST_TEST_MAIN
 #include <boost/test/unit_test.hpp>
 
+#include <ctime> // for clock_t
 #include <iostream>
 #include <fstream>
 #include <iomanip>


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk