Boost logo

Boost-Commit :

From: droba_at_[hidden]
Date: 2008-06-19 08:07:26


Author: pavol_droba
Date: 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
New Revision: 46505
URL: http://svn.boost.org/trac/boost/changeset/46505

Log:
Cummulative merge of updates from the main trunk

Text files modified:
   branches/release/boost/algorithm/string.hpp | 1
   branches/release/boost/algorithm/string/classification.hpp | 4
   branches/release/boost/algorithm/string/concept.hpp | 4
   branches/release/boost/algorithm/string/detail/case_conv.hpp | 23 +++++--
   branches/release/boost/algorithm/string/detail/classification.hpp | 128 +++++++++++++++++++++++++++++++++++++--
   branches/release/boost/algorithm/string/detail/find_format.hpp | 14 ++--
   branches/release/boost/algorithm/string/detail/find_format_all.hpp | 30 ++++----
   branches/release/boost/algorithm/string/detail/find_format_store.hpp | 7 ++
   branches/release/boost/algorithm/string/detail/finder.hpp | 12 +-
   branches/release/boost/algorithm/string/detail/formatter.hpp | 4
   branches/release/boost/algorithm/string/detail/replace_storage.hpp | 2
   branches/release/boost/algorithm/string/detail/sequence.hpp | 6
   branches/release/boost/algorithm/string/find.hpp | 2
   branches/release/boost/algorithm/string/find_format.hpp | 12 +-
   branches/release/boost/algorithm/string/find_iterator.hpp | 24 +-----
   branches/release/boost/algorithm/string/iter_find.hpp | 8 +-
   branches/release/boost/algorithm/string/join.hpp | 20 +++---
   branches/release/boost/algorithm/string/predicate.hpp | 38 +++++-----
   branches/release/boost/algorithm/string/regex.hpp | 30 ++++----
   branches/release/boost/algorithm/string/trim.hpp | 48 +++++++-------
   branches/release/libs/algorithm/string/doc/concept.xml | 2
   branches/release/libs/algorithm/string/example/rle_example.cpp | 29 +++++---
   branches/release/libs/algorithm/string/test/predicate_test.cpp | 8 ++
   branches/release/libs/algorithm/string/test/replace_test.cpp | 1
   24 files changed, 296 insertions(+), 161 deletions(-)

Modified: branches/release/boost/algorithm/string.hpp
==============================================================================
--- branches/release/boost/algorithm/string.hpp (original)
+++ branches/release/boost/algorithm/string.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -21,6 +21,7 @@
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/find.hpp>
 #include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/join.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/algorithm/string/erase.hpp>
 #include <boost/algorithm/string/classification.hpp>

Modified: branches/release/boost/algorithm/string/classification.hpp
==============================================================================
--- branches/release/boost/algorithm/string/classification.hpp (original)
+++ branches/release/boost/algorithm/string/classification.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -202,8 +202,8 @@
             BOOST_STRING_TYPENAME range_value<RangeT>::type>
         is_any_of( const RangeT& Set )
         {
- return detail::is_any_ofF<
- BOOST_STRING_TYPENAME range_value<RangeT>::type>(as_literal(Set));
+ iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_set(as_literal(Set));
+ return detail::is_any_ofF<BOOST_STRING_TYPENAME range_value<RangeT>::type>(lit_set);
         }
 
         //! is_from_range predicate

Modified: branches/release/boost/algorithm/string/concept.hpp
==============================================================================
--- branches/release/boost/algorithm/string/concept.hpp (original)
+++ branches/release/boost/algorithm/string/concept.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -65,8 +65,8 @@
             void constraints()
             {
                 // Operation
- begin((*pFo)( (*pF)(i,i) ));
- end((*pFo)( (*pF)(i,i) ));
+ ::boost::begin((*pFo)( (*pF)(i,i) ));
+ ::boost::end((*pFo)( (*pF)(i,i) ));
             }
         private:
             IteratorT i;

Modified: branches/release/boost/algorithm/string/detail/case_conv.hpp
==============================================================================
--- branches/release/boost/algorithm/string/detail/case_conv.hpp (original)
+++ branches/release/boost/algorithm/string/detail/case_conv.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -21,6 +21,11 @@
 
 // case conversion functors -----------------------------------------------//
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
             // a tolower functor
             template<typename CharT>
             struct to_lowerF : public std::unary_function<CharT, CharT>
@@ -61,6 +66,10 @@
                 const std::locale& m_Loc;
             };
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
 // algorithm implementation -------------------------------------------------------------------------
 
             // Transform a range
@@ -71,8 +80,8 @@
                 FunctorT Functor)
             {
                 return std::transform(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     Output,
                     Functor);
             }
