Compare commits

..

36 Commits

Author SHA1 Message Date
Daniel James
251ccb6455 Branch for adding initializer list support (only in the unreleased gcc 4.4 at the moment).
[SVN r48931]
2008-09-23 19:45:43 +00:00
Pavol Droba
6d5e7b5a04 self assignment problem in is_any_ofF fixed
[SVN r48281]
2008-08-21 14:46:15 +00:00
Pavol Droba
760af1798b removed static constant FIXED_STORAGE_SIZE from is_any_of to
make the code compile on borland compilers



[SVN r48218]
2008-08-19 14:32:59 +00:00
Pavol Droba
1f5542b44c predicate test improvements
[SVN r48199]
2008-08-18 18:33:40 +00:00
Pavol Droba
baf3dd99e2 fox for allocation bug in is_any_ofF
[SVN r48198]
2008-08-18 18:32:51 +00:00
Pavol Droba
7299b29bf8 fixind the problems in is_any_ofF spotted by gcc
[SVN r46498]
2008-06-18 22:07:32 +00:00
Pavol Droba
539c170b9d aditional tests added
[SVN r46497]
2008-06-18 21:55:38 +00:00
Pavol Droba
c81ee948b7 is_any_ofF performance improvements
tabs removed



[SVN r46496]
2008-06-18 21:54:06 +00:00
Pavol Droba
ba5e4c30c6 fixed the rle example crash
[SVN r46463]
2008-06-17 21:58:58 +00:00
Pavol Droba
cd26ed816c patch from ticket #1152 applied
[SVN r46461]
2008-06-17 21:21:33 +00:00
Pavol Droba
4e15767bed simple_finder example fixed
[SVN r46460]
2008-06-17 21:13:25 +00:00
Pavol Droba
9fa2f90db4 begin() and end() calls made fully qualified
[SVN r46459]
2008-06-17 21:04:00 +00:00
Pavol Droba
35f317aeac unnecessary typedefs removed
[SVN r46458]
2008-06-17 20:31:41 +00:00
Markus Schöpflin
d0a03fdb4e Added missing include. This was already fixed on the 1.34 branch but never merged to the trunk.
[SVN r45857]
2008-05-28 08:32:12 +00:00
Daniel James
346f032be2 Quote href values - our tools don't support unquoted values.
[SVN r45283]
2008-05-11 13:49:20 +00:00
Daniel James
a389d768c4 Fix broken copyright urls. Fixes #1573.
[SVN r43422]
2008-02-27 18:51:14 +00:00
Daniel James
90fca39906 Point links to the pages that used to be in 'more' to the site.
[SVN r43210]
2008-02-10 15:02:17 +00:00
Pavol Droba
5b24f31486 merging changes from 1.34
[SVN r40698]
2007-11-02 21:00:08 +00:00
Pavol Droba
b25d6511b3 merging changes from 1.34
[SVN r40697]
2007-11-02 20:55:26 +00:00
Thorsten Jørgen Ottosen
1541a554f5 changed range_result_iterator to range_iterator
[SVN r40518]
2007-10-27 22:52:29 +00:00
Markus Schöpflin
7a97b3390e Added missing include.
[SVN r39586]
2007-09-28 07:19:29 +00:00
Markus Schöpflin
6e5a7497ae Added missing include.
[SVN r39519]
2007-09-25 08:46:31 +00:00
Vladimir Prus
f0b8b60379 Update
[SVN r38522]
2007-08-08 19:24:04 +00:00
Vladimir Prus
66019abb2f Update
[SVN r38521]
2007-08-08 19:23:38 +00:00
Vladimir Prus
8758222006 Remove V1 Jamfiles
[SVN r38516]
2007-08-08 19:02:26 +00:00
Pavol Droba
4eef56761a find/split iterator tests added
[SVN r38126]
2007-07-01 22:24:29 +00:00
Pavol Droba
b94a3fbfba adapting to new range interface
[SVN r38125]
2007-07-01 22:23:55 +00:00
Pavol Droba
614cc2ebab adapting to new range interface
[SVN r38123]
2007-07-01 13:29:56 +00:00
Pavol Droba
869660ed14 adapted to the new range interface
[SVN r38122]
2007-07-01 13:12:57 +00:00
Rene Rivera
777f30780e Fix broken build of docs, it was missing a dependency to the doxygen docs.
[SVN r37466]
2007-04-17 17:19:25 +00:00
Rene Rivera
26aa37733b Fix a few more references to *.boosbook instead of *.xml generated files.
[SVN r37465]
2007-04-17 17:13:35 +00:00
Pavol Droba
f1e60579c2 documentation typo fixed
[SVN r36843]
2007-01-30 07:59:28 +00:00
Beman Dawes
389dd3c863 Add copyright, license
[SVN r35905]
2006-11-07 19:11:57 +00:00
Pavol Droba
f23f61ae9b License added to the xml doc files
[SVN r34895]
2006-08-16 07:17:49 +00:00
Gennaro Prota
608112b112 boost guidelines (mainly from inspect tool: tabs, license reference text, etc.)
[SVN r34752]
2006-07-27 10:27:37 +00:00
Pavol Droba
b21b54dc4e Applying patch from Nicola Musatti
[SVN r33709]
2006-04-16 09:46:34 +00:00
25 changed files with 363 additions and 168 deletions

View File

