forked from boostorg/algorithm
Compare commits
6 Commits
svn-branch
...
svn-branch
Author | SHA1 | Date | |
---|---|---|---|
4c72b78551 | |||
6702b04019 | |||
4e17ef2b40 | |||
f62e23a14c | |||
8ff3ace362 | |||
a232c948bf |
22
CMakeLists.txt
Normal file
22
CMakeLists.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# This file was automatically generated from the original CMakeLists.txt file
|
||||||
|
# Add a variable to hold the headers for the library
|
||||||
|
set (lib_headers
|
||||||
|
algorithm
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add a library target to the build system
|
||||||
|
boost_library_project(
|
||||||
|
algorithm
|
||||||
|
# SRCDIRS
|
||||||
|
TESTDIRS minmax/test string/test
|
||||||
|
HEADERS ${lib_headers}
|
||||||
|
# DOCDIRS
|
||||||
|
DESCRIPTION "A library of various algorithms."
|
||||||
|
MODULARIZED
|
||||||
|
AUTHORS "Pavol Droba <droba -at- topmail.sk>"
|
||||||
|
"Herve Bronnimann <hbr -at- poly.edu>"
|
||||||
|
# MAINTAINERS
|
||||||
|
)
|
||||||
|
|
||||||
|
|
@ -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>
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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 )
|
||||||
{
|
{
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 -----------------------------------------------//
|
||||||
|
@ -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)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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=
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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&</tt>, we must use the <a
|
standard. As it returns a pair of <tt>const&</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
|
||||||
|
8
minmax/test/CMakeLists.txt
Normal file
8
minmax/test/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#-- Needed include directories for the tests
|
||||||
|
boost_test_add_dependent_includes("utility;detail;config;test;mpl;bind;type_traits;static_assert;preprocessor;array;iterator;timer;tuple;range")
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
boost_test_run(minmax_element_test)
|
||||||
|
boost_test_run(minmax_test)
|
1
module.cmake
Normal file
1
module.cmake
Normal file
@ -0,0 +1 @@
|
|||||||
|
boost_module(algorithm DEPENDS regex concept_check)
|
@ -102,7 +102,7 @@
|
|||||||
struct simple_finder
|
struct simple_finder
|
||||||
{
|
{
|
||||||
template<typename ForwardIteratorT>
|
template<typename ForwardIteratorT>
|
||||||
boost::iterator_range<ForwardIterator> operator()(
|
boost::iterator_range<ForwardIteratorT> operator()(
|
||||||
ForwardIteratorT Begin,
|
ForwardIteratorT Begin,
|
||||||
ForwardIteratorT End )
|
ForwardIteratorT End )
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
16
string/test/CMakeLists.txt
Normal file
16
string/test/CMakeLists.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#-- Needed include directories for the tests
|
||||||
|
boost_test_add_dependent_includes("utility;detail;config;test;mpl;bind;type_traits;static_assert;preprocessor;array;iterator;exception;range;timer")
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
boost_test_run(trim_test)
|
||||||
|
|
||||||
|
boost_test_run(conv_test)
|
||||||
|
boost_test_run(predicate_test)
|
||||||
|
boost_test_run(find_test)
|
||||||
|
boost_test_run(split_test)
|
||||||
|
boost_test_run(join_test)
|
||||||
|
boost_test_run(replace_test)
|
||||||
|
boost_test_run(regex_test DEPENDS boost_regex SHARED)
|
||||||
|
|
@ -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
|
||||||
|
@ -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") );
|
||||||
|
Reference in New Issue
Block a user