@@ -84,9 +93,9 @@
                 FunctorT Functor)
             {
                 std::transform(
- begin(Input),
- end(Input),
- begin(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
+ ::boost::begin(Input),
                     Functor);
             }
 
@@ -97,10 +106,10 @@
             {
                 return SequenceT(
                     make_transform_iterator(
- begin(Input),
+ ::boost::begin(Input),
                         Functor),
                     make_transform_iterator(
- end(Input),
+ ::boost::end(Input),
                         Functor));
             }
 

Modified: branches/release/boost/algorithm/string/detail/classification.hpp
==============================================================================
--- branches/release/boost/algorithm/string/detail/classification.hpp (original)
+++ branches/release/boost/algorithm/string/detail/classification.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -15,7 +15,6 @@
 #include <algorithm>
 #include <functional>
 #include <locale>
-#include <set>
 
 #include <boost/range/begin.hpp>
 #include <boost/range/end.hpp>
@@ -29,6 +28,10 @@
 
 // classification functors -----------------------------------------------//
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
             // is_classified functor
             struct is_classifiedF :
                 public predicate_facade<is_classifiedF>
@@ -60,6 +63,10 @@
                 const std::locale m_Locale;
             };
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
             // is_any_of functor
             /*
                 returns true if the value is from the specified set
@@ -68,25 +75,132 @@
             struct is_any_ofF :
                 public predicate_facade<is_any_ofF<CharT> >
             {
+ private:
+ // set cannot operate on const value-type
+ typedef typename remove_const<CharT>::type set_value_type;
+ // Size of the static storage (size of pointer*2)
+ static const ::std::size_t FIXED_STORAGE_SIZE = sizeof(set_value_type*)*2;
+
+ public:
                 // Boost.Lambda support
                 template <class Args> struct sig { typedef bool type; };
 
                 // Constructor
                 template<typename RangeT>
- is_any_ofF( const RangeT& Range ) :
- m_Set( begin(Range), end(Range) ) {}
+ is_any_ofF( const RangeT& Range ) : m_Size(0)
+ {
+ // Prepare storage
+ m_Storage.m_dynSet=0;
+
+ std::size_t Size=::boost::distance(Range);
+ m_Size=Size;
+ set_value_type* Storage=0;
+
+ if(m_Size<=FIXED_STORAGE_SIZE)
+ {
+ // Use fixed storage
+ Storage=&m_Storage.m_fixSet[0];
+ }
+ else
+ {
+ // Use dynamic storage
+ m_Storage.m_dynSet=new set_value_type[m_Size];
+ Storage=m_Storage.m_dynSet;
+ }
+
+ // Use fixed storage
+ ::std::copy(::boost::begin(Range), ::boost::end(Range), Storage);
+ ::std::sort(Storage, Storage+m_Size);
+ }
+
+ // Copy constructor
+ is_any_ofF(const is_any_ofF& Other) : m_Size(Other.m_Size)
+ {
+ // Prepare storage
+ m_Storage.m_dynSet=0;
+ const set_value_type* SrcStorage=0;
+ set_value_type* DestStorage=0;
+
+ if(m_Size<=FIXED_STORAGE_SIZE)
+ {
+ // Use fixed storage
+ DestStorage=&m_Storage.m_fixSet[0];
+ SrcStorage=&Other.m_Storage.m_fixSet[0];
+ }
+ else
+ {
+ // Use dynamic storage
+ m_Storage.m_dynSet=new set_value_type[m_Size];
+ DestStorage=m_Storage.m_dynSet;
+ SrcStorage=Other.m_Storage.m_dynSet;
+ }
+
+ // Use fixed storage
+ ::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
+ }
+
+ // Destructor
+ ~is_any_ofF()
+ {
+ if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0)
+ {
+ delete m_Storage.m_dynSet;
+ }
+ }
+
+ // Assignment
+ is_any_ofF& operator=(const is_any_ofF& Other)
+ {
+ // Prepare storage
+ m_Storage.m_dynSet=0;
+ m_Size=Other.m_Size;
+ const set_value_type* SrcStorage=0;
+ set_value_type* DestStorage=0;
+
+ if(m_Size<=FIXED_STORAGE_SIZE)
+ {
+ // Use fixed storage
+ DestStorage=&m_Storage.m_fixSet[0];
+ SrcStorage=&Other.m_Storage.m_fixSet[0];
+ }
+ else
+ {
+ // Use dynamic storage
+ m_Storage.m_dynSet=new set_value_type[m_Size];
+ DestStorage=m_Storage.m_dynSet;
+ SrcStorage=Other.m_Storage.m_dynSet;
+ }
+
+ // Use fixed storage
+ ::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
+
+ return *this;
+ }
 
                 // Operation
                 template<typename Char2T>
                 bool operator()( Char2T Ch ) const
                 {
- return m_Set.find(Ch)!=m_Set.end();
+ const set_value_type* Storage=
+ (m_Size<=FIXED_STORAGE_SIZE)
+ ? &m_Storage.m_fixSet[0]
+ : m_Storage.m_dynSet;
+
+ return ::std::binary_search(Storage, Storage+m_Size, Ch);
                 }
 
             private:
- // set cannot operate on const value-type
- typedef typename remove_const<CharT>::type set_value_type;
- std::set<set_value_type> m_Set;
+ // storage
+ // The actual used storage is selected on the type
+ union
+ {
+ set_value_type* m_dynSet;
+ set_value_type m_fixSet[FIXED_STORAGE_SIZE];
+ }
+ m_Storage;
+
+ // storage size
+ ::std::size_t m_Size;
             };
 
             // is_from_range functor

Modified: branches/release/boost/algorithm/string/detail/find_format.hpp
==============================================================================
--- branches/release/boost/algorithm/string/detail/find_format.hpp (original)
+++ branches/release/boost/algorithm/string/detail/find_format.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -68,17 +68,17 @@
                 if ( !M )
                 {
                     // Match not found - return original sequence
- std::copy( begin(Input), end(Input), Output );
+ std::copy( ::boost::begin(Input), ::boost::end(Input), Output );
                     return Output;
                 }
 
                 // Copy the beginning of the sequence
- std::copy( begin(Input), begin(M), Output );
+ std::copy( ::boost::begin(Input), ::boost::begin(M), Output );
                 // Format find result
                 // Copy formated result
- std::copy( begin(M.format_result()), end(M.format_result()), Output );
+ std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
                 // Copy the rest of the sequence
- std::copy( M.end(), end(Input), Output );
+ std::copy( M.end(), ::boost::end(Input), Output );
 
                 return Output;
             }
@@ -129,11 +129,11 @@
 
                 InputT Output;
                 // Copy the beginning of the sequence
- insert( Output, end(Output), begin(Input), M.begin() );
+ insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() );
                 // Copy formated result
- insert( Output, end(Output), M.format_result() );
+ insert( Output, ::boost::end(Output), M.format_result() );
                 // Copy the rest of the sequence
- insert( Output, end(Output), M.end(), end(Input) );
+ insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) );
 
                 return Output;
             }

Modified: branches/release/boost/algorithm/string/detail/find_format_all.hpp
==============================================================================
--- branches/release/boost/algorithm/string/detail/find_format_all.hpp (original)
+++ branches/release/boost/algorithm/string/detail/find_format_all.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -73,7 +73,7 @@
                 store_type M( FindResult, FormatResult, Formatter );
 
                 // Initialize last match
- input_iterator_type LastMatch=begin(Input);
+ input_iterator_type LastMatch=::boost::begin(Input);
 
                 // Iterate through all matches
                 while( M )
@@ -81,15 +81,15 @@
                     // Copy the beginning of the sequence
                     std::copy( LastMatch, M.begin(), Output );
                     // Copy formated result
- std::copy( begin(M.format_result()), end(M.format_result()), Output );
+ std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
 
                     // Proceed to the next match
                     LastMatch=M.end();
- M=Finder( LastMatch, end(Input) );
+ M=Finder( LastMatch, ::boost::end(Input) );
                 }
 
                 // Copy the rest of the sequence
- std::copy( LastMatch, end(Input), Output );
+ std::copy( LastMatch, ::boost::end(Input), Output );
 
                 return Output;
             }
@@ -140,7 +140,7 @@
                 store_type M( FindResult, FormatResult, Formatter );
 
                 // Initialize last match
- input_iterator_type LastMatch=begin(Input);
+ input_iterator_type LastMatch=::boost::begin(Input);
 
                 // Output temporary
                 InputT Output;
@@ -149,17 +149,17 @@
                 while( M )
                 {
                     // Copy the beginning of the sequence
- insert( Output, end(Output), LastMatch, M.begin() );
+ insert( Output, ::boost::end(Output), LastMatch, M.begin() );
                     // Copy formated result
- insert( Output, end(Output), M.format_result() );
+ insert( Output, ::boost::end(Output), M.format_result() );
 
                     // Proceed to the next match
                     LastMatch=M.end();
- M=Finder( LastMatch, end(Input) );
+ M=Finder( LastMatch, ::boost::end(Input) );
                 }
 
                 // Copy the rest of the sequence
- insert( Output, end(Output), LastMatch, end(Input) );
+ insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) );
 
                 return Output;
             }
@@ -213,8 +213,8 @@
                     BOOST_STRING_TYPENAME range_value<InputT>::type> Storage;
 
                 // Initialize replacement iterators
- input_iterator_type InsertIt=begin(Input);
- input_iterator_type SearchIt=begin(Input);
+ input_iterator_type InsertIt=::boost::begin(Input);
+ input_iterator_type SearchIt=::boost::begin(Input);
                 
                 while( M )
                 {
@@ -233,7 +233,7 @@
                     copy_to_storage( Storage, M.format_result() );
 
                     // Find range for a next match
- M=Finder( SearchIt, end(Input) );
+ M=Finder( SearchIt, ::boost::end(Input) );
                 }
 
                 // process the last segment
@@ -242,17 +242,17 @@
                     Input,
                     InsertIt,
                     SearchIt,
- end(Input) );
+ ::boost::end(Input) );
                 
                 if ( Storage.empty() )
                 {
                     // Truncate input
- erase( Input, InsertIt, end(Input) );
+ erase( Input, InsertIt, ::boost::end(Input) );
                 }
                 else
                 {
                     // Copy remaining data to the end of input
- insert( Input, end(Input), Storage.begin(), Storage.end() );
+ insert( Input, ::boost::end(Input), Storage.begin(), Storage.end() );
                 }
             }
 

Modified: branches/release/boost/algorithm/string/detail/find_format_store.hpp
==============================================================================
--- branches/release/boost/algorithm/string/detail/find_format_store.hpp (original)
+++ branches/release/boost/algorithm/string/detail/find_format_store.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -20,6 +20,10 @@
 
 // temporary format and find result storage --------------------------------//
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
             template<
                 typename ForwardIteratorT,
                 typename FormatterT,
@@ -64,6 +68,9 @@
                 const formatter_type& m_Formatter;
             };
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
         } // namespace detail
     } // namespace algorithm
 } // namespace boost

Modified: branches/release/boost/algorithm/string/detail/finder.hpp
==============================================================================
--- branches/release/boost/algorithm/string/detail/finder.hpp (original)
+++ branches/release/boost/algorithm/string/detail/finder.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -41,7 +41,7 @@
                 // Construction
                 template< typename SearchT >
                 first_finderF( const SearchT& Search, PredicateT Comp ) :
- m_Search(begin(Search), end(Search)), m_Comp(Comp) {}
+ m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}
                 first_finderF(
                         search_iterator_type SearchBegin,
                         search_iterator_type SearchEnd,
@@ -108,7 +108,7 @@
                 // Construction
                 template< typename SearchT >
                 last_finderF( const SearchT& Search, PredicateT Comp ) :
- m_Search(begin(Search), end(Search)), m_Comp(Comp) {}
+ m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}
                 last_finderF(
                         search_iterator_type SearchBegin,
                         search_iterator_type SearchEnd,
@@ -154,7 +154,7 @@
                     while( M )
                     {
                         Last=M;
- M=first_finder( end(M), End );
+ M=first_finder( ::boost::end(M), End );
                     }
 
                     return Last;
@@ -224,7 +224,7 @@
                         const SearchT& Search,
                         int Nth,
                         PredicateT Comp) :
- m_Search(begin(Search), end(Search)),
+ m_Search(::boost::begin(Search), ::boost::end(Search)),
                     m_Nth(Nth),
                     m_Comp(Comp) {}
                 nth_finderF(
@@ -279,7 +279,7 @@
                     for( unsigned int n=0; n<=N; ++n )
                     {
                         // find next match
- M=first_finder( end(M), End );
+ M=first_finder( ::boost::end(M), End );
 
                         if ( !M )
                         {
@@ -314,7 +314,7 @@
                     for( unsigned int n=1; n<=N; ++n )
                     {
                         // find next match
- M=last_finder( Begin, begin(M) );
+ M=last_finder( Begin, ::boost::begin(M) );
 
                         if ( !M )
                         {

Modified: branches/release/boost/algorithm/string/detail/formatter.hpp
==============================================================================
--- branches/release/boost/algorithm/string/detail/formatter.hpp (original)
+++ branches/release/boost/algorithm/string/detail/formatter.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -39,7 +39,7 @@
             public:
                 // Construction
                 const_formatF(const RangeT& Format) :
- m_Format(begin(Format), end(Format)) {}
+ m_Format(::boost::begin(Format), ::boost::end(Format)) {}
 
                 // Operation
 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
@@ -70,7 +70,7 @@
                 template< typename Range2T >
                 const RangeT& operator()(const Range2T& Replace) const
                 {
- return RangeT(begin(Replace), end(Replace));
+ return RangeT(::boost::begin(Replace), ::boost::end(Replace));
                 }
             };
 

Modified: branches/release/boost/algorithm/string/detail/replace_storage.hpp
==============================================================================
--- branches/release/boost/algorithm/string/detail/replace_storage.hpp (original)
+++ branches/release/boost/algorithm/string/detail/replace_storage.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -46,7 +46,7 @@
                 StorageT& Storage,
                 const WhatT& What )
             {
- Storage.insert( Storage.end(), begin(What), end(What) );
+ Storage.insert( Storage.end(), ::boost::begin(What), ::boost::end(What) );
             }
 
 

Modified: branches/release/boost/algorithm/string/detail/sequence.hpp
==============================================================================
--- branches/release/boost/algorithm/string/detail/sequence.hpp (original)
+++ branches/release/boost/algorithm/string/detail/sequence.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -41,7 +41,7 @@
                 BOOST_STRING_TYPENAME InputT::iterator At,
                 const InsertT& Insert )
             {
- insert( Input, At, begin(Insert), end(Insert) );
+ insert( Input, At, ::boost::begin(Insert), ::boost::end(Insert) );
             }
            
 // erase helper ---------------------------------------------------//
@@ -184,11 +184,11 @@
             {
                 if(From!=To)
                 {
- replace( Input, From, To, begin(Insert), end(Insert) );
+ replace( Input, From, To, ::boost::begin(Insert), ::boost::end(Insert) );
                 }
                 else
                 {
- insert( Input, From, begin(Insert), end(Insert) );
+ insert( Input, From, ::boost::begin(Insert), ::boost::end(Insert) );
                 }
             }
 

Modified: branches/release/boost/algorithm/string/find.hpp
==============================================================================
--- branches/release/boost/algorithm/string/find.hpp (original)
+++ branches/release/boost/algorithm/string/find.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -55,7 +55,7 @@
         {
             iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));
 
- return Finder(begin(lit_input),end(lit_input));
+ return Finder(::boost::begin(lit_input),::boost::end(lit_input));
         }
 
 // find_first -----------------------------------------------//

Modified: branches/release/boost/algorithm/string/find_format.hpp
==============================================================================
--- branches/release/boost/algorithm/string/find_format.hpp (original)
+++ branches/release/boost/algorithm/string/find_format.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -76,7 +76,7 @@
                 Output,
                 lit_input,
                 Formatter,
- Finder( begin(lit_input), end(lit_input) ) );
+ Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) );
         }
 
         //! Generic replace algorithm
@@ -104,7 +104,7 @@
             return detail::find_format_copy_impl(
                 Input,
                 Formatter,
- Finder(begin(Input), end(Input)));
+ Finder(::boost::begin(Input), ::boost::end(Input)));
         }
 
         //! Generic replace algorithm
@@ -137,7 +137,7 @@
             detail::find_format_impl(
                 Input,
                 Formatter,
- Finder(begin(Input), end(Input)));
+ Finder(::boost::begin(Input), ::boost::end(Input)));
         }
 
 
@@ -187,7 +187,7 @@
                 lit_input,
                 Finder,
                 Formatter,
- Finder(begin(lit_input), end(lit_input)));
+ Finder(::boost::begin(lit_input), ::boost::end(lit_input)));
         }
 
         //! Generic replace all algorithm
@@ -216,7 +216,7 @@
                 Input,
                 Finder,
                 Formatter,
- Finder( begin(Input), end(Input) ) );
+ Finder( ::boost::begin(Input), ::boost::end(Input) ) );
         }
 
         //! Generic replace all algorithm
@@ -251,7 +251,7 @@
                 Input,
                 Finder,
                 Formatter,
- Finder(begin(Input), end(Input)));
+ Finder(::boost::begin(Input), ::boost::end(Input)));
 
         }
 

Modified: branches/release/boost/algorithm/string/find_iterator.hpp
==============================================================================
--- branches/release/boost/algorithm/string/find_iterator.hpp (original)
+++ branches/release/boost/algorithm/string/find_iterator.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -24,7 +24,7 @@
 #include <boost/algorithm/string/detail/find_iterator.hpp>
 
 /*! \file
- Defines find iterator classes. Find iterator repeatly applies a Finder
+ Defines find iterator classes. Find iterator repeatedly applies a Finder
     to the specified input string to search for matches. Dereferencing
     the iterator yields the current match or a range between the last and the current
     match depending on the iterator used.
@@ -58,12 +58,6 @@
             // facade support
             friend class ::boost::iterator_core_access;
 
- // base type
- typedef iterator_facade<
- find_iterator<IteratorT>,
- const iterator_range<IteratorT>,
- forward_traversal_tag> facade_type;
-
         private:
         // typedefs
 
@@ -120,8 +114,8 @@
                 detail::find_iterator_base<IteratorT>(Finder,0)
             {
                 iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col));
- m_Match=make_iterator_range(begin(lit_col), begin(lit_col));
- m_End=end(lit_col);
+ m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
+ m_End=::boost::end(lit_col);
 
                 increment();
             }
@@ -220,12 +214,6 @@
             // facade support
             friend class ::boost::iterator_core_access;
 
- // base type
- typedef iterator_facade<
- find_iterator<IteratorT>,
- iterator_range<IteratorT>,
- forward_traversal_tag> facade_type;
-
         private:
         // typedefs
 
@@ -286,9 +274,9 @@
                 m_bEof(false)
             {
                 iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col));
- m_Match=make_iterator_range(begin(lit_col), begin(lit_col));
- m_Next=begin(lit_col);
- m_End=end(lit_col);
+ m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
+ m_Next=::boost::begin(lit_col);
+ m_End=::boost::end(lit_col);
 
                 increment();
             }

Modified: branches/release/boost/algorithm/string/iter_find.hpp
==============================================================================
--- branches/release/boost/algorithm/string/iter_find.hpp (original)
+++ branches/release/boost/algorithm/string/iter_find.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -88,14 +88,14 @@
                     range_value<SequenceSequenceT>::type,
                 input_iterator_type> copy_range_type;
             
- input_iterator_type InputEnd=end(lit_input);
+ input_iterator_type InputEnd=::boost::end(lit_input);
 
             typedef transform_iterator<copy_range_type, find_iterator_type>
                 transform_iter_type;
     
             transform_iter_type itBegin=
                 make_transform_iterator(
- find_iterator_type( begin(lit_input), InputEnd, Finder ),
+ find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
                     copy_range_type());
             
             transform_iter_type itEnd=
@@ -157,14 +157,14 @@
                     range_value<SequenceSequenceT>::type,
                 input_iterator_type> copy_range_type;
             
- input_iterator_type InputEnd=end(lit_input);
+ input_iterator_type InputEnd=::boost::end(lit_input);
 
             typedef transform_iterator<copy_range_type, find_iterator_type>
                 transform_iter_type;
     
             transform_iter_type itBegin=
                 make_transform_iterator(
- find_iterator_type( begin(lit_input), InputEnd, Finder ),
+ find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
                     copy_range_type() );
 
             transform_iter_type itEnd=

Modified: branches/release/boost/algorithm/string/join.hpp
==============================================================================
--- branches/release/boost/algorithm/string/join.hpp (original)
+++ branches/release/boost/algorithm/string/join.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -52,8 +52,8 @@
             typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
 
             // Parse input
- InputIteratorT itBegin=begin(Input);
- InputIteratorT itEnd=end(Input);
+ InputIteratorT itBegin=::boost::begin(Input);
+ InputIteratorT itEnd=::boost::end(Input);
 
             // Construct container to hold the result
             ResultT Result;
@@ -61,16 +61,16 @@
             // Append first element
             if(itBegin!=itEnd)
             {
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 ++itBegin;
             }
 
             for(;itBegin!=itEnd; ++itBegin)
             {
                 // Add separator
- detail::insert(Result, end(Result), as_literal(Separator));
+ detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                 // Add element
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
             }
 
             return Result;
@@ -103,8 +103,8 @@
             typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
 
             // Parse input
- InputIteratorT itBegin=begin(Input);
- InputIteratorT itEnd=end(Input);
+ InputIteratorT itBegin=::boost::begin(Input);
+ InputIteratorT itEnd=::boost::end(Input);
 
             // Construct container to hold the result
             ResultT Result;
@@ -114,7 +114,7 @@
             // Add this element
             if(itBegin!=itEnd)
             {
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 ++itBegin;
             }
 
@@ -123,9 +123,9 @@
                 if(Pred(*itBegin))
                 {
                     // Add separator
- detail::insert(Result, end(Result), as_literal(Separator));
+ detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                     // Add element
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 }
             }
 

Modified: branches/release/boost/algorithm/string/predicate.hpp
==============================================================================
--- branches/release/boost/algorithm/string/predicate.hpp (original)
+++ branches/release/boost/algorithm/string/predicate.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -67,11 +67,11 @@
             typedef BOOST_STRING_TYPENAME
                 range_const_iterator<Range2T>::type Iterator2T;
 
- Iterator1T InputEnd=end(lit_input);
- Iterator2T TestEnd=end(lit_test);
+ Iterator1T InputEnd=::boost::end(lit_input);
+ Iterator2T TestEnd=::boost::end(lit_test);
 
- Iterator1T it=begin(lit_input);
- Iterator2T pit=begin(lit_test);
+ Iterator1T it=::boost::begin(lit_input);
+ Iterator2T pit=::boost::begin(lit_test);
             for(;
                 it!=InputEnd && pit!=TestEnd;
                 ++it,++pit)
@@ -151,10 +151,10 @@
 
             return detail::
                 ends_with_iter_select(
- begin(lit_input),
- end(lit_input),
- begin(lit_test),
- end(lit_test),
+ ::boost::begin(lit_input),
+ ::boost::end(lit_input),
+ ::boost::begin(lit_test),
+ ::boost::end(lit_test),
                     Comp,
                     category());
         }
@@ -225,7 +225,7 @@
             }
             
             // Use the temporary variable to make VACPP happy
- bool bResult=(first_finder(lit_test,Comp)(begin(lit_input), end(lit_input)));
+ bool bResult=(first_finder(lit_test,Comp)(::boost::begin(lit_input), ::boost::end(lit_input)));
             return bResult;
         }
 
@@ -294,11 +294,11 @@
             typedef BOOST_STRING_TYPENAME
                 range_const_iterator<Range2T>::type Iterator2T;
                 
- Iterator1T InputEnd=end(lit_input);
- Iterator2T TestEnd=end(lit_test);
+ Iterator1T InputEnd=::boost::end(lit_input);
+ Iterator2T TestEnd=::boost::end(lit_test);
 
- Iterator1T it=begin(lit_input);
- Iterator2T pit=begin(lit_test);
+ Iterator1T it=::boost::begin(lit_input);
+ Iterator2T pit=::boost::begin(lit_test);
             for(;
                 it!=InputEnd && pit!=TestEnd;
                 ++it,++pit)
@@ -376,10 +376,10 @@
             iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_arg2(as_literal(Arg2));
 
             return std::lexicographical_compare(
- begin(lit_arg1),
- end(lit_arg1),
- begin(lit_arg2),
- end(lit_arg2),
+ ::boost::begin(lit_arg1),
+ ::boost::end(lit_arg1),
+ ::boost::begin(lit_arg2),
+ ::boost::end(lit_arg2),
                 Pred);
         }
 
@@ -444,8 +444,8 @@
             typedef BOOST_STRING_TYPENAME
                 range_const_iterator<RangeT>::type Iterator1T;
 
- Iterator1T InputEnd=end(lit_input);
- for( Iterator1T It=begin(lit_input); It!=InputEnd; ++It)
+ Iterator1T InputEnd=::boost::end(lit_input);
+ for( Iterator1T It=::boost::begin(lit_input); It!=InputEnd; ++It)
             {
                 if (!Pred(*It))
                     return false;

Modified: branches/release/boost/algorithm/string/regex.hpp
==============================================================================
--- branches/release/boost/algorithm/string/regex.hpp (original)
+++ branches/release/boost/algorithm/string/regex.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -63,7 +63,7 @@
             iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));
 
             return regex_finder(Rx,Flags)(
- begin(lit_input), end(lit_input) );
+ ::boost::begin(lit_input), ::boost::end(lit_input) );
         }
 
 // replace_regex --------------------------------------------------------------------//
@@ -515,8 +515,8 @@
             typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
 
             // Parse input
- InputIteratorT itBegin=begin(Input);
- InputIteratorT itEnd=end(Input);
+ InputIteratorT itBegin=::boost::begin(Input);
+ InputIteratorT itEnd=::boost::end(Input);
 
             // Construct container to hold the result
             ResultT Result;
@@ -525,23 +525,23 @@
             // Roll to the first element that will be added
             while(
                 itBegin!=itEnd &&
- !regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) ++itBegin;
+ !regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
 
             // Add this element
             if(itBegin!=itEnd)
             {
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 ++itBegin;
             }
 
             for(;itBegin!=itEnd; ++itBegin)
             {
- if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
+ if(regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
                 {
                     // Add separator
- detail::insert(Result, end(Result), as_literal(Separator));
+ detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                     // Add element
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 }
             }
 
@@ -583,8 +583,8 @@
             typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
 
             // Parse input
- InputIteratorT itBegin=begin(Input);
- InputIteratorT itEnd=end(Input);
+ InputIteratorT itBegin=::boost::begin(Input);
+ InputIteratorT itEnd=::boost::end(Input);
 
             // Construct container to hold the result
             ResultT Result;
@@ -593,23 +593,23 @@
             // Roll to the first element that will be added
             while(
                 itBegin!=itEnd &&
- !regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) ++itBegin;
+ !regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
 
             // Add this element
             if(itBegin!=itEnd)
             {
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 ++itBegin;
             }
 
             for(;itBegin!=itEnd; ++itBegin)
             {
- if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
+ if(regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
                 {
                     // Add separator
- detail::insert(Result, end(Result), as_literal(Separator));
+ detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                     // Add element
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 }
             }
 

Modified: branches/release/boost/algorithm/string/trim.hpp
==============================================================================
--- branches/release/boost/algorithm/string/trim.hpp (original)
+++ branches/release/boost/algorithm/string/trim.hpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -67,10 +67,10 @@
 
             std::copy(
                 ::boost::algorithm::detail::trim_begin(
- begin(lit_range),
- end(lit_range),
+ ::boost::begin(lit_range),
+ ::boost::end(lit_range),
                     IsSpace ),
- end(lit_range),
+ ::boost::end(lit_range),
                 Output);
 
             return Output;
@@ -85,10 +85,10 @@
         {
             return SequenceT(
                 ::boost::algorithm::detail::trim_begin(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     IsSpace ),
- end(Input));
+ ::boost::end(Input));
         }
 
         //! Left trim - parametric
@@ -124,10 +124,10 @@
         inline void trim_left_if(SequenceT& Input, PredicateT IsSpace)
         {
             Input.erase(
- begin(Input),
+ ::boost::begin(Input),
                 ::boost::algorithm::detail::trim_begin(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     IsSpace));
         }
 
@@ -174,10 +174,10 @@
             iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(as_literal(Input));
          
             std::copy(
- begin(lit_range),
+ ::boost::begin(lit_range),
                 ::boost::algorithm::detail::trim_end(
- begin(lit_range),
- end(lit_range),
+ ::boost::begin(lit_range),
+ ::boost::end(lit_range),
                     IsSpace ),
                 Output );
 
@@ -192,10 +192,10 @@
         inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace)
         {
             return SequenceT(
- begin(Input),
+ ::boost::begin(Input),
                 ::boost::algorithm::detail::trim_end(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     IsSpace)
                 );
         }
@@ -235,10 +235,10 @@
         {
             Input.erase(
                 ::boost::algorithm::detail::trim_end(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     IsSpace ),
- end(Input)
+ ::boost::end(Input)
                 );
         }
 
@@ -288,13 +288,13 @@
             BOOST_STRING_TYPENAME
                 range_const_iterator<RangeT>::type TrimEnd=
                 ::boost::algorithm::detail::trim_end(
- begin(lit_range),
- end(lit_range),
+ ::boost::begin(lit_range),
+ ::boost::end(lit_range),
                     IsSpace);
 
             std::copy(
                 detail::trim_begin(
- begin(lit_range), TrimEnd, IsSpace),
+ ::boost::begin(lit_range), TrimEnd, IsSpace),
                 TrimEnd,
                 Output
                 );
@@ -312,13 +312,13 @@
             BOOST_STRING_TYPENAME
                 range_const_iterator<SequenceT>::type TrimEnd=
                     ::boost::algorithm::detail::trim_end(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                         IsSpace);
 
             return SequenceT(
                 detail::trim_begin(
- begin(Input),
+ ::boost::begin(Input),
                     TrimEnd,
                     IsSpace),
                 TrimEnd

Modified: branches/release/libs/algorithm/string/doc/concept.xml
==============================================================================
--- branches/release/libs/algorithm/string/doc/concept.xml (original)
+++ branches/release/libs/algorithm/string/doc/concept.xml 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -102,7 +102,7 @@
 struct simple_finder
 {
     template&lt;typename ForwardIteratorT&gt;
- boost::iterator_range&lt;ForwardIterator&gt; operator()(
+ boost::iterator_range&lt;ForwardIteratorT&gt; operator()(
         ForwardIteratorT Begin,
         ForwardIteratorT End )
     {

Modified: branches/release/libs/algorithm/string/example/rle_example.cpp
==============================================================================
--- branches/release/libs/algorithm/string/example/rle_example.cpp (original)
+++ branches/release/libs/algorithm/string/example/rle_example.cpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -114,10 +114,13 @@
     result_type operator()( const ReplaceT& Replace ) const
     {
         SeqT r;
- r.push_back( repeat_mark<value_type>() );
- r.push_back( *(Replace.begin()) );
- r.push_back( value_type( Replace.size() ) );
-
+ if(!Replace.empty())
+ {
+ r.push_back( repeat_mark<value_type>() );
+ r.push_back( *(Replace.begin()) );
+ r.push_back( value_type( Replace.size() ) );
+ }
+
         return r;
     }
 };
@@ -183,14 +186,18 @@
     template< typename ReplaceT >
     result_type operator()( const ReplaceT& Replace ) const
     {
- // extract info
- typename ReplaceT::const_iterator It=Replace.begin();
-
- value_type Value=*(++It);
- value_type Repeat=*(++It);
-
         SeqT r;
- for( value_type Index=0; Index<Repeat; Index++ ) r.push_back( Value );
+
+ if(!Replace.empty())
+ {
+ // extract info
+ typename ReplaceT::const_iterator It=Replace.begin();
+
+ value_type Value=*(++It);
+ value_type Repeat=*(++It);
+
+ for( value_type Index=0; Index<Repeat; Index++ ) r.push_back( Value );
+ }
 
         return r;
     }

Modified: branches/release/libs/algorithm/string/test/predicate_test.cpp
==============================================================================
--- branches/release/libs/algorithm/string/test/predicate_test.cpp (original)
+++ branches/release/libs/algorithm/string/test/predicate_test.cpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -121,6 +121,14 @@
 
     TEST_CLASS( !is_classified(std::ctype_base::space), "...", "..\n\r\t " );
     TEST_CLASS( ( !is_any_of("abc") && is_from_range('a','e') ) || is_space(), "d e", "abcde" );
+
+ // is_any_of test
+// TEST_CLASS( !is_any_of(""), "", "aaa" )
+ TEST_CLASS( is_any_of("a"), "a", "ab" )
+ TEST_CLASS( is_any_of("ba"), "ab", "abc" )
+ TEST_CLASS( is_any_of("cba"), "abc", "abcd" )
+ TEST_CLASS( is_any_of("hgfedcba"), "abcdefgh", "abcdefghi" )
+ TEST_CLASS( is_any_of("qponmlkjihgfedcba"), "abcdefghijklmnopq", "zzz" )
 }
 
 #undef TEST_CLASS

Modified: branches/release/libs/algorithm/string/test/replace_test.cpp
==============================================================================
--- branches/release/libs/algorithm/string/test/replace_test.cpp (original)
+++ branches/release/libs/algorithm/string/test/replace_test.cpp 2008-06-19 08:07:24 EDT (Thu, 19 Jun 2008)
@@ -120,6 +120,7 @@
 {
     // replace all
     TEST_ALGO( replace_all, "1abc3abc2", string("abc") C_ string("YYY"), string("1YYY3YYY2") );
+ TEST_ALGO( replace_all, string("1abc3abc2"), "/" C_ "\\", string("1abc3abc2") );
     TEST_ALGO( ireplace_all, "1aBc3AbC2", "abC" C_ "YYY", string("1YYY3YYY2") );
     TEST_ALGO( replace_all, "1abc3abc2", string("abc") C_ string("Z"), string("1Z3Z2") );
     TEST_ALGO( replace_all, "1abc3abc2", string("abc") C_ string("XXXX"), string("1XXXX3XXXX2") );


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