@@ -21,6 +21,7 @@
#include <boost/algorithm/string/predicate.hpp> #include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/find.hpp> #include <boost/algorithm/string/find.hpp>
#include <boost/algorithm/string/split.hpp> #include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/join.hpp>
#include <boost/algorithm/string/replace.hpp> #include <boost/algorithm/string/replace.hpp>
#include <boost/algorithm/string/erase.hpp> #include <boost/algorithm/string/erase.hpp>
#include <boost/algorithm/string/classification.hpp> #include <boost/algorithm/string/classification.hpp>

View File

@@ -202,8 +202,8 @@ namespace boost {
BOOST_STRING_TYPENAME range_value<RangeT>::type> BOOST_STRING_TYPENAME range_value<RangeT>::type>
is_any_of( const RangeT& Set ) is_any_of( const RangeT& Set )
{ {
return detail::is_any_ofF< iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_set(as_literal(Set));
BOOST_STRING_TYPENAME range_value<RangeT>::type>(as_literal(Set)); return detail::is_any_ofF<BOOST_STRING_TYPENAME range_value<RangeT>::type>(lit_set);
} }
//! is_from_range predicate //! is_from_range predicate

View File

@@ -65,8 +65,8 @@ namespace boost {
void constraints() void constraints()
{ {
// Operation // Operation
begin((*pFo)( (*pF)(i,i) )); ::boost::begin((*pFo)( (*pF)(i,i) ));
end((*pFo)( (*pF)(i,i) )); ::boost::end((*pFo)( (*pF)(i,i) ));
} }
private: private:
IteratorT i; IteratorT i;

View File

@@ -21,6 +21,11 @@ namespace boost {
// case conversion functors -----------------------------------------------// // 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 // a tolower functor
template<typename CharT> template<typename CharT>
struct to_lowerF : public std::unary_function<CharT, CharT> struct to_lowerF : public std::unary_function<CharT, CharT>
@@ -61,6 +66,10 @@ namespace boost {
const std::locale& m_Loc; const std::locale& m_Loc;
}; };
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
#pragma warning(pop)
#endif
// algorithm implementation ------------------------------------------------------------------------- // algorithm implementation -------------------------------------------------------------------------
// Transform a range // Transform a range
@@ -71,8 +80,8 @@ namespace boost {
FunctorT Functor) FunctorT Functor)
{ {
return std::transform( return std::transform(
begin(Input), ::boost::begin(Input),
end(Input), ::boost::end(Input),
Output, Output,
Functor); Functor);
} }
@@ -84,9 +93,9 @@ namespace boost {
FunctorT Functor) FunctorT Functor)
{ {
std::transform( std::transform(
begin(Input), ::boost::begin(Input),
end(Input), ::boost::end(Input),
begin(Input), ::boost::begin(Input),
Functor); Functor);
} }
@@ -97,10 +106,10 @@ namespace boost {
{ {
return SequenceT( return SequenceT(
make_transform_iterator( make_transform_iterator(
begin(Input), ::boost::begin(Input),
Functor), Functor),
make_transform_iterator( make_transform_iterator(
end(Input), ::boost::end(Input),
Functor)); Functor));
} }

View File

@@ -15,7 +15,6 @@
#include <algorithm> #include <algorithm>
#include <functional> #include <functional>
#include <locale> #include <locale>
#include <set>
#include <boost/range/begin.hpp> #include <boost/range/begin.hpp>
#include <boost/range/end.hpp> #include <boost/range/end.hpp>
@@ -29,7 +28,7 @@ namespace boost {
// classification functors -----------------------------------------------// // classification functors -----------------------------------------------//
// is_classified functor // is_classified functor
struct is_classifiedF : struct is_classifiedF :
public predicate_facade<is_classifiedF> public predicate_facade<is_classifiedF>
{ {
@@ -39,7 +38,6 @@ namespace boost {
// Constructor from a locale // Constructor from a locale
is_classifiedF(std::ctype_base::mask Type, std::locale const & Loc = std::locale()) : is_classifiedF(std::ctype_base::mask Type, std::locale const & Loc = std::locale()) :
m_Type(Type), m_Locale(Loc) {} m_Type(Type), m_Locale(Loc) {}
// Operation // Operation
template<typename CharT> template<typename CharT>
bool operator()( CharT Ch ) const bool operator()( CharT Ch ) const
@@ -56,10 +54,11 @@ namespace boost {
#endif #endif
private: private:
const std::ctype_base::mask m_Type; std::ctype_base::mask m_Type;
const std::locale m_Locale; std::locale m_Locale;
}; };
// is_any_of functor // is_any_of functor
/* /*
returns true if the value is from the specified set returns true if the value is from the specified set
@@ -68,25 +67,181 @@ namespace boost {
struct is_any_ofF : struct is_any_ofF :
public predicate_facade<is_any_ofF<CharT> > public predicate_facade<is_any_ofF<CharT> >
{ {
private:
// set cannot operate on const value-type
typedef typename ::boost::remove_const<CharT>::type set_value_type;
public:
// Boost.Lambda support // Boost.Lambda support
template <class Args> struct sig { typedef bool type; }; template <class Args> struct sig { typedef bool type; };
// Constructor // Constructor
template<typename RangeT> template<typename RangeT>
is_any_ofF( const RangeT& Range ) : is_any_ofF( const RangeT& Range ) : m_Size(0)
m_Set( begin(Range), end(Range) ) {} {
// Prepare storage
m_Storage.m_dynSet=0;
std::size_t Size=::boost::distance(Range);
m_Size=Size;
set_value_type* Storage=0;
if(use_fixed_storage(m_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(use_fixed_storage(m_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(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)
{
delete [] m_Storage.m_dynSet;
}
}
// Assignment
is_any_ofF& operator=(const is_any_ofF& Other)
{
// Handle self assignment
if(this==&Other) return *this;
// Prepare storage
const set_value_type* SrcStorage;
set_value_type* DestStorage;
if(use_fixed_storage(Other.m_Size))
{
// Use fixed storage
DestStorage=&m_Storage.m_fixSet[0];
SrcStorage=&Other.m_Storage.m_fixSet[0];
// Delete old storage if was present
if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)
{
delete [] m_Storage.m_dynSet;
}
// Set new size
m_Size=Other.m_Size;
}
else
{
// Other uses dynamic storage
SrcStorage=Other.m_Storage.m_dynSet;
// Check what kind of storage are we using right now
if(use_fixed_storage(m_Size))
{
// Using fixed storage, allocate new
set_value_type* pTemp=new set_value_type[Other.m_Size];
DestStorage=pTemp;
m_Storage.m_dynSet=pTemp;
m_Size=Other.m_Size;
}
else
{
// Using dynamic storage, check if can reuse
if(m_Storage.m_dynSet!=0 && m_Size>=Other.m_Size && m_Size<Other.m_Size*2)
{
// Reuse the current storage
DestStorage=m_Storage.m_dynSet;
m_Size=Other.m_Size;
}
else
{
// Allocate the new one
set_value_type* pTemp=new set_value_type[Other.m_Size];
DestStorage=pTemp;
// Delete old storage if necessary
if(m_Storage.m_dynSet!=0)
{
delete [] m_Storage.m_dynSet;
}
// Store the new storage
m_Storage.m_dynSet=pTemp;
// Set new size
m_Size=Other.m_Size;
}
}
}
// Copy the data
::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
return *this;
}
// Operation // Operation
template<typename Char2T> template<typename Char2T>
bool operator()( Char2T Ch ) const bool operator()( Char2T Ch ) const
{ {
return m_Set.find(Ch)!=m_Set.end(); const set_value_type* Storage=
(use_fixed_storage(m_Size))
? &m_Storage.m_fixSet[0]
: m_Storage.m_dynSet;
return ::std::binary_search(Storage, Storage+m_Size, Ch);
}
private:
// check if the size is eligible for fixed storage
static bool use_fixed_storage(std::size_t size)
{
return size<=sizeof(set_value_type*)*2;
} }
private: private:
// set cannot operate on const value-type // storage
typedef typename remove_const<CharT>::type set_value_type; // The actual used storage is selected on the type
std::set<set_value_type> m_Set; union
{
set_value_type* m_dynSet;
set_value_type m_fixSet[sizeof(set_value_type*)*2];
}
m_Storage;
// storage size
::std::size_t m_Size;
}; };
// is_from_range functor // is_from_range functor

View File

@@ -68,17 +68,17 @@ namespace boost {
if ( !M ) if ( !M )
{ {
// Match not found - return original sequence // Match not found - return original sequence
std::copy( begin(Input), end(Input), Output ); std::copy( ::boost::begin(Input), ::boost::end(Input), Output );
return Output; return Output;
} }
// Copy the beginning of the sequence // 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 // Format find result
// Copy formated 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 // Copy the rest of the sequence
std::copy( M.end(), end(Input), Output ); std::copy( M.end(), ::boost::end(Input), Output );
return Output; return Output;
} }
@@ -129,11 +129,11 @@ namespace boost {
InputT Output; InputT Output;
// Copy the beginning of the sequence // 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 // Copy formated result
insert( Output, end(Output), M.format_result() ); insert( Output, ::boost::end(Output), M.format_result() );
// Copy the rest of the sequence // 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; return Output;
} }

View File

@@ -73,7 +73,7 @@ namespace boost {
store_type M( FindResult, FormatResult, Formatter ); store_type M( FindResult, FormatResult, Formatter );
// Initialize last match // Initialize last match
input_iterator_type LastMatch=begin(Input); input_iterator_type LastMatch=::boost::begin(Input);
// Iterate through all matches // Iterate through all matches
while( M ) while( M )
@@ -81,15 +81,15 @@ namespace boost {
// Copy the beginning of the sequence // Copy the beginning of the sequence
std::copy( LastMatch, M.begin(), Output ); std::copy( LastMatch, M.begin(), Output );
// Copy formated 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 );
// Proceed to the next match // Proceed to the next match
LastMatch=M.end(); LastMatch=M.end();
M=Finder( LastMatch, end(Input) ); M=Finder( LastMatch, ::boost::end(Input) );
} }
// Copy the rest of the sequence // Copy the rest of the sequence
std::copy( LastMatch, end(Input), Output ); std::copy( LastMatch, ::boost::end(Input), Output );
return Output; return Output;
} }
@@ -140,7 +140,7 @@ namespace boost {
store_type M( FindResult, FormatResult, Formatter ); store_type M( FindResult, FormatResult, Formatter );
// Initialize last match // Initialize last match
input_iterator_type LastMatch=begin(Input); input_iterator_type LastMatch=::boost::begin(Input);
// Output temporary // Output temporary
InputT Output; InputT Output;
@@ -149,17 +149,17 @@ namespace boost {
while( M ) while( M )
{ {
// Copy the beginning of the sequence // Copy the beginning of the sequence
insert( Output, end(Output), LastMatch, M.begin() ); insert( Output, ::boost::end(Output), LastMatch, M.begin() );
// Copy formated result // Copy formated result
insert( Output, end(Output), M.format_result() ); insert( Output, ::boost::end(Output), M.format_result() );
// Proceed to the next match // Proceed to the next match
LastMatch=M.end(); LastMatch=M.end();
M=Finder( LastMatch, end(Input) ); M=Finder( LastMatch, ::boost::end(Input) );
} }
// Copy the rest of the sequence // Copy the rest of the sequence
insert( Output, end(Output), LastMatch, end(Input) ); insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) );
return Output; return Output;
} }
@@ -213,8 +213,8 @@ namespace boost {
BOOST_STRING_TYPENAME range_value<InputT>::type> Storage; BOOST_STRING_TYPENAME range_value<InputT>::type> Storage;
// Initialize replacement iterators // Initialize replacement iterators
input_iterator_type InsertIt=begin(Input); input_iterator_type InsertIt=::boost::begin(Input);
input_iterator_type SearchIt=begin(Input); input_iterator_type SearchIt=::boost::begin(Input);
while( M ) while( M )
{ {
@@ -233,7 +233,7 @@ namespace boost {
copy_to_storage( Storage, M.format_result() ); copy_to_storage( Storage, M.format_result() );
// Find range for a next match // Find range for a next match
M=Finder( SearchIt, end(Input) ); M=Finder( SearchIt, ::boost::end(Input) );
} }
// process the last segment // process the last segment
@@ -242,17 +242,17 @@ namespace boost {
Input, Input,
InsertIt, InsertIt,
SearchIt, SearchIt,
end(Input) ); ::boost::end(Input) );
if ( Storage.empty() ) if ( Storage.empty() )
{ {
// Truncate input // Truncate input
erase( Input, InsertIt, end(Input) ); erase( Input, InsertIt, ::boost::end(Input) );
} }
else else
{ {
// Copy remaining data to the end of input // 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() );
} }
} }

View File

@@ -20,6 +20,10 @@ namespace boost {
// temporary format and find result storage --------------------------------// // 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< template<
typename ForwardIteratorT, typename ForwardIteratorT,
typename FormatterT, typename FormatterT,
@@ -64,6 +68,9 @@ namespace boost {
const formatter_type& m_Formatter; const formatter_type& m_Formatter;
}; };
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
#pragma warning(pop)
#endif
} // namespace detail } // namespace detail
} // namespace algorithm } // namespace algorithm
} // namespace boost } // namespace boost

View File

@@ -41,7 +41,7 @@ namespace boost {
// Construction // Construction
template< typename SearchT > template< typename SearchT >
first_finderF( const SearchT& Search, PredicateT Comp ) : 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( first_finderF(
search_iterator_type SearchBegin, search_iterator_type SearchBegin,
search_iterator_type SearchEnd, search_iterator_type SearchEnd,
@@ -108,7 +108,7 @@ namespace boost {
// Construction // Construction
template< typename SearchT > template< typename SearchT >
last_finderF( const SearchT& Search, PredicateT Comp ) : 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( last_finderF(
search_iterator_type SearchBegin, search_iterator_type SearchBegin,
search_iterator_type SearchEnd, search_iterator_type SearchEnd,
@@ -154,7 +154,7 @@ namespace boost {
while( M ) while( M )
{ {
Last=M; Last=M;
M=first_finder( end(M), End ); M=first_finder( ::boost::end(M), End );
} }
return Last; return Last;
@@ -224,7 +224,7 @@ namespace boost {
const SearchT& Search, const SearchT& Search,
int Nth, int Nth,
PredicateT Comp) : PredicateT Comp) :
m_Search(begin(Search), end(Search)), m_Search(::boost::begin(Search), ::boost::end(Search)),
m_Nth(Nth), m_Nth(Nth),
m_Comp(Comp) {} m_Comp(Comp) {}
nth_finderF( nth_finderF(
@@ -279,7 +279,7 @@ namespace boost {
for( unsigned int n=0; n<=N; ++n ) for( unsigned int n=0; n<=N; ++n )
{ {
// find next match // find next match
M=first_finder( end(M), End ); M=first_finder( ::boost::end(M), End );
if ( !M ) if ( !M )
{ {
@@ -314,7 +314,7 @@ namespace boost {
for( unsigned int n=1; n<=N; ++n ) for( unsigned int n=1; n<=N; ++n )
{ {
// find next match // find next match
M=last_finder( Begin, begin(M) ); M=last_finder( Begin, ::boost::begin(M) );
if ( !M ) if ( !M )
{ {

View File

@@ -39,7 +39,7 @@ namespace boost {
public: public:
// Construction // Construction
const_formatF(const RangeT& Format) : const_formatF(const RangeT& Format) :
m_Format(begin(Format), end(Format)) {} m_Format(::boost::begin(Format), ::boost::end(Format)) {}
// Operation // Operation
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
@@ -70,7 +70,7 @@ namespace boost {
template< typename Range2T > template< typename Range2T >
const RangeT& operator()(const Range2T& Replace) const const RangeT& operator()(const Range2T& Replace) const
{ {
return RangeT(begin(Replace), end(Replace)); return RangeT(::boost::begin(Replace), ::boost::end(Replace));
} }
}; };

View File

@@ -46,7 +46,7 @@ namespace boost {
StorageT& Storage, StorageT& Storage,
const WhatT& What ) const WhatT& What )
{ {
Storage.insert( Storage.end(), begin(What), end(What) ); Storage.insert( Storage.end(), ::boost::begin(What), ::boost::end(What) );
} }

View File

@@ -41,7 +41,7 @@ namespace boost {
BOOST_STRING_TYPENAME InputT::iterator At, BOOST_STRING_TYPENAME InputT::iterator At,
const InsertT& Insert ) const InsertT& Insert )
{ {
insert( Input, At, begin(Insert), end(Insert) ); insert( Input, At, ::boost::begin(Insert), ::boost::end(Insert) );
} }
// erase helper ---------------------------------------------------// // erase helper ---------------------------------------------------//
@@ -184,11 +184,11 @@ namespace boost {
{ {
if(From!=To) if(From!=To)
{ {
replace( Input, From, To, begin(Insert), end(Insert) ); replace( Input, From, To, ::boost::begin(Insert), ::boost::end(Insert) );
} }
else else
{ {
insert( Input, From, begin(Insert), end(Insert) ); insert( Input, From, ::boost::begin(Insert), ::boost::end(Insert) );
} }
} }

View File

@@ -55,7 +55,7 @@ namespace boost {
{ {
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input)); 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 -----------------------------------------------// // find_first -----------------------------------------------//

View File

@@ -76,7 +76,7 @@ namespace boost {
Output, Output,
lit_input, lit_input,
Formatter, Formatter,
Finder( begin(lit_input), end(lit_input) ) ); Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) );
} }
//! Generic replace algorithm //! Generic replace algorithm
@@ -104,7 +104,7 @@ namespace boost {
return detail::find_format_copy_impl( return detail::find_format_copy_impl(
Input, Input,
Formatter, Formatter,
Finder(begin(Input), end(Input))); Finder(::boost::begin(Input), ::boost::end(Input)));
} }
//! Generic replace algorithm //! Generic replace algorithm
@@ -137,7 +137,7 @@ namespace boost {
detail::find_format_impl( detail::find_format_impl(
Input, Input,
Formatter, Formatter,
Finder(begin(Input), end(Input))); Finder(::boost::begin(Input), ::boost::end(Input)));
} }
@@ -187,7 +187,7 @@ namespace boost {
lit_input, lit_input,
Finder, Finder,
Formatter, Formatter,
Finder(begin(lit_input), end(lit_input))); Finder(::boost::begin(lit_input), ::boost::end(lit_input)));
} }
//! Generic replace all algorithm //! Generic replace all algorithm
@@ -216,7 +216,7 @@ namespace boost {
Input, Input,
Finder, Finder,
Formatter, Formatter,
Finder( begin(Input), end(Input) ) ); Finder( ::boost::begin(Input), ::boost::end(Input) ) );
} }
//! Generic replace all algorithm //! Generic replace all algorithm
@@ -251,7 +251,7 @@ namespace boost {
Input, Input,
Finder, Finder,
Formatter, Formatter,
Finder(begin(Input), end(Input))); Finder(::boost::begin(Input), ::boost::end(Input)));
} }

View File

@@ -24,7 +24,7 @@
#include <boost/algorithm/string/detail/find_iterator.hpp> #include <boost/algorithm/string/detail/find_iterator.hpp>
/*! \file /*! \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 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 the iterator yields the current match or a range between the last and the current
match depending on the iterator used. match depending on the iterator used.
@@ -58,12 +58,6 @@ namespace boost {
// facade support // facade support
friend class ::boost::iterator_core_access; friend class ::boost::iterator_core_access;
// base type
typedef iterator_facade<
find_iterator<IteratorT>,
const iterator_range<IteratorT>,
forward_traversal_tag> facade_type;
private: private:
// typedefs // typedefs
@@ -120,8 +114,8 @@ namespace boost {
detail::find_iterator_base<IteratorT>(Finder,0) detail::find_iterator_base<IteratorT>(Finder,0)
{ {
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col)); 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_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
m_End=end(lit_col); m_End=::boost::end(lit_col);
increment(); increment();
} }
@@ -220,12 +214,6 @@ namespace boost {
// facade support // facade support
friend class ::boost::iterator_core_access; friend class ::boost::iterator_core_access;
// base type
typedef iterator_facade<
find_iterator<IteratorT>,
iterator_range<IteratorT>,
forward_traversal_tag> facade_type;
private: private:
// typedefs // typedefs
@@ -286,9 +274,9 @@ namespace boost {
m_bEof(false) m_bEof(false)
{ {
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col)); 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_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
m_Next=begin(lit_col); m_Next=::boost::begin(lit_col);
m_End=end(lit_col); m_End=::boost::end(lit_col);
increment(); increment();
} }

View File

@@ -88,14 +88,14 @@ namespace boost {
range_value<SequenceSequenceT>::type, range_value<SequenceSequenceT>::type,
input_iterator_type> copy_range_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> typedef transform_iterator<copy_range_type, find_iterator_type>
transform_iter_type; transform_iter_type;
transform_iter_type itBegin= transform_iter_type itBegin=
make_transform_iterator( make_transform_iterator(
find_iterator_type( begin(lit_input), InputEnd, Finder ), find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
copy_range_type()); copy_range_type());
transform_iter_type itEnd= transform_iter_type itEnd=
@@ -157,14 +157,14 @@ namespace boost {
range_value<SequenceSequenceT>::type, range_value<SequenceSequenceT>::type,
input_iterator_type> copy_range_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> typedef transform_iterator<copy_range_type, find_iterator_type>
transform_iter_type; transform_iter_type;
transform_iter_type itBegin= transform_iter_type itBegin=
make_transform_iterator( make_transform_iterator(
find_iterator_type( begin(lit_input), InputEnd, Finder ), find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
copy_range_type() ); copy_range_type() );
transform_iter_type itEnd= transform_iter_type itEnd=

View File

@@ -52,8 +52,8 @@ namespace boost {
typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT; typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
// Parse input // Parse input
InputIteratorT itBegin=begin(Input); InputIteratorT itBegin=::boost::begin(Input);
InputIteratorT itEnd=end(Input); InputIteratorT itEnd=::boost::end(Input);
// Construct container to hold the result // Construct container to hold the result
ResultT Result; ResultT Result;
@@ -61,16 +61,16 @@ namespace boost {
// Append first element // Append first element
if(itBegin!=itEnd) if(itBegin!=itEnd)
{ {
detail::insert(Result, end(Result), *itBegin); detail::insert(Result, ::boost::end(Result), *itBegin);
++itBegin; ++itBegin;
} }
for(;itBegin!=itEnd; ++itBegin) for(;itBegin!=itEnd; ++itBegin)
{ {
// Add separator // Add separator
detail::insert(Result, end(Result), as_literal(Separator)); detail::insert(Result, ::boost::end(Result), as_literal(Separator));
// Add element // Add element
detail::insert(Result, end(Result), *itBegin); detail::insert(Result, ::boost::end(Result), *itBegin);
} }
return Result; return Result;
@@ -103,8 +103,8 @@ namespace boost {
typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT; typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
// Parse input // Parse input
InputIteratorT itBegin=begin(Input); InputIteratorT itBegin=::boost::begin(Input);
InputIteratorT itEnd=end(Input); InputIteratorT itEnd=::boost::end(Input);
// Construct container to hold the result // Construct container to hold the result
ResultT Result; ResultT Result;
@@ -114,7 +114,7 @@ namespace boost {
// Add this element // Add this element
if(itBegin!=itEnd) if(itBegin!=itEnd)
{ {
detail::insert(Result, end(Result), *itBegin); detail::insert(Result, ::boost::end(Result), *itBegin);
++itBegin; ++itBegin;
} }
@@ -123,9 +123,9 @@ namespace boost {
if(Pred(*itBegin)) if(Pred(*itBegin))
{ {
// Add separator // Add separator
detail::insert(Result, end(Result), as_literal(Separator)); detail::insert(Result, ::boost::end(Result), as_literal(Separator));
// Add element // Add element
detail::insert(Result, end(Result), *itBegin); detail::insert(Result, ::boost::end(Result), *itBegin);
} }
} }

View File

@@ -67,11 +67,11 @@ namespace boost {
typedef BOOST_STRING_TYPENAME typedef BOOST_STRING_TYPENAME
range_const_iterator<Range2T>::type Iterator2T; range_const_iterator<Range2T>::type Iterator2T;
Iterator1T InputEnd=end(lit_input); Iterator1T InputEnd=::boost::end(lit_input);
Iterator2T TestEnd=end(lit_test); Iterator2T TestEnd=::boost::end(lit_test);
Iterator1T it=begin(lit_input); Iterator1T it=::boost::begin(lit_input);
Iterator2T pit=begin(lit_test); Iterator2T pit=::boost::begin(lit_test);
for(; for(;
it!=InputEnd && pit!=TestEnd; it!=InputEnd && pit!=TestEnd;
++it,++pit) ++it,++pit)
@@ -151,10 +151,10 @@ namespace boost {
return detail:: return detail::
ends_with_iter_select( ends_with_iter_select(
begin(lit_input), ::boost::begin(lit_input),
end(lit_input), ::boost::end(lit_input),
begin(lit_test), ::boost::begin(lit_test),
end(lit_test), ::boost::end(lit_test),
Comp, Comp,
category()); category());
} }
@@ -225,7 +225,7 @@ namespace boost {
} }
// Use the temporary variable to make VACPP happy // 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; return bResult;
} }
@@ -294,11 +294,11 @@ namespace boost {
typedef BOOST_STRING_TYPENAME typedef BOOST_STRING_TYPENAME
range_const_iterator<Range2T>::type Iterator2T; range_const_iterator<Range2T>::type Iterator2T;
Iterator1T InputEnd=end(lit_input); Iterator1T InputEnd=::boost::end(lit_input);
Iterator2T TestEnd=end(lit_test); Iterator2T TestEnd=::boost::end(lit_test);
Iterator1T it=begin(lit_input); Iterator1T it=::boost::begin(lit_input);
Iterator2T pit=begin(lit_test); Iterator2T pit=::boost::begin(lit_test);
for(; for(;
it!=InputEnd && pit!=TestEnd; it!=InputEnd && pit!=TestEnd;
++it,++pit) ++it,++pit)
@@ -376,10 +376,10 @@ namespace boost {
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_arg2(as_literal(Arg2)); iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_arg2(as_literal(Arg2));
return std::lexicographical_compare( return std::lexicographical_compare(
begin(lit_arg1), ::boost::begin(lit_arg1),
end(lit_arg1), ::boost::end(lit_arg1),
begin(lit_arg2), ::boost::begin(lit_arg2),
end(lit_arg2), ::boost::end(lit_arg2),
Pred); Pred);
} }
@@ -444,8 +444,8 @@ namespace boost {
typedef BOOST_STRING_TYPENAME typedef BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type Iterator1T; range_const_iterator<RangeT>::type Iterator1T;
Iterator1T InputEnd=end(lit_input); Iterator1T InputEnd=::boost::end(lit_input);
for( Iterator1T It=begin(lit_input); It!=InputEnd; ++It) for( Iterator1T It=::boost::begin(lit_input); It!=InputEnd; ++It)
{ {
if (!Pred(*It)) if (!Pred(*It))
return false; return false;

View File

@@ -63,7 +63,7 @@ namespace boost {
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input)); iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));
return regex_finder(Rx,Flags)( return regex_finder(Rx,Flags)(
begin(lit_input), end(lit_input) ); ::boost::begin(lit_input), ::boost::end(lit_input) );
} }
// replace_regex --------------------------------------------------------------------// // replace_regex --------------------------------------------------------------------//
@@ -515,8 +515,8 @@ namespace boost {
typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT; typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
// Parse input // Parse input
InputIteratorT itBegin=begin(Input); InputIteratorT itBegin=::boost::begin(Input);
InputIteratorT itEnd=end(Input); InputIteratorT itEnd=::boost::end(Input);
// Construct container to hold the result // Construct container to hold the result
ResultT Result; ResultT Result;
@@ -525,23 +525,23 @@ namespace boost {
// Roll to the first element that will be added // Roll to the first element that will be added
while( while(
itBegin!=itEnd && 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 // Add this element
if(itBegin!=itEnd) if(itBegin!=itEnd)
{ {
detail::insert(Result, end(Result), *itBegin); detail::insert(Result, ::boost::end(Result), *itBegin);
++itBegin; ++itBegin;
} }
for(;itBegin!=itEnd; ++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 // Add separator
detail::insert(Result, end(Result), as_literal(Separator)); detail::insert(Result, ::boost::end(Result), as_literal(Separator));
// Add element // Add element
detail::insert(Result, end(Result), *itBegin); detail::insert(Result, ::boost::end(Result), *itBegin);
} }
} }
@@ -583,8 +583,8 @@ namespace boost {
typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT; typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
// Parse input // Parse input
InputIteratorT itBegin=begin(Input); InputIteratorT itBegin=::boost::begin(Input);
InputIteratorT itEnd=end(Input); InputIteratorT itEnd=::boost::end(Input);
// Construct container to hold the result // Construct container to hold the result
ResultT Result; ResultT Result;
@@ -593,23 +593,23 @@ namespace boost {
// Roll to the first element that will be added // Roll to the first element that will be added
while( while(
itBegin!=itEnd && 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 // Add this element
if(itBegin!=itEnd) if(itBegin!=itEnd)
{ {
detail::insert(Result, end(Result), *itBegin); detail::insert(Result, ::boost::end(Result), *itBegin);
++itBegin; ++itBegin;
} }
for(;itBegin!=itEnd; ++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 // Add separator
detail::insert(Result, end(Result), as_literal(Separator)); detail::insert(Result, ::boost::end(Result), as_literal(Separator));
// Add element // Add element
detail::insert(Result, end(Result), *itBegin); detail::insert(Result, ::boost::end(Result), *itBegin);
} }
} }

View File

@@ -67,10 +67,10 @@ namespace boost {
std::copy( std::copy(
::boost::algorithm::detail::trim_begin( ::boost::algorithm::detail::trim_begin(
begin(lit_range), ::boost::begin(lit_range),
end(lit_range), ::boost::end(lit_range),
IsSpace ), IsSpace ),
end(lit_range), ::boost::end(lit_range),
Output); Output);
return Output; return Output;
@@ -85,10 +85,10 @@ namespace boost {
{ {
return SequenceT( return SequenceT(
::boost::algorithm::detail::trim_begin( ::boost::algorithm::detail::trim_begin(
begin(Input), ::boost::begin(Input),
end(Input), ::boost::end(Input),
IsSpace ), IsSpace ),
end(Input)); ::boost::end(Input));
} }
//! Left trim - parametric //! Left trim - parametric
@@ -124,10 +124,10 @@ namespace boost {
inline void trim_left_if(SequenceT& Input, PredicateT IsSpace) inline void trim_left_if(SequenceT& Input, PredicateT IsSpace)
{ {
Input.erase( Input.erase(
begin(Input), ::boost::begin(Input),
::boost::algorithm::detail::trim_begin( ::boost::algorithm::detail::trim_begin(
begin(Input), ::boost::begin(Input),
end(Input), ::boost::end(Input),
IsSpace)); IsSpace));
} }
@@ -174,10 +174,10 @@ namespace boost {
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(as_literal(Input)); iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(as_literal(Input));
std::copy( std::copy(
begin(lit_range), ::boost::begin(lit_range),
::boost::algorithm::detail::trim_end( ::boost::algorithm::detail::trim_end(
begin(lit_range), ::boost::begin(lit_range),
end(lit_range), ::boost::end(lit_range),
IsSpace ), IsSpace ),
Output ); Output );
@@ -192,10 +192,10 @@ namespace boost {
inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace) inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace)
{ {
return SequenceT( return SequenceT(
begin(Input), ::boost::begin(Input),
::boost::algorithm::detail::trim_end( ::boost::algorithm::detail::trim_end(
begin(Input), ::boost::begin(Input),
end(Input), ::boost::end(Input),
IsSpace) IsSpace)
); );
} }
@@ -235,10 +235,10 @@ namespace boost {
{ {
Input.erase( Input.erase(
::boost::algorithm::detail::trim_end( ::boost::algorithm::detail::trim_end(
begin(Input), ::boost::begin(Input),
end(Input), ::boost::end(Input),
IsSpace ), IsSpace ),
end(Input) ::boost::end(Input)
); );
} }
@@ -288,13 +288,13 @@ namespace boost {
BOOST_STRING_TYPENAME BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type TrimEnd= range_const_iterator<RangeT>::type TrimEnd=
::boost::algorithm::detail::trim_end( ::boost::algorithm::detail::trim_end(
begin(lit_range), ::boost::begin(lit_range),
end(lit_range), ::boost::end(lit_range),
IsSpace); IsSpace);
std::copy( std::copy(
detail::trim_begin( detail::trim_begin(
begin(lit_range), TrimEnd, IsSpace), ::boost::begin(lit_range), TrimEnd, IsSpace),
TrimEnd, TrimEnd,
Output Output
); );
@@ -312,13 +312,13 @@ namespace boost {
BOOST_STRING_TYPENAME BOOST_STRING_TYPENAME
range_const_iterator<SequenceT>::type TrimEnd= range_const_iterator<SequenceT>::type TrimEnd=
::boost::algorithm::detail::trim_end( ::boost::algorithm::detail::trim_end(
begin(Input), ::boost::begin(Input),
end(Input), ::boost::end(Input),
IsSpace); IsSpace);
return SequenceT( return SequenceT(
detail::trim_begin( detail::trim_begin(
begin(Input), ::boost::begin(Input),
TrimEnd, TrimEnd,
IsSpace), IsSpace),
TrimEnd TrimEnd

View File

@@ -56,7 +56,7 @@ be enough. The present library solves both problems.</p>
<tt>minmax</tt> <tt>minmax</tt>
as straightforward extensions of the C++ as straightforward extensions of the C++
standard. As it returns a pair of <tt>const&amp;</tt>, we must use the <a standard. As it returns a pair of <tt>const&amp;</tt>, we must use the <a
href=:../../../../tuple/index.html>Boost.tuple</a> library to construct such href="../../tuple/index.html">Boost.tuple</a> library to construct such
pairs. (Please note: the intent is not to fix the known defaults of pairs. (Please note: the intent is not to fix the known defaults of
<tt>std::min</tt> <tt>std::min</tt>
and <tt>std::max</tt>, but to add one more algorithms that combines both; see the and <tt>std::max</tt>, but to add one more algorithms that combines both; see the

View File

@@ -102,7 +102,7 @@
struct simple_finder struct simple_finder
{ {
template&lt;typename ForwardIteratorT&gt; template&lt;typename ForwardIteratorT&gt;
boost::iterator_range&lt;ForwardIterator&gt; operator()( boost::iterator_range&lt;ForwardIteratorT&gt; operator()(
ForwardIteratorT Begin, ForwardIteratorT Begin,
ForwardIteratorT End ) ForwardIteratorT End )
{ {

View File

@@ -114,10 +114,13 @@ public:
result_type operator()( const ReplaceT& Replace ) const result_type operator()( const ReplaceT& Replace ) const
{ {
SeqT r; SeqT r;
r.push_back( repeat_mark<value_type>() ); if(!Replace.empty())
r.push_back( *(Replace.begin()) ); {
r.push_back( value_type( Replace.size() ) ); r.push_back( repeat_mark<value_type>() );
r.push_back( *(Replace.begin()) );
r.push_back( value_type( Replace.size() ) );
}
return r; return r;
} }
}; };
@@ -183,14 +186,18 @@ public:
template< typename ReplaceT > template< typename ReplaceT >
result_type operator()( const ReplaceT& Replace ) const 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; 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; return r;
} }

View File

@@ -96,10 +96,29 @@ void predicate_test()
} }
template<typename Pred, typename Input>
void test_pred(const Pred& pred, const Input& input, bool bYes)
{
// test assignment operator
Pred pred1=pred;
pred1=pred;
pred1=pred1;
if(bYes)
{
BOOST_CHECK( all( input, pred ) );
BOOST_CHECK( all( input, pred1 ) );
}
else
{
BOOST_CHECK( !all( input, pred ) );
BOOST_CHECK( !all( input, pred1 ) );
}
}
#define TEST_CLASS( Pred, YesInput, NoInput )\ #define TEST_CLASS( Pred, YesInput, NoInput )\
{\ {\
BOOST_CHECK( all( string(YesInput), Pred ) );\ test_pred(Pred, YesInput, true); \
BOOST_CHECK( !all( string(NoInput), Pred ) );\ test_pred(Pred, NoInput, false); \
} }
void classification_test() void classification_test()
@@ -121,6 +140,14 @@ void classification_test()
TEST_CLASS( !is_classified(std::ctype_base::space), "...", "..\n\r\t " ); 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" ); 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 #undef TEST_CLASS

View File

@@ -120,6 +120,7 @@ void replace_all_test()
{ {
// replace all // replace all
TEST_ALGO( replace_all, "1abc3abc2", string("abc") C_ string("YYY"), string("1YYY3YYY2") ); 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( 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("Z"), string("1Z3Z2") );
TEST_ALGO( replace_all, "1abc3abc2", string("abc") C_ string("XXXX"), string("1XXXX3XXXX2") ); TEST_ALGO( replace_all, "1abc3abc2", string("abc") C_ string("XXXX"), string("1XXXX3XXXX2") );