Compare commits

..

75 Commits

Author SHA1 Message Date
dff650d749 Branch to work on filename handling without disturbing trunk.
[SVN r68345]
2011-01-21 09:17:08 +00:00
caea7bd125 trim_all test fixed
[SVN r68173]
2011-01-15 18:37:46 +00:00
81b04cde96 Revert [67111] (addition of boost/detail/iomanip.hpp) and all the commits that depend on it. ([68137], [68140], [68141], [68154], and [68165]).
[SVN r68168]
2011-01-15 08:11:51 +00:00
276073ca64 tabs removed
[SVN r68162]
2011-01-14 23:12:32 +00:00
a7f5bdd781 trim_all algorithm added
[SVN r68161]
2011-01-14 23:06:14 +00:00
0c0a866f07 Replacing the use of <iomanip> with <boost/detail/iomanip.hpp> across Boost.
On Linux, GNU's libstdc++, which is the default stdlib for icc and clang,
cannot parse the <iomanip> header in version 4.5+ (which thankfully neither
compiler advises the use of yet), as it's original C++98-friendly
implementation has been replaced with a gnu++0x implementation.
<boost/detail/iomanip.hpp> is a portable implementation of <iomanip>, providing
boost::detail::setfill, boost::detail::setbase, boost::detail::setw,
boost::detail::setprecision, boost::detail::setiosflags and
boost::detail::resetiosflags. 



[SVN r68140]
2011-01-14 02:35:58 +00:00
9d25072f2f dissect formatter and tests added
[SVN r68124]
2011-01-13 21:21:37 +00:00
823b199df3 Fix typo. Fixes #4937.
[SVN r67106]
2010-12-08 17:37:52 +00:00
fecd440527 Fix some links I missed in string algorithms
[SVN r66278]
2010-10-30 15:53:41 +00:00
3325d3a3f8 Link fixes.
[SVN r66273]
2010-10-30 14:32:50 +00:00
ebf104c127 test for empty string split added
[SVN r66221]
2010-10-27 20:42:22 +00:00
3b76763807 fixed the empty string handling for the split iterator
[SVN r66220]
2010-10-27 20:40:37 +00:00
62df1eb048 Fix #4551,#4553,#4575 by removing unused parameter.
[SVN r65004]
2010-08-25 20:01:38 +00:00
f5dd47883f Update various libraries' documentation build.
Mostly to use the images and css files under doc/src instead of
doc/html, usually be deleting the settings in order to use the defaults.
Also add 'boost.root' to some builds in order to fix links which rely on
it.

[SVN r63146]
2010-06-20 18:00:48 +00:00
9d68c4280c Fix license per inspection report.
[SVN r62814]
2010-06-11 19:52:26 +00:00
1e8b3ee752 Make to_upperF and to_lowerF assignable. Fixes #3161.
[SVN r62697]
2010-06-09 23:23:56 +00:00
42147c8385 Copy m_bEof in the split_iterator copy constructor. Fixes #4271
[SVN r62696]
2010-06-09 23:12:56 +00:00
672775545d Avoid calling the formatter with an invalid match. Fixes #2777
[SVN r62695]
2010-06-09 23:04:24 +00:00
46ed1bf987 Assign the iterator returned by std::copy back to Output, so that string algorithms will work with iterators other than inserters
[SVN r62694]
2010-06-09 21:12:06 +00:00
6289ed7f98 Trim the correct string. Fixes #3860
[SVN r62692]
2010-06-09 20:42:46 +00:00
8e97668b1f Tail not head. Fixes #3314
[SVN r62690]
2010-06-09 20:31:26 +00:00
e7c23d2f13 Tail not head. Fixes #2124
[SVN r62689]
2010-06-09 20:26:36 +00:00
a1e7512012 Use result_type instead of sig for predicates. Fixes #2868
[SVN r62688]
2010-06-09 20:16:21 +00:00
31b5842441 Typo.
[SVN r62461]
2010-06-06 07:18:24 +00:00
4515bc182e Fix example. Fixes #4206
[SVN r61931]
2010-05-12 12:56:16 +00:00
7e2e6856cc Remove duplicate closing angle brackets. Fixes #4198
[SVN r61856]
2010-05-08 18:27:44 +00:00
235c81be61 Fixed various issues in docs (mostly duplicate bookmarks and broken links) found by inspect tool
[SVN r61437]
2010-04-20 18:49:18 +00:00
1eb3d83534 Fix links for string algorithm to range documentation.
[SVN r61351]
2010-04-18 12:17:36 +00:00
8f2b8d4888 rm cmake from trunk. I'm not entirely sure this is necessary to satisfy the inspect script, but I'm not taking any chances, and it is easy to put back
[SVN r56942]
2009-10-17 02:07:38 +00:00
6c0f953c01 GCC compilation errors caused be the recent update fixed
[SVN r55434]
2009-08-06 19:52:08 +00:00
e439792494 Merged ADL protection patch from Neil Groves
[SVN r55424]
2009-08-05 20:01:10 +00:00
236b142308 Copyrights on CMakeLists.txt to keep them from clogging up the inspect
reports.  This is essentially the same commit as r55095 on the release
branch.



[SVN r55159]
2009-07-26 00:49:56 +00:00
9bad789175 Fix operator precedence error in documentation. Fixes #2122
[SVN r53520]
2009-06-01 00:47:03 +00:00
d84f81d841 Fixed most tab and min/max issues from trunk inspection report
[SVN r53141]
2009-05-20 19:19:00 +00:00
ce98e8b87e Qualify minmax with boost:: to avoid ambiguity with std::minmax. Fixes #3023
[SVN r53062]
2009-05-17 00:39:22 +00:00
e8a2596637 Add PDF generation options to fix external links to point to the web site.
Added a few more Boostbook based libs that were missed first time around.
Fixed PDF naming issues.

[SVN r51284]
2009-02-17 10:05:58 +00:00
7b2754b937 Fix copy/paste error in minmax docs. Fixes #2500
[SVN r51045]
2009-02-06 03:45:09 +00:00
784402e5c0 Updating dependency information for modularized libraries.
[SVN r49628]
2008-11-07 17:05:27 +00:00
1188575e7b Updating CMake files to latest trunk. Added dependency information for regression tests and a few new macros for internal use.
[SVN r49627]
2008-11-07 17:02:56 +00:00
bff2a1e112 Continuing merge of CMake build system files into trunk with the encouragement of Doug Gregor
[SVN r49510]
2008-11-01 13:15:41 +00:00
6d5e7b5a04 self assignment problem in is_any_ofF fixed
[SVN r48281]
2008-08-21 14:46:15 +00:00
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
1f5542b44c predicate test improvements
[SVN r48199]
2008-08-18 18:33:40 +00:00
baf3dd99e2 fox for allocation bug in is_any_ofF
[SVN r48198]
2008-08-18 18:32:51 +00:00
7299b29bf8 fixind the problems in is_any_ofF spotted by gcc
[SVN r46498]
2008-06-18 22:07:32 +00:00
539c170b9d aditional tests added
[SVN r46497]
2008-06-18 21:55:38 +00:00
c81ee948b7 is_any_ofF performance improvements
tabs removed



[SVN r46496]
2008-06-18 21:54:06 +00:00
ba5e4c30c6 fixed the rle example crash
[SVN r46463]
2008-06-17 21:58:58 +00:00
cd26ed816c patch from ticket #1152 applied
[SVN r46461]
2008-06-17 21:21:33 +00:00
4e15767bed simple_finder example fixed
[SVN r46460]
2008-06-17 21:13:25 +00:00
9fa2f90db4 begin() and end() calls made fully qualified
[SVN r46459]
2008-06-17 21:04:00 +00:00
35f317aeac unnecessary typedefs removed
[SVN r46458]
2008-06-17 20:31:41 +00:00
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
346f032be2 Quote href values - our tools don't support unquoted values.
[SVN r45283]
2008-05-11 13:49:20 +00:00
a389d768c4 Fix broken copyright urls. Fixes #1573.
[SVN r43422]
2008-02-27 18:51:14 +00:00
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
5b24f31486 merging changes from 1.34
[SVN r40698]
2007-11-02 21:00:08 +00:00
b25d6511b3 merging changes from 1.34
[SVN r40697]
2007-11-02 20:55:26 +00:00
1541a554f5 changed range_result_iterator to range_iterator
[SVN r40518]
2007-10-27 22:52:29 +00:00
7a97b3390e Added missing include.
[SVN r39586]
2007-09-28 07:19:29 +00:00
6e5a7497ae Added missing include.
[SVN r39519]
2007-09-25 08:46:31 +00:00
f0b8b60379 Update
[SVN r38522]
2007-08-08 19:24:04 +00:00
66019abb2f Update
[SVN r38521]
2007-08-08 19:23:38 +00:00
8758222006 Remove V1 Jamfiles
[SVN r38516]
2007-08-08 19:02:26 +00:00
4eef56761a find/split iterator tests added
[SVN r38126]
2007-07-01 22:24:29 +00:00
b94a3fbfba adapting to new range interface
[SVN r38125]
2007-07-01 22:23:55 +00:00
614cc2ebab adapting to new range interface
[SVN r38123]
2007-07-01 13:29:56 +00:00
869660ed14 adapted to the new range interface
[SVN r38122]
2007-07-01 13:12:57 +00:00
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
26aa37733b Fix a few more references to *.boosbook instead of *.xml generated files.
[SVN r37465]
2007-04-17 17:13:35 +00:00
f1e60579c2 documentation typo fixed
[SVN r36843]
2007-01-30 07:59:28 +00:00
389dd3c863 Add copyright, license
[SVN r35905]
2006-11-07 19:11:57 +00:00
f23f61ae9b License added to the xml doc files
[SVN r34895]
2006-08-16 07:17:49 +00:00
608112b112 boost guidelines (mainly from inspect tool: tabs, license reference text, etc.)
[SVN r34752]
2006-07-27 10:27:37 +00:00
b21b54dc4e Applying patch from Nicola Musatti
[SVN r33709]
2006-04-16 09:46:34 +00:00
40 changed files with 1055 additions and 564 deletions

View File

@ -59,7 +59,7 @@ namespace boost {
{
return ::boost::algorithm::detail::transform_range_copy(
Output,
as_literal(Input),
::boost::as_literal(Input),
::boost::algorithm::detail::to_lowerF<
typename range_value<RangeT>::type >(Loc));
}
@ -93,7 +93,7 @@ namespace boost {
const std::locale& Loc=std::locale())
{
::boost::algorithm::detail::transform_range(
as_literal(Input),
::boost::as_literal(Input),
::boost::algorithm::detail::to_lowerF<
typename range_value<WritableRangeT>::type >(Loc));
}
@ -124,7 +124,7 @@ namespace boost {
{
return ::boost::algorithm::detail::transform_range_copy(
Output,
as_literal(Input),
::boost::as_literal(Input),
::boost::algorithm::detail::to_upperF<
typename range_value<RangeT>::type >(Loc));
}
@ -158,7 +158,7 @@ namespace boost {
const std::locale& Loc=std::locale())
{
::boost::algorithm::detail::transform_range(
as_literal(Input),
::boost::as_literal(Input),
::boost::algorithm::detail::to_upperF<
typename range_value<WritableRangeT>::type >(Loc));
}

View File

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

View File

@ -31,7 +31,7 @@ namespace boost {
struct to_lowerF : public std::unary_function<CharT, CharT>
{
// Constructor
to_lowerF( const std::locale& Loc ) : m_Loc( Loc ) {}
to_lowerF( const std::locale& Loc ) : m_Loc( &Loc ) {}
// Operation
CharT operator ()( CharT Ch ) const
@ -39,11 +39,11 @@ namespace boost {
#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
return std::tolower( Ch);
#else
return std::tolower<CharT>( Ch, m_Loc );
return std::tolower<CharT>( Ch, *m_Loc );
#endif
}
private:
const std::locale& m_Loc;
const std::locale* m_Loc;
};
// a toupper functor
@ -51,7 +51,7 @@ namespace boost {
struct to_upperF : public std::unary_function<CharT, CharT>
{
// Constructor
to_upperF( const std::locale& Loc ) : m_Loc( Loc ) {}
to_upperF( const std::locale& Loc ) : m_Loc( &Loc ) {}
// Operation
CharT operator ()( CharT Ch ) const
@ -59,11 +59,11 @@ namespace boost {
#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
return std::toupper( Ch);
#else
return std::toupper<CharT>( Ch, m_Loc );
return std::toupper<CharT>( Ch, *m_Loc );
#endif
}
private:
const std::locale& m_Loc;
const std::locale* m_Loc;
};
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
@ -105,10 +105,10 @@ namespace boost {
FunctorT Functor)
{
return SequenceT(
make_transform_iterator(
::boost::make_transform_iterator(
::boost::begin(Input),
Functor),
make_transform_iterator(
::boost::make_transform_iterator(
::boost::end(Input),
Functor));
}

View File

@ -32,8 +32,8 @@ namespace boost {
struct is_classifiedF :
public predicate_facade<is_classifiedF>
{
// Boost.Lambda support
template <class Args> struct sig { typedef bool type; };
// Boost.ResultOf support
typedef bool result_type;
// Constructor from a locale
is_classifiedF(std::ctype_base::mask Type, std::locale const & Loc = std::locale()) :
@ -72,8 +72,8 @@ namespace boost {
typedef typename ::boost::remove_const<CharT>::type set_value_type;
public:
// Boost.Lambda support
template <class Args> struct sig { typedef bool type; };
// Boost.ResultOf support
typedef bool result_type;
// Constructor
template<typename RangeT>
@ -171,7 +171,7 @@ namespace boost {
// Check what kind of storage are we using right now
if(use_fixed_storage(m_Size))
{
// Using fixed storage, allocate new
// Using fixed storage, allocate new
set_value_type* pTemp=new set_value_type[Other.m_Size];
DestStorage=pTemp;
m_Storage.m_dynSet=pTemp;
@ -253,8 +253,8 @@ namespace boost {
struct is_from_rangeF :
public predicate_facade< is_from_rangeF<CharT> >
{
// Boost.Lambda support
template <class Args> struct sig { typedef bool type; };
// Boost.ResultOf support
typedef bool result_type;
// Constructor
is_from_rangeF( CharT From, CharT To ) : m_From(From), m_To(To) {}
@ -278,8 +278,8 @@ namespace boost {
{
public:
// Boost.Lambda support
template <class Args> struct sig { typedef bool type; };
// Boost.ResultOf support
typedef bool result_type;
// Constructor
pred_andF( Pred1T Pred1, Pred2T Pred2 ) :
@ -303,8 +303,8 @@ namespace boost {
public predicate_facade< pred_orF<Pred1T,Pred2T> >
{
public:
// Boost.Lambda support
template <class Args> struct sig { typedef bool type; };
// Boost.ResultOf support
typedef bool result_type;
// Constructor
pred_orF( Pred1T Pred1, Pred2T Pred2 ) :
@ -328,8 +328,8 @@ namespace boost {
public predicate_facade< pred_notF<PredT> >
{
public:
// Boost.Lambda support
template <class Args> struct sig { typedef bool type; };
// Boost.ResultOf support
typedef bool result_type;
// Constructor
pred_notF( PredT Pred ) : m_Pred(Pred) {}

View File

@ -24,26 +24,7 @@ namespace boost {
// find_format_copy (iterator variant) implementation -------------------------------//
template<
typename OutputIteratorT,
typename InputT,
typename FormatterT,
typename FindResultT >
inline OutputIteratorT find_format_copy_impl(
OutputIteratorT Output,
const InputT& Input,
FormatterT Formatter,
const FindResultT& FindResult )
{
return find_format_copy_impl2(
Output,
Input,
Formatter,
FindResult,
Formatter(FindResult) );
}
template<
template<
typename OutputIteratorT,
typename InputT,
typename FormatterT,
@ -68,40 +49,48 @@ namespace boost {
if ( !M )
{
// Match not found - return original sequence
std::copy( ::boost::begin(Input), ::boost::end(Input), Output );
Output = std::copy( ::boost::begin(Input), ::boost::end(Input), Output );
return Output;
}
// Copy the beginning of the sequence
std::copy( ::boost::begin(Input), ::boost::begin(M), Output );
Output = std::copy( ::boost::begin(Input), ::boost::begin(M), Output );
// Format find result
// Copy formated result
std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
// Copy the rest of the sequence
std::copy( M.end(), ::boost::end(Input), Output );
Output = std::copy( M.end(), ::boost::end(Input), Output );
return Output;
}
// find_format_copy implementation --------------------------------------------------//
template<
typename InputT,
typename OutputIteratorT,
typename InputT,
typename FormatterT,
typename FindResultT >
inline InputT find_format_copy_impl(
inline OutputIteratorT find_format_copy_impl(
OutputIteratorT Output,
const InputT& Input,
FormatterT Formatter,
const FindResultT& FindResult)
{
return find_format_copy_impl2(
Input,
Formatter,
FindResult,
Formatter(FindResult) );
const FindResultT& FindResult )
{
if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
return ::boost::algorithm::detail::find_format_copy_impl2(
Output,
Input,
Formatter,
FindResult,
Formatter(FindResult) );
} else {
return std::copy( ::boost::begin(Input), ::boost::end(Input), Output );
}
}
template<
// find_format_copy implementation --------------------------------------------------//
template<
typename InputT,
typename FormatterT,
typename FindResultT,
@ -138,24 +127,28 @@ namespace boost {
return Output;
}
// replace implementation ----------------------------------------------------//
template<
typename InputT,
template<
typename InputT,
typename FormatterT,
typename FindResultT >
inline void find_format_impl(
InputT& Input,
inline InputT find_format_copy_impl(
const InputT& Input,
FormatterT Formatter,
const FindResultT& FindResult)
{
find_format_impl2(
Input,
Formatter,
FindResult,
Formatter(FindResult) );
if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
return ::boost::algorithm::detail::find_format_copy_impl2(
Input,
Formatter,
FindResult,
Formatter(FindResult) );
} else {
return Input;
}
}
// replace implementation ----------------------------------------------------//
template<
typename InputT,
typename FormatterT,
@ -183,7 +176,25 @@ namespace boost {
}
// Replace match
replace( Input, M.begin(), M.end(), M.format_result() );
::boost::algorithm::detail::replace( Input, M.begin(), M.end(), M.format_result() );
}
template<
typename InputT,
typename FormatterT,
typename FindResultT >
inline void find_format_impl(
InputT& Input,
FormatterT Formatter,
const FindResultT& FindResult)
{
if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
::boost::algorithm::detail::find_format_impl2(
Input,
Formatter,
FindResult,
Formatter(FindResult) );
}
}
} // namespace detail

View File

@ -24,29 +24,7 @@ namespace boost {
// find_format_all_copy (iterator variant) implementation ---------------------------//
template<
typename OutputIteratorT,
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT >
inline OutputIteratorT find_format_all_copy_impl(
OutputIteratorT Output,
const InputT& Input,
FinderT Finder,
FormatterT Formatter,
const FindResultT& FindResult )
{
return find_format_all_copy_impl2(
Output,
Input,
Finder,
Formatter,
FindResult,
Formatter(FindResult) );
}
template<
template<
typename OutputIteratorT,
typename InputT,
typename FinderT,
@ -79,9 +57,9 @@ namespace boost {
while( M )
{
// Copy the beginning of the sequence
std::copy( LastMatch, M.begin(), Output );
Output = std::copy( LastMatch, M.begin(), Output );
// Copy formated result
std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
// Proceed to the next match
LastMatch=M.end();
@ -89,33 +67,40 @@ namespace boost {
}
// Copy the rest of the sequence
std::copy( LastMatch, ::boost::end(Input), Output );
Output = std::copy( LastMatch, ::boost::end(Input), Output );
return Output;
}
// find_format_all_copy implementation ----------------------------------------------//
template<
typename InputT,
typename OutputIteratorT,
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT >
inline InputT find_format_all_copy_impl(
inline OutputIteratorT find_format_all_copy_impl(
OutputIteratorT Output,
const InputT& Input,
FinderT Finder,
FormatterT Formatter,
const FindResultT& FindResult)
{
return find_format_all_copy_impl2(
Input,
Finder,
Formatter,
FindResult,
Formatter(FindResult) );
const FindResultT& FindResult )
{
if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
return ::boost::algorithm::detail::find_format_all_copy_impl2(
Output,
Input,
Finder,
Formatter,
FindResult,
Formatter(FindResult) );
} else {
return std::copy( ::boost::begin(Input), ::boost::end(Input), Output );
}
}
template<
// find_format_all_copy implementation ----------------------------------------------//
template<
typename InputT,
typename FinderT,
typename FormatterT,
@ -159,32 +144,36 @@ namespace boost {
}
// Copy the rest of the sequence
insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) );
::boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) );
return Output;
}
// find_format_all implementation ------------------------------------------------//
template<
typename InputT,
template<
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT >
inline void find_format_all_impl(
InputT& Input,
inline InputT find_format_all_copy_impl(
const InputT& Input,
FinderT Finder,
FormatterT Formatter,
FindResultT FindResult)
const FindResultT& FindResult)
{
find_format_all_impl2(
Input,
Finder,
Formatter,
FindResult,
Formatter(FindResult) );
if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
return ::boost::algorithm::detail::find_format_all_copy_impl2(
Input,
Finder,
Formatter,
FindResult,
Formatter(FindResult) );
} else {
return Input;
}
}
// find_format_all implementation ------------------------------------------------//
template<
typename InputT,
typename FinderT,
@ -230,14 +219,14 @@ namespace boost {
SearchIt=M.end();
// Copy formated replace to the storage
copy_to_storage( Storage, M.format_result() );
::boost::algorithm::detail::copy_to_storage( Storage, M.format_result() );
// Find range for a next match
M=Finder( SearchIt, ::boost::end(Input) );
}
// process the last segment
InsertIt=process_segment(
InsertIt=::boost::algorithm::detail::process_segment(
Storage,
Input,
InsertIt,
@ -247,12 +236,33 @@ namespace boost {
if ( Storage.empty() )
{
// Truncate input
erase( Input, InsertIt, ::boost::end(Input) );
::boost::algorithm::detail::erase( Input, InsertIt, ::boost::end(Input) );
}
else
{
// Copy remaining data to the end of input
insert( Input, ::boost::end(Input), Storage.begin(), Storage.end() );
::boost::algorithm::detail::insert( Input, ::boost::end(Input), Storage.begin(), Storage.end() );
}
}
template<
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT >
inline void find_format_all_impl(
InputT& Input,
FinderT Finder,
FormatterT Formatter,
FindResultT FindResult)
{
if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
::boost::algorithm::detail::find_format_all_impl2(
Input,
Finder,
Formatter,
FindResult,
Formatter(FindResult) );
}
}

View File

@ -52,7 +52,9 @@ namespace boost {
find_format_store& operator=( FindResultT FindResult )
{
iterator_range<ForwardIteratorT>::operator=(FindResult);
m_FormatResult=m_Formatter(FindResult);
if( !this->empty() ) {
m_FormatResult=m_Formatter(FindResult);
}
return *this;
}
@ -68,6 +70,15 @@ namespace boost {
const formatter_type& m_Formatter;
};
template<typename InputT, typename FindResultT>
bool check_find_result(InputT&, FindResultT& FindResult)
{
typedef BOOST_STRING_TYPENAME
range_const_iterator<InputT>::type input_iterator_type;
iterator_range<input_iterator_type> ResultRange(FindResult);
return !ResultRange.empty();
}
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
#pragma warning(pop)
#endif

View File

@ -382,7 +382,7 @@ namespace boost {
typedef BOOST_STRING_TYPENAME boost::detail::
iterator_traits<ForwardIteratorT>::iterator_category category;
return find_head_impl( Begin, End, N, category() );
return ::boost::algorithm::detail::find_head_impl( Begin, End, N, category() );
}
template< typename ForwardIteratorT >
@ -456,7 +456,7 @@ namespace boost {
typedef BOOST_STRING_TYPENAME boost::detail::
iterator_traits<ForwardIteratorT>::iterator_category category;
return find_tail_impl( Begin, End, N, category() );
return ::boost::algorithm::detail::find_tail_impl( Begin, End, N, category() );
}
@ -484,14 +484,14 @@ namespace boost {
{
if(m_N>=0)
{
return find_head_impl( Begin, End, m_N );
return ::boost::algorithm::detail::find_head_impl( Begin, End, m_N );
}
else
{
iterator_range<ForwardIteratorT> Res=
find_tail_impl( Begin, End, -m_N );
::boost::algorithm::detail::find_tail_impl( Begin, End, -m_N );
return make_iterator_range(Begin, Res.begin());
return ::boost::make_iterator_range(Begin, Res.begin());
}
}
@ -522,14 +522,14 @@ namespace boost {
{
if(m_N>=0)
{
return find_tail_impl( Begin, End, m_N );
return ::boost::algorithm::detail::find_tail_impl( Begin, End, m_N );
}
else
{
iterator_range<ForwardIteratorT> Res=
find_head_impl( Begin, End, -m_N );
::boost::algorithm::detail::find_head_impl( Begin, End, -m_N );
return make_iterator_range(Res.end(), End);
return ::boost::make_iterator_range(Res.end(), End);
}
}

View File

@ -98,7 +98,7 @@ namespace boost {
// instantiate match result
match_results<input_iterator_type> result;
// search for a match
if ( regex_search( Begin, End, result, m_Rx, m_MatchFlags ) )
if ( ::boost::regex_search( Begin, End, result, m_Rx, m_MatchFlags ) )
{
// construct a result
return result_type( result );

View File

@ -87,6 +87,31 @@ namespace boost {
}
};
// dissect format functor ----------------------------------------------------//
// dissect format functor
template<typename FinderT>
struct dissect_formatF
{
public:
// Construction
dissect_formatF(FinderT Finder) :
m_Finder(Finder) {}
// Operation
template<typename RangeT>
inline iterator_range<
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
operator()(const RangeT& Replace) const
{
return m_Finder(::boost::begin(Replace), ::boost::end(Replace));
}
private:
FinderT m_Finder;
};
} // namespace detail
} // namespace algorithm
} // namespace boost

View File

@ -63,7 +63,7 @@ namespace boost {
iterator_range<ForwardIterator1T> Result
=last_finder(
make_iterator_range(SubBegin, SubEnd),
::boost::make_iterator_range(SubBegin, SubEnd),
Comp)(Begin, End);
return !Result.empty() && Result.end()==End;

View File

@ -68,7 +68,7 @@ namespace boost {
ForwardIteratorT SegmentEnd )
{
// Copy data from the storage until the beginning of the segment
ForwardIteratorT It=move_from_storage( Storage, InsertIt, SegmentBegin );
ForwardIteratorT It=::boost::algorithm::detail::move_from_storage( Storage, InsertIt, SegmentBegin );
// 3 cases are possible :
// a) Storage is empty, It==SegmentBegin
@ -125,7 +125,7 @@ namespace boost {
{
// Call replace to do the job
replace( Input, InsertIt, SegmentBegin, Storage );
::boost::algorithm::detail::replace( Input, InsertIt, SegmentBegin, Storage );
// Empty the storage
Storage.clear();
// Iterators were not changed, simply return the end of segment

View File

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

View File

@ -20,36 +20,6 @@ namespace boost {
// trim iterator helper -----------------------------------------------//
// Search for first non matching character from the beginning of the sequence
template< typename ForwardIteratorT, typename PredicateT >
inline ForwardIteratorT trim_begin(
ForwardIteratorT InBegin,
ForwardIteratorT InEnd,
PredicateT IsSpace )
{
ForwardIteratorT It=InBegin;
for(; It!=InEnd; ++It )
{
if (!IsSpace(*It))
return It;
}
return It;
}
// Search for first non matching character from the end of the sequence
template< typename ForwardIteratorT, typename PredicateT >
inline ForwardIteratorT trim_end(
ForwardIteratorT InBegin,
ForwardIteratorT InEnd,
PredicateT IsSpace )
{
typedef BOOST_STRING_TYPENAME boost::detail::
iterator_traits<ForwardIteratorT>::iterator_category category;
return trim_end_iter_select( InBegin, InEnd, IsSpace, category() );
}
template< typename ForwardIteratorT, typename PredicateT >
inline ForwardIteratorT trim_end_iter_select(
ForwardIteratorT InBegin,
@ -86,6 +56,36 @@ namespace boost {
return InBegin;
}
// Search for first non matching character from the beginning of the sequence
template< typename ForwardIteratorT, typename PredicateT >
inline ForwardIteratorT trim_begin(
ForwardIteratorT InBegin,
ForwardIteratorT InEnd,
PredicateT IsSpace )
{
ForwardIteratorT It=InBegin;
for(; It!=InEnd; ++It )
{
if (!IsSpace(*It))
return It;
}
return It;
}
// Search for first non matching character from the end of the sequence
template< typename ForwardIteratorT, typename PredicateT >
inline ForwardIteratorT trim_end(
ForwardIteratorT InBegin,
ForwardIteratorT InEnd,
PredicateT IsSpace )
{
typedef BOOST_STRING_TYPENAME boost::detail::
iterator_traits<ForwardIteratorT>::iterator_category category;
return ::boost::algorithm::detail::trim_end_iter_select( InBegin, InEnd, IsSpace, category() );
}
} // namespace detail
} // namespace algorithm

View File

@ -54,11 +54,11 @@ namespace boost {
BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type>& SearchRange )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
range_finder(SearchRange),
empty_formatter(Input) );
::boost::algorithm::range_finder(SearchRange),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase range algorithm
@ -72,10 +72,10 @@ namespace boost {
BOOST_STRING_TYPENAME
range_const_iterator<SequenceT>::type>& SearchRange )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
range_finder(SearchRange),
empty_formatter(Input) );
::boost::algorithm::range_finder(SearchRange),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase range algorithm
@ -93,10 +93,10 @@ namespace boost {
BOOST_STRING_TYPENAME
range_iterator<SequenceT>::type>& SearchRange )
{
find_format(
::boost::algorithm::find_format(
Input,
range_finder(SearchRange),
empty_formatter(Input) );
::boost::algorithm::range_finder(SearchRange),
::boost::algorithm::empty_formatter(Input) );
}
// erase_first --------------------------------------------------------//
@ -124,11 +124,11 @@ namespace boost {
const Range1T& Input,
const Range2T& Search )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
first_finder(Search),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase first algorithm
@ -140,10 +140,10 @@ namespace boost {
const SequenceT& Input,
const RangeT& Search )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
first_finder(Search),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase first algorithm
@ -159,10 +159,10 @@ namespace boost {
SequenceT& Input,
const RangeT& Search )
{
find_format(
::boost::algorithm::find_format(
Input,
first_finder(Search),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::empty_formatter(Input) );
}
// erase_first ( case insensitive ) ------------------------------------//
@ -193,11 +193,11 @@ namespace boost {
const Range2T& Search,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
first_finder(Search, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase first algorithm ( case insensitive )
@ -210,10 +210,10 @@ namespace boost {
const RangeT& Search,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
first_finder(Search, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase first algorithm ( case insensitive )
@ -231,10 +231,10 @@ namespace boost {
const RangeT& Search,
const std::locale& Loc=std::locale() )
{
find_format(
::boost::algorithm::find_format(
Input,
first_finder(Search, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
// erase_last --------------------------------------------------------//
@ -262,11 +262,11 @@ namespace boost {
const Range1T& Input,
const Range2T& Search )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
last_finder(Search),
empty_formatter(Input) );
::boost::algorithm::last_finder(Search),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase last algorithm
@ -278,10 +278,10 @@ namespace boost {
const SequenceT& Input,
const RangeT& Search )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
last_finder(Search),
empty_formatter(Input) );
::boost::algorithm::last_finder(Search),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase last algorithm
@ -297,10 +297,10 @@ namespace boost {
SequenceT& Input,
const RangeT& Search )
{
find_format(
::boost::algorithm::find_format(
Input,
last_finder(Search),
empty_formatter(Input) );
::boost::algorithm::last_finder(Search),
::boost::algorithm::empty_formatter(Input) );
}
// erase_last ( case insensitive ) ------------------------------------//
@ -331,11 +331,11 @@ namespace boost {
const Range2T& Search,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
last_finder(Search, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::last_finder(Search, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase last algorithm ( case insensitive )
@ -348,10 +348,10 @@ namespace boost {
const RangeT& Search,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
last_finder(Search, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::last_finder(Search, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase last algorithm ( case insensitive )
@ -369,10 +369,10 @@ namespace boost {
const RangeT& Search,
const std::locale& Loc=std::locale() )
{
find_format(
::boost::algorithm::find_format(
Input,
last_finder(Search, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::last_finder(Search, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
// erase_nth --------------------------------------------------------------------//
@ -404,11 +404,11 @@ namespace boost {
const Range2T& Search,
int Nth )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
nth_finder(Search, Nth),
empty_formatter(Input) );
::boost::algorithm::nth_finder(Search, Nth),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase nth algorithm
@ -421,10 +421,10 @@ namespace boost {
const RangeT& Search,
int Nth )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
nth_finder(Search, Nth),
empty_formatter(Input) );
::boost::algorithm::nth_finder(Search, Nth),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase nth algorithm
@ -443,10 +443,10 @@ namespace boost {
const RangeT& Search,
int Nth )
{
find_format(
::boost::algorithm::find_format(
Input,
nth_finder(Search, Nth),
empty_formatter(Input) );
::boost::algorithm::nth_finder(Search, Nth),
::boost::algorithm::empty_formatter(Input) );
}
// erase_nth ( case insensitive ) ---------------------------------------------//
@ -480,11 +480,11 @@ namespace boost {
int Nth,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
nth_finder(Search, Nth, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase nth algorithm
@ -498,9 +498,9 @@ namespace boost {
int Nth,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
nth_finder(Search, Nth, is_iequal(Loc)),
::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),
empty_formatter(Input) );
}
@ -522,10 +522,10 @@ namespace boost {
int Nth,
const std::locale& Loc=std::locale() )
{
find_format(
::boost::algorithm::find_format(
Input,
nth_finder(Search, Nth, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
@ -555,11 +555,11 @@ namespace boost {
const Range1T& Input,
const Range2T& Search )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Output,
Input,
first_finder(Search),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase all algorithm
@ -571,10 +571,10 @@ namespace boost {
const SequenceT& Input,
const RangeT& Search )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Input,
first_finder(Search),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase all algorithm
@ -590,10 +590,10 @@ namespace boost {
SequenceT& Input,
const RangeT& Search )
{
find_format_all(
::boost::algorithm::find_format_all(
Input,
first_finder(Search),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::empty_formatter(Input) );
}
// erase_all ( case insensitive ) ------------------------------------//
@ -624,11 +624,11 @@ namespace boost {
const Range2T& Search,
const std::locale& Loc=std::locale() )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Output,
Input,
first_finder(Search, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase all algorithm ( case insensitive )
@ -641,10 +641,10 @@ namespace boost {
const RangeT& Search,
const std::locale& Loc=std::locale() )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Input,
first_finder(Search, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
//! Erase all algorithm ( case insensitive )
@ -662,10 +662,10 @@ namespace boost {
const RangeT& Search,
const std::locale& Loc=std::locale() )
{
find_format_all(
::boost::algorithm::find_format_all(
Input,
first_finder(Search, is_iequal(Loc)),
empty_formatter(Input) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::empty_formatter(Input) );
}
// erase_head --------------------------------------------------------------------//
@ -696,11 +696,11 @@ namespace boost {
const RangeT& Input,
int N )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
head_finder(N),
empty_formatter( Input ) );
::boost::algorithm::head_finder(N),
::boost::algorithm::empty_formatter( Input ) );
}
//! Erase head algorithm
@ -712,10 +712,10 @@ namespace boost {
const SequenceT& Input,
int N )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
head_finder(N),
empty_formatter( Input ) );
::boost::algorithm::head_finder(N),
::boost::algorithm::empty_formatter( Input ) );
}
//! Erase head algorithm
@ -734,10 +734,10 @@ namespace boost {
SequenceT& Input,
int N )
{
find_format(
::boost::algorithm::find_format(
Input,
head_finder(N),
empty_formatter( Input ) );
::boost::algorithm::head_finder(N),
::boost::algorithm::empty_formatter( Input ) );
}
// erase_tail --------------------------------------------------------------------//
@ -752,7 +752,7 @@ namespace boost {
\param Output An output iterator to which the result will be copied
\param Input An input string
\param N Length of the head.
\param N Length of the tail.
For N>=0, at most N characters are extracted.
For N<0, size(Input)-|N| characters are extracted.
\return An output iterator pointing just after the last inserted character or
@ -768,11 +768,11 @@ namespace boost {
const RangeT& Input,
int N )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
tail_finder(N),
empty_formatter( Input ) );
::boost::algorithm::tail_finder(N),
::boost::algorithm::empty_formatter( Input ) );
}
//! Erase tail algorithm
@ -784,10 +784,10 @@ namespace boost {
const SequenceT& Input,
int N )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
tail_finder(N),
empty_formatter( Input ) );
::boost::algorithm::tail_finder(N),
::boost::algorithm::empty_formatter( Input ) );
}
//! Erase tail algorithm
@ -797,7 +797,7 @@ namespace boost {
considered to be the tail. The input sequence is modified in-place.
\param Input An input string
\param N Length of the head
\param N Length of the tail
For N>=0, at most N characters are extracted.
For N<0, size(Input)-|N| characters are extracted.
*/
@ -806,10 +806,10 @@ namespace boost {
SequenceT& Input,
int N )
{
find_format(
::boost::algorithm::find_format(
Input,
tail_finder(N),
empty_formatter( Input ) );
::boost::algorithm::tail_finder(N),
::boost::algorithm::empty_formatter( Input ) );
}
} // namespace algorithm

View File

@ -53,7 +53,7 @@ namespace boost {
RangeT& Input,
const FinderT& Finder)
{
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(::boost::as_literal(Input));
return Finder(::boost::begin(lit_input),::boost::end(lit_input));
}
@ -81,7 +81,7 @@ namespace boost {
Range1T& Input,
const Range2T& Search)
{
return find(Input, first_finder(Search));
return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search));
}
//! Find first algorithm ( case insensitive )
@ -108,7 +108,7 @@ namespace boost {
const Range2T& Search,
const std::locale& Loc=std::locale())
{
return find(Input, first_finder(Search,is_iequal(Loc)));
return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search,is_iequal(Loc)));
}
// find_last -----------------------------------------------//
@ -134,7 +134,7 @@ namespace boost {
Range1T& Input,
const Range2T& Search)
{
return find(Input, last_finder(Search));
return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search));
}
//! Find last algorithm ( case insensitive )
@ -161,7 +161,7 @@ namespace boost {
const Range2T& Search,
const std::locale& Loc=std::locale())
{
return find(Input, last_finder(Search, is_iequal(Loc)));
return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search, is_iequal(Loc)));
}
// find_nth ----------------------------------------------------------------------//
@ -189,7 +189,7 @@ namespace boost {
const Range2T& Search,
int Nth)
{
return find(Input, nth_finder(Search,Nth));
return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth));
}
//! Find n-th algorithm ( case insensitive ).
@ -220,7 +220,7 @@ namespace boost {
int Nth,
const std::locale& Loc=std::locale())
{
return find(Input, nth_finder(Search,Nth,is_iequal(Loc)));
return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth,is_iequal(Loc)));
}
// find_head ----------------------------------------------------------------------//
@ -250,14 +250,14 @@ namespace boost {
RangeT& Input,
int N)
{
return find(Input, head_finder(N));
return ::boost::algorithm::find(Input, ::boost::algorithm::head_finder(N));
}
// find_tail ----------------------------------------------------------------------//
//! Find tail algorithm
/*!
Get the head of the input. Head is a suffix of the string of the
Get the tail of the input. Tail is a suffix of the string of the
given size. If the input is shorter then required, whole input if considered
to be the tail.
@ -281,7 +281,7 @@ namespace boost {
RangeT& Input,
int N)
{
return find(Input, tail_finder(N));
return ::boost::algorithm::find(Input, ::boost::algorithm::tail_finder(N));
}
// find_token --------------------------------------------------------------------//
@ -311,7 +311,7 @@ namespace boost {
PredicateT Pred,
token_compress_mode_type eCompress=token_compress_off)
{
return find(Input, token_finder(Pred, eCompress));
return ::boost::algorithm::find(Input, ::boost::algorithm::token_finder(Pred, eCompress));
}
} // namespace algorithm

View File

@ -62,15 +62,18 @@ namespace boost {
FormatterT Formatter )
{
// Concept check
function_requires<
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
function_requires<
BOOST_CONCEPT_ASSERT((
FinderConcept<
FinderT,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
));
BOOST_CONCEPT_ASSERT((
FormatterConcept<
FormatterT,
FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));
return detail::find_format_copy_impl(
Output,
@ -93,13 +96,16 @@ namespace boost {
FormatterT Formatter )
{
// Concept check
function_requires<
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
function_requires<
BOOST_CONCEPT_ASSERT((
FinderConcept<
FinderT,
BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
));
BOOST_CONCEPT_ASSERT((
FormatterConcept<
FormatterT,
FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
));
return detail::find_format_copy_impl(
Input,
@ -126,13 +132,16 @@ namespace boost {
FormatterT Formatter)
{
// Concept check
function_requires<
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
function_requires<
BOOST_CONCEPT_ASSERT((
FinderConcept<
FinderT,
BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
));
BOOST_CONCEPT_ASSERT((
FormatterConcept<
FormatterT,
FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
));
detail::find_format_impl(
Input,
@ -172,15 +181,18 @@ namespace boost {
FormatterT Formatter)
{
// Concept check
function_requires<
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
function_requires<
BOOST_CONCEPT_ASSERT((
FinderConcept<
FinderT,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
));
BOOST_CONCEPT_ASSERT((
FormatterConcept<
FormatterT,
FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));
return detail::find_format_all_copy_impl(
Output,
@ -204,13 +216,16 @@ namespace boost {
FormatterT Formatter )
{
// Concept check
function_requires<
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
function_requires<
BOOST_CONCEPT_ASSERT((
FinderConcept<
FinderT,
BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
));
BOOST_CONCEPT_ASSERT((
FormatterConcept<
FormatterT,
FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
));
return detail::find_format_all_copy_impl(
Input,
@ -239,13 +254,16 @@ namespace boost {
FormatterT Formatter )
{
// Concept check
function_requires<
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
function_requires<
BOOST_CONCEPT_ASSERT((
FinderConcept<
FinderT,
BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
));
BOOST_CONCEPT_ASSERT((
FormatterConcept<
FormatterT,
FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
));
detail::find_format_all_impl(
Input,

View File

@ -113,8 +113,8 @@ namespace boost {
FinderT Finder ) :
detail::find_iterator_base<IteratorT>(Finder,0)
{
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col));
m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::boost::as_literal(Col));
m_Match=::boost::make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
m_End=::boost::end(lit_col);
increment();
@ -240,7 +240,7 @@ namespace boost {
m_Match(Other.m_Match),
m_Next(Other.m_Next),
m_End(Other.m_End),
m_bEof(false)
m_bEof(Other.m_bEof)
{}
//! Constructor
@ -259,7 +259,11 @@ namespace boost {
m_End(End),
m_bEof(false)
{
increment();
// force the correct behavior for empty sequences and yield at least one token
if(Begin!=End)
{
increment();
}
}
//! Constructor
/*!
@ -273,12 +277,16 @@ namespace boost {
detail::find_iterator_base<IteratorT>(Finder,0),
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(::boost::as_literal(Col));
m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
m_Next=::boost::begin(lit_col);
m_End=::boost::end(lit_col);
increment();
// force the correct behavior for empty sequences and yield at least one token
if(m_Next!=m_End)
{
increment();
}
}

View File

@ -56,7 +56,7 @@ namespace boost {
detail::first_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type,
is_equal>( as_literal(Search), is_equal() ) ;
is_equal>( ::boost::as_literal(Search), is_equal() ) ;
}
//! "First" finder
@ -74,7 +74,7 @@ namespace boost {
detail::first_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type,
PredicateT>( as_literal(Search), Comp );
PredicateT>( ::boost::as_literal(Search), Comp );
}
//! "Last" finder
@ -97,7 +97,7 @@ namespace boost {
detail::last_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type,
is_equal>( as_literal(Search), is_equal() );
is_equal>( ::boost::as_literal(Search), is_equal() );
}
//! "Last" finder
/*!
@ -113,7 +113,7 @@ namespace boost {
detail::last_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type,
PredicateT>( as_literal(Search), Comp ) ;
PredicateT>( ::boost::as_literal(Search), Comp ) ;
}
//! "Nth" finder
@ -139,7 +139,7 @@ namespace boost {
detail::nth_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type,
is_equal>( as_literal(Search), Nth, is_equal() ) ;
is_equal>( ::boost::as_literal(Search), Nth, is_equal() ) ;
}
//! "Nth" finder
/*!
@ -158,7 +158,7 @@ namespace boost {
detail::nth_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type,
PredicateT>( as_literal(Search), Nth, Comp );
PredicateT>( ::boost::as_literal(Search), Nth, Comp );
}
//! "Head" finder

View File

@ -36,7 +36,7 @@ namespace boost {
//! Constant formatter
/*!
Construct the \c const_formatter. Const formatter always returns
Constructs a \c const_formatter. Const formatter always returns
the same value, regardless of the parameter.
\param Format A predefined value used as a result for formating
@ -50,12 +50,12 @@ namespace boost {
{
return detail::const_formatF<
iterator_range<
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >(as_literal(Format));
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >(::boost::as_literal(Format));
}
//! Identity formatter
/*!
Construct the \c identity_formatter. Identity formatter always returns
Constructs an \c identity_formatter. Identity formatter always returns
the parameter.
\return An instance of the \c identity_formatter object.
@ -73,7 +73,7 @@ namespace boost {
//! Empty formatter
/*!
Construct the \c empty_formatter. Empty formatter always returns an empty
Constructs an \c empty_formatter. Empty formatter always returns an empty
sequence.
\param Input container used to select a correct value_type for the
@ -89,6 +89,22 @@ namespace boost {
BOOST_STRING_TYPENAME range_value<RangeT>::type>();
}
//! Empty formatter
/*!
Constructs a \c dissect_formatter. Dissect formatter uses a specified finder
to extract a portion of the formatted sequence. The first finder's match is returned
as a result
\param Finder a finder used to select a portion of the formated sequence
\return An instance of the \c dissect_formatter object.
*/
template<typename FinderT>
inline detail::dissect_formatF< FinderT >
dissect_formatter(const FinderT& Finder)
{
return detail::dissect_formatF<FinderT>(Finder);
}
} // namespace algorithm
@ -96,6 +112,7 @@ namespace boost {
using algorithm::const_formatter;
using algorithm::identity_formatter;
using algorithm::empty_formatter;
using algorithm::dissect_formatter;
} // namespace boost

View File

@ -74,11 +74,13 @@ namespace boost {
RangeT& Input,
FinderT Finder )
{
function_requires<
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_iterator<RangeT>::type> >();
BOOST_CONCEPT_ASSERT((
FinderConcept<
FinderT,
BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
));
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(::boost::as_literal(Input));
typedef BOOST_STRING_TYPENAME
range_iterator<RangeT>::type input_iterator_type;
@ -94,12 +96,12 @@ namespace boost {
transform_iter_type;
transform_iter_type itBegin=
make_transform_iterator(
::boost::make_transform_iterator(
find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
copy_range_type());
transform_iter_type itEnd=
make_transform_iterator(
::boost::make_transform_iterator(
find_iterator_type(),
copy_range_type());
@ -143,11 +145,12 @@ namespace boost {
RangeT& Input,
FinderT Finder )
{
function_requires<
BOOST_CONCEPT_ASSERT((
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_iterator<RangeT>::type> >();
BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
));
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(::boost::as_literal(Input));
typedef BOOST_STRING_TYPENAME
range_iterator<RangeT>::type input_iterator_type;
@ -163,12 +166,12 @@ namespace boost {
transform_iter_type;
transform_iter_type itBegin=
make_transform_iterator(
::boost::make_transform_iterator(
find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
copy_range_type() );
transform_iter_type itEnd=
make_transform_iterator(
::boost::make_transform_iterator(
find_iterator_type(),
copy_range_type() );

View File

@ -68,7 +68,7 @@ namespace boost {
for(;itBegin!=itEnd; ++itBegin)
{
// Add separator
detail::insert(Result, ::boost::end(Result), as_literal(Separator));
detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));
// Add element
detail::insert(Result, ::boost::end(Result), *itBegin);
}
@ -123,7 +123,7 @@ namespace boost {
if(Pred(*itBegin))
{
// Add separator
detail::insert(Result, ::boost::end(Result), as_literal(Separator));
detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));
// Add element
detail::insert(Result, ::boost::end(Result), *itBegin);
}

View File

@ -59,8 +59,8 @@ namespace boost {
const Range2T& Test,
PredicateT Comp)
{
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(as_literal(Test));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test));
typedef BOOST_STRING_TYPENAME
range_const_iterator<Range1T>::type Iterator1T;
@ -92,7 +92,7 @@ namespace boost {
const Range1T& Input,
const Range2T& Test)
{
return starts_with(Input, Test, is_equal());
return ::boost::algorithm::starts_with(Input, Test, is_equal());
}
//! 'Starts with' predicate ( case insensitive )
@ -114,7 +114,7 @@ namespace boost {
const Range2T& Test,
const std::locale& Loc=std::locale())
{
return starts_with(Input, Test, is_iequal(Loc));
return ::boost::algorithm::starts_with(Input, Test, is_iequal(Loc));
}
@ -141,8 +141,8 @@ namespace boost {
const Range2T& Test,
PredicateT Comp)
{
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(as_literal(Test));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test));
typedef BOOST_STRING_TYPENAME
range_const_iterator<Range1T>::type Iterator1T;
@ -169,7 +169,7 @@ namespace boost {
const Range1T& Input,
const Range2T& Test)
{
return ends_with(Input, Test, is_equal());
return ::boost::algorithm::ends_with(Input, Test, is_equal());
}
//! 'Ends with' predicate ( case insensitive )
@ -191,7 +191,7 @@ namespace boost {
const Range2T& Test,
const std::locale& Loc=std::locale())
{
return ends_with(Input, Test, is_iequal(Loc));
return ::boost::algorithm::ends_with(Input, Test, is_iequal(Loc));
}
// contains predicate -----------------------------------------------//
@ -215,17 +215,17 @@ namespace boost {
const Range2T& Test,
PredicateT Comp)
{
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(as_literal(Test));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test));
if (empty(lit_test))
if (::boost::empty(lit_test))
{
// Empty range is contained always
return true;
}
// Use the temporary variable to make VACPP happy
bool bResult=(first_finder(lit_test,Comp)(::boost::begin(lit_input), ::boost::end(lit_input)));
bool bResult=(::boost::algorithm::first_finder(lit_test,Comp)(::boost::begin(lit_input), ::boost::end(lit_input)));
return bResult;
}
@ -238,7 +238,7 @@ namespace boost {
const Range1T& Input,
const Range2T& Test)
{
return contains(Input, Test, is_equal());
return ::boost::algorithm::contains(Input, Test, is_equal());
}
//! 'Contains' predicate ( case insensitive )
@ -259,7 +259,7 @@ namespace boost {
const Range2T& Test,
const std::locale& Loc=std::locale())
{
return contains(Input, Test, is_iequal(Loc));
return ::boost::algorithm::contains(Input, Test, is_iequal(Loc));
}
// equals predicate -----------------------------------------------//
@ -286,8 +286,8 @@ namespace boost {
const Range2T& Test,
PredicateT Comp)
{
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(as_literal(Test));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test));
typedef BOOST_STRING_TYPENAME
range_const_iterator<Range1T>::type Iterator1T;
@ -319,7 +319,7 @@ namespace boost {
const Range1T& Input,
const Range2T& Test)
{
return equals(Input, Test, is_equal());
return ::boost::algorithm::equals(Input, Test, is_equal());
}
//! 'Equals' predicate ( case insensitive )
@ -343,7 +343,7 @@ namespace boost {
const Range2T& Test,
const std::locale& Loc=std::locale())
{
return equals(Input, Test, is_iequal(Loc));
return ::boost::algorithm::equals(Input, Test, is_iequal(Loc));
}
// lexicographical_compare predicate -----------------------------//
@ -372,8 +372,8 @@ namespace boost {
const Range2T& Arg2,
PredicateT Pred)
{
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_arg1(as_literal(Arg1));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_arg2(as_literal(Arg2));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_arg1(::boost::as_literal(Arg1));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_arg2(::boost::as_literal(Arg2));
return std::lexicographical_compare(
::boost::begin(lit_arg1),
@ -392,7 +392,7 @@ namespace boost {
const Range1T& Arg1,
const Range2T& Arg2)
{
return lexicographical_compare(Arg1, Arg2, is_less());
return ::boost::algorithm::lexicographical_compare(Arg1, Arg2, is_less());
}
//! Lexicographical compare predicate (case-insensitive)
@ -417,7 +417,7 @@ namespace boost {
const Range2T& Arg2,
const std::locale& Loc=std::locale())
{
return lexicographical_compare(Arg1, Arg2, is_iless(Loc));
return ::boost::algorithm::lexicographical_compare(Arg1, Arg2, is_iless(Loc));
}
@ -439,7 +439,7 @@ namespace boost {
const RangeT& Input,
PredicateT Pred)
{
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(as_literal(Input));
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));
typedef BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type Iterator1T;

View File

@ -60,9 +60,9 @@ namespace boost {
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
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(::boost::as_literal(Input));
return regex_finder(Rx,Flags)(
return ::boost::algorithm::regex_finder(Rx,Flags)(
::boost::begin(lit_input), ::boost::end(lit_input) );
}
@ -98,11 +98,11 @@ namespace boost {
const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
match_flag_type Flags=match_default | format_default )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
regex_finder( Rx, Flags ),
regex_formatter( Format, Flags ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::regex_formatter( Format, Flags ) );
}
//! Replace regex algorithm
@ -120,10 +120,10 @@ namespace boost {
const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
match_flag_type Flags=match_default | format_default )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
regex_finder( Rx, Flags ),
regex_formatter( Format, Flags ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::regex_formatter( Format, Flags ) );
}
//! Replace regex algorithm
@ -147,10 +147,10 @@ namespace boost {
const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
match_flag_type Flags=match_default | format_default )
{
find_format(
::boost::algorithm::find_format(
Input,
regex_finder( Rx, Flags ),
regex_formatter( Format, Flags ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::regex_formatter( Format, Flags ) );
}
// replace_all_regex --------------------------------------------------------------------//
@ -184,11 +184,11 @@ namespace boost {
const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
match_flag_type Flags=match_default | format_default )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Output,
Input,
regex_finder( Rx, Flags ),
regex_formatter( Format, Flags ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::regex_formatter( Format, Flags ) );
}
//! Replace all regex algorithm
@ -206,10 +206,10 @@ namespace boost {
const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
match_flag_type Flags=match_default | format_default )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Input,
regex_finder( Rx, Flags ),
regex_formatter( Format, Flags ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::regex_formatter( Format, Flags ) );
}
//! Replace all regex algorithm
@ -233,10 +233,10 @@ namespace boost {
const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
match_flag_type Flags=match_default | format_default )
{
find_format_all(
::boost::algorithm::find_format_all(
Input,
regex_finder( Rx, Flags ),
regex_formatter( Format, Flags ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::regex_formatter( Format, Flags ) );
}
// erase_regex --------------------------------------------------------------------//
@ -267,11 +267,11 @@ namespace boost {
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
regex_finder( Rx, Flags ),
empty_formatter( Input ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::empty_formatter( Input ) );
}
//! Erase regex algorithm
@ -287,10 +287,10 @@ namespace boost {
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
regex_finder( Rx, Flags ),
empty_formatter( Input ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::empty_formatter( Input ) );
}
//! Erase regex algorithm
@ -311,10 +311,10 @@ namespace boost {
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
find_format(
::boost::algorithm::find_format(
Input,
regex_finder( Rx, Flags ),
empty_formatter( Input ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::empty_formatter( Input ) );
}
// erase_all_regex --------------------------------------------------------------------//
@ -346,11 +346,11 @@ namespace boost {
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Output,
Input,
regex_finder( Rx, Flags ),
empty_formatter( Input ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::empty_formatter( Input ) );
}
//! Erase all regex algorithm
@ -366,10 +366,10 @@ namespace boost {
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Input,
regex_finder( Rx, Flags ),
empty_formatter( Input ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::empty_formatter( Input ) );
}
//! Erase all regex algorithm
@ -390,10 +390,10 @@ namespace boost {
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
find_format_all(
::boost::algorithm::find_format_all(
Input,
regex_finder( Rx, Flags ),
empty_formatter( Input ) );
::boost::algorithm::regex_finder( Rx, Flags ),
::boost::algorithm::empty_formatter( Input ) );
}
// find_all_regex ------------------------------------------------------------------//
@ -431,10 +431,10 @@ namespace boost {
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
return iter_find(
return ::boost::algorithm::iter_find(
Result,
Input,
regex_finder(Rx,Flags) );
::boost::algorithm::regex_finder(Rx,Flags) );
}
// split_regex ------------------------------------------------------------------//
@ -472,10 +472,10 @@ namespace boost {
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
return iter_split(
return ::boost::algorithm::iter_split(
Result,
Input,
regex_finder(Rx,Flags) );
::boost::algorithm::regex_finder(Rx,Flags) );
}
// join_if ------------------------------------------------------------------//
@ -525,7 +525,7 @@ namespace boost {
// Roll to the first element that will be added
while(
itBegin!=itEnd &&
!regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
!::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
// Add this element
if(itBegin!=itEnd)
@ -536,10 +536,10 @@ namespace boost {
for(;itBegin!=itEnd; ++itBegin)
{
if(regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
if(::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
{
// Add separator
detail::insert(Result, ::boost::end(Result), as_literal(Separator));
detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));
// Add element
detail::insert(Result, ::boost::end(Result), *itBegin);
}
@ -593,7 +593,7 @@ namespace boost {
// Roll to the first element that will be added
while(
itBegin!=itEnd &&
!regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
!::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
// Add this element
if(itBegin!=itEnd)
@ -604,10 +604,10 @@ namespace boost {
for(;itBegin!=itEnd; ++itBegin)
{
if(regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
if(::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
{
// Add separator
detail::insert(Result, ::boost::end(Result), as_literal(Separator));
detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));
// Add element
detail::insert(Result, ::boost::end(Result), *itBegin);
}

View File

@ -61,11 +61,11 @@ namespace boost {
range_const_iterator<Range1T>::type>& SearchRange,
const Range2T& Format)
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
range_finder(SearchRange),
const_formatter(Format));
::boost::algorithm::range_finder(SearchRange),
::boost::algorithm::const_formatter(Format));
}
//! Replace range algorithm
@ -80,10 +80,10 @@ namespace boost {
range_const_iterator<SequenceT>::type>& SearchRange,
const RangeT& Format)
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
range_finder(SearchRange),
const_formatter(Format));
::boost::algorithm::range_finder(SearchRange),
::boost::algorithm::const_formatter(Format));
}
//! Replace range algorithm
@ -103,10 +103,10 @@ namespace boost {
range_iterator<SequenceT>::type>& SearchRange,
const RangeT& Format)
{
find_format(
::boost::algorithm::find_format(
Input,
range_finder(SearchRange),
const_formatter(Format));
::boost::algorithm::range_finder(SearchRange),
::boost::algorithm::const_formatter(Format));
}
// replace_first --------------------------------------------------------------------//
@ -138,11 +138,11 @@ namespace boost {
const Range2T& Search,
const Range3T& Format)
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
first_finder(Search),
const_formatter(Format) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::const_formatter(Format) );
}
//! Replace first algorithm
@ -155,10 +155,10 @@ namespace boost {
const Range1T& Search,
const Range2T& Format )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
first_finder(Search),
const_formatter(Format) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::const_formatter(Format) );
}
//! Replace first algorithm
@ -176,10 +176,10 @@ namespace boost {
const Range1T& Search,
const Range2T& Format )
{
find_format(
::boost::algorithm::find_format(
Input,
first_finder(Search),
const_formatter(Format) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::const_formatter(Format) );
}
// replace_first ( case insensitive ) ---------------------------------------------//
@ -214,11 +214,11 @@ namespace boost {
const Range3T& Format,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
first_finder(Search, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
//! Replace first algorithm ( case insensitive )
@ -232,10 +232,10 @@ namespace boost {
const Range1T& Format,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
first_finder(Search, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
//! Replace first algorithm ( case insensitive )
@ -256,10 +256,10 @@ namespace boost {
const Range2T& Format,
const std::locale& Loc=std::locale() )
{
find_format(
::boost::algorithm::find_format(
Input,
first_finder(Search, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
// replace_last --------------------------------------------------------------------//
@ -291,11 +291,11 @@ namespace boost {
const Range2T& Search,
const Range3T& Format )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
last_finder(Search),
const_formatter(Format) );
::boost::algorithm::last_finder(Search),
::boost::algorithm::const_formatter(Format) );
}
//! Replace last algorithm
@ -308,10 +308,10 @@ namespace boost {
const Range1T& Search,
const Range2T& Format )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
last_finder(Search),
const_formatter(Format) );
::boost::algorithm::last_finder(Search),
::boost::algorithm::const_formatter(Format) );
}
//! Replace last algorithm
@ -329,10 +329,10 @@ namespace boost {
const Range1T& Search,
const Range2T& Format )
{
find_format(
::boost::algorithm::find_format(
Input,
last_finder(Search),
const_formatter(Format) );
::boost::algorithm::last_finder(Search),
::boost::algorithm::const_formatter(Format) );
}
// replace_last ( case insensitive ) -----------------------------------------------//
@ -367,11 +367,11 @@ namespace boost {
const Range3T& Format,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
last_finder(Search, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::last_finder(Search, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
//! Replace last algorithm ( case insensitive )
@ -385,10 +385,10 @@ namespace boost {
const Range2T& Format,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
last_finder(Search, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::last_finder(Search, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
//! Replace last algorithm ( case insensitive )
@ -410,10 +410,10 @@ namespace boost {
const Range2T& Format,
const std::locale& Loc=std::locale() )
{
find_format(
::boost::algorithm::find_format(
Input,
last_finder(Search, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::last_finder(Search, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
// replace_nth --------------------------------------------------------------------//
@ -448,11 +448,11 @@ namespace boost {
int Nth,
const Range3T& Format )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
nth_finder(Search, Nth),
const_formatter(Format) );
::boost::algorithm::nth_finder(Search, Nth),
::boost::algorithm::const_formatter(Format) );
}
//! Replace nth algorithm
@ -466,10 +466,10 @@ namespace boost {
int Nth,
const Range2T& Format )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
nth_finder(Search, Nth),
const_formatter(Format) );
::boost::algorithm::nth_finder(Search, Nth),
::boost::algorithm::const_formatter(Format) );
}
//! Replace nth algorithm
@ -490,10 +490,10 @@ namespace boost {
int Nth,
const Range2T& Format )
{
find_format(
::boost::algorithm::find_format(
Input,
nth_finder(Search, Nth),
const_formatter(Format) );
::boost::algorithm::nth_finder(Search, Nth),
::boost::algorithm::const_formatter(Format) );
}
// replace_nth ( case insensitive ) -----------------------------------------------//
@ -531,11 +531,11 @@ namespace boost {
const Range3T& Format,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
nth_finder(Search, Nth, is_iequal(Loc) ),
const_formatter(Format) );
::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc) ),
::boost::algorithm::const_formatter(Format) );
}
//! Replace nth algorithm ( case insensitive )
@ -550,10 +550,10 @@ namespace boost {
const Range2T& Format,
const std::locale& Loc=std::locale() )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
nth_finder(Search, Nth, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
//! Replace nth algorithm ( case insensitive )
@ -577,10 +577,10 @@ namespace boost {
const Range2T& Format,
const std::locale& Loc=std::locale() )
{
find_format(
::boost::algorithm::find_format(
Input,
nth_finder(Search, Nth, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
// replace_all --------------------------------------------------------------------//
@ -612,11 +612,11 @@ namespace boost {
const Range2T& Search,
const Range3T& Format )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Output,
Input,
first_finder(Search),
const_formatter(Format) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::const_formatter(Format) );
}
//! Replace all algorithm
@ -629,10 +629,10 @@ namespace boost {
const Range1T& Search,
const Range2T& Format )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Input,
first_finder(Search),
const_formatter(Format) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::const_formatter(Format) );
}
//! Replace all algorithm
@ -651,10 +651,10 @@ namespace boost {
const Range1T& Search,
const Range2T& Format )
{
find_format_all(
::boost::algorithm::find_format_all(
Input,
first_finder(Search),
const_formatter(Format) );
::boost::algorithm::first_finder(Search),
::boost::algorithm::const_formatter(Format) );
}
// replace_all ( case insensitive ) -----------------------------------------------//
@ -689,11 +689,11 @@ namespace boost {
const Range3T& Format,
const std::locale& Loc=std::locale() )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Output,
Input,
first_finder(Search, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
//! Replace all algorithm ( case insensitive )
@ -707,10 +707,10 @@ namespace boost {
const Range2T& Format,
const std::locale& Loc=std::locale() )
{
return find_format_all_copy(
return ::boost::algorithm::find_format_all_copy(
Input,
first_finder(Search, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
//! Replace all algorithm ( case insensitive )
@ -731,10 +731,10 @@ namespace boost {
const Range2T& Format,
const std::locale& Loc=std::locale() )
{
find_format_all(
::boost::algorithm::find_format_all(
Input,
first_finder(Search, is_iequal(Loc)),
const_formatter(Format) );
::boost::algorithm::first_finder(Search, is_iequal(Loc)),
::boost::algorithm::const_formatter(Format) );
}
// replace_head --------------------------------------------------------------------//
@ -769,11 +769,11 @@ namespace boost {
int N,
const Range2T& Format )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
head_finder(N),
const_formatter(Format) );
::boost::algorithm::head_finder(N),
::boost::algorithm::const_formatter(Format) );
}
//! Replace head algorithm
@ -786,10 +786,10 @@ namespace boost {
int N,
const RangeT& Format )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
head_finder(N),
const_formatter(Format) );
::boost::algorithm::head_finder(N),
::boost::algorithm::const_formatter(Format) );
}
//! Replace head algorithm
@ -811,10 +811,10 @@ namespace boost {
int N,
const RangeT& Format )
{
find_format(
::boost::algorithm::find_format(
Input,
head_finder(N),
const_formatter(Format) );
::boost::algorithm::head_finder(N),
::boost::algorithm::const_formatter(Format) );
}
// replace_tail --------------------------------------------------------------------//
@ -849,11 +849,11 @@ namespace boost {
int N,
const Range2T& Format )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Output,
Input,
tail_finder(N),
const_formatter(Format) );
::boost::algorithm::tail_finder(N),
::boost::algorithm::const_formatter(Format) );
}
//! Replace tail algorithm
@ -866,10 +866,10 @@ namespace boost {
int N,
const RangeT& Format )
{
return find_format_copy(
return ::boost::algorithm::find_format_copy(
Input,
tail_finder(N),
const_formatter(Format) );
::boost::algorithm::tail_finder(N),
::boost::algorithm::const_formatter(Format) );
}
//! Replace tail algorithm
@ -891,10 +891,10 @@ namespace boost {
int N,
const RangeT& Format )
{
find_format(
::boost::algorithm::find_format(
Input,
tail_finder(N),
const_formatter(Format) );
::boost::algorithm::tail_finder(N),
::boost::algorithm::const_formatter(Format) );
}
} // namespace algorithm

View File

@ -64,10 +64,10 @@ namespace boost {
Range1T& Input,
const Range2T& Search)
{
return iter_find(
return ::boost::algorithm::iter_find(
Result,
Input,
first_finder(Search) );
::boost::algorithm::first_finder(Search) );
}
//! Find all algorithm ( case insensitive )
@ -100,10 +100,10 @@ namespace boost {
const Range2T& Search,
const std::locale& Loc=std::locale() )
{
return iter_find(
return ::boost::algorithm::iter_find(
Result,
Input,
first_finder(Search, is_iequal(Loc) ) );
::boost::algorithm::first_finder(Search, is_iequal(Loc) ) );
}
@ -143,10 +143,10 @@ namespace boost {
PredicateT Pred,
token_compress_mode_type eCompress=token_compress_off )
{
return iter_split(
return ::boost::algorithm::iter_split(
Result,
Input,
token_finder( Pred, eCompress ) );
::boost::algorithm::token_finder( Pred, eCompress ) );
}
} // namespace algorithm

View File

@ -63,7 +63,7 @@ namespace boost {
const RangeT& Input,
PredicateT IsSpace)
{
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(::boost::as_literal(Input));
std::copy(
::boost::algorithm::detail::trim_begin(
@ -106,7 +106,7 @@ namespace boost {
inline SequenceT trim_left_copy(const SequenceT& Input, const std::locale& Loc=std::locale())
{
return
trim_left_copy_if(
::boost::algorithm::trim_left_copy_if(
Input,
is_space(Loc));
}
@ -142,7 +142,7 @@ namespace boost {
template<typename SequenceT>
inline void trim_left(SequenceT& Input, const std::locale& Loc=std::locale())
{
trim_left_if(
::boost::algorithm::trim_left_if(
Input,
is_space(Loc));
}
@ -171,7 +171,7 @@ namespace boost {
const RangeT& Input,
PredicateT IsSpace )
{
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(::boost::as_literal(Input));
std::copy(
::boost::begin(lit_range),
@ -215,7 +215,7 @@ namespace boost {
inline SequenceT trim_right_copy(const SequenceT& Input, const std::locale& Loc=std::locale())
{
return
trim_right_copy_if(
::boost::algorithm::trim_right_copy_if(
Input,
is_space(Loc));
}
@ -254,7 +254,7 @@ namespace boost {
template<typename SequenceT>
inline void trim_right(SequenceT& Input, const std::locale& Loc=std::locale())
{
trim_right_if(
::boost::algorithm::trim_right_if(
Input,
is_space(Loc) );
}
@ -283,7 +283,7 @@ namespace boost {
const RangeT& Input,
PredicateT IsSpace)
{
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(::boost::as_literal(Input));
BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type TrimEnd=
@ -340,7 +340,7 @@ namespace boost {
inline SequenceT trim_copy( const SequenceT& Input, const std::locale& Loc=std::locale() )
{
return
trim_copy_if(
::boost::algorithm::trim_copy_if(
Input,
is_space(Loc) );
}
@ -357,8 +357,8 @@ namespace boost {
template<typename SequenceT, typename PredicateT>
inline void trim_if(SequenceT& Input, PredicateT IsSpace)
{
trim_right_if( Input, IsSpace );
trim_left_if( Input, IsSpace );
::boost::algorithm::trim_right_if( Input, IsSpace );
::boost::algorithm::trim_left_if( Input, IsSpace );
}
//! Trim
@ -372,7 +372,7 @@ namespace boost {
template<typename SequenceT>
inline void trim(SequenceT& Input, const std::locale& Loc=std::locale())
{
trim_if(
::boost::algorithm::trim_if(
Input,
is_space( Loc ) );
}

View File

@ -0,0 +1,127 @@
// Boost string_algo library trim.hpp header file ---------------------------//
// Copyright Pavol Droba 2002-2003.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org/ for updates, documentation, and revision history.
#ifndef BOOST_STRING_TRIM_ALL_HPP
#define BOOST_STRING_TRIM_ALL_HPP
#include <boost/algorithm/string/config.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/find_format.hpp>
#include <boost/algorithm/string/formatter.hpp>
#include <boost/algorithm/string/finder.hpp>
#include <locale>
/*! \file
Defines trim_all algorithms.
Just like \c trim, \c trim_all removes all trailing and leading spaces from a
sequence (string). In addition, spaces in the middle of the sequence are truncated
to just one character. Space is recognized using given locales.
Parametric (\c _if) variants use a predicate (functor) to select which characters
are to be trimmed..
Functions take a selection predicate as a parameter, which is used to determine
whether a character is a space. Common predicates are provided in classification.hpp header.
*/
namespace boost {
namespace algorithm {
// multi line trim ----------------------------------------------- //
//! Trim All - parametric
/*!
Remove all leading and trailing spaces from the input and
compress all other spaces to a single space.
The result is a trimmed copy of the input
\param Input An input sequence
\param IsSpace An unary predicate identifying spaces
\return A trimmed copy of the input
*/
template<typename SequenceT, typename PredicateT>
inline SequenceT trim_all_copy_if(const SequenceT& Input, PredicateT IsSpace)
{
return
::boost::find_format_all_copy(
::boost::trim_copy_if(Input, IsSpace),
::boost::token_finder(IsSpace, ::boost::token_compress_on),
::boost::dissect_formatter(::boost::head_finder(1)));
}
//! Trim All
/*!
Remove all leading and trailing spaces from the input and
compress all other spaces to a single space.
The input sequence is modified in-place.
\param Input An input sequence
\param IsSpace An unary predicate identifying spaces
*/
template<typename SequenceT, typename PredicateT>
inline void trim_all_if(SequenceT& Input, PredicateT IsSpace)
{
::boost::trim_if(Input, IsSpace);
::boost::find_format_all(
Input,
::boost::token_finder(IsSpace, ::boost::token_compress_on),
::boost::dissect_formatter(::boost::head_finder(1)));
}
//! Trim All
/*!
Remove all leading and trailing spaces from the input and
compress all other spaces to a single space.
The result is a trimmed copy of the input
\param Input An input sequence
\param Loc A locale used for 'space' classification
\return A trimmed copy of the input
*/
template<typename SequenceT>
inline SequenceT trim_all_copy(const SequenceT& Input, const std::locale& Loc =std::locale())
{
return trim_all_copy_if(Input, ::boost::is_space(Loc));
}
//! Trim All
/*!
Remove all leading and trailing spaces from the input and
compress all other spaces to a single space.
The input sequence is modified in-place.
\param Input An input sequence
\param Loc A locale used for 'space' classification
\return A trimmed copy of the input
*/
template<typename SequenceT>
inline void trim_all(SequenceT& Input, const std::locale& Loc =std::locale())
{
trim_all_if(Input, ::boost::is_space(Loc));
}
} // namespace algorithm
// pull names to the boost namespace
using algorithm::trim_all;
using algorithm::trim_all_if;
using algorithm::trim_all_copy;
using algorithm::trim_all_copy_if;
} // namespace boost
#endif // BOOST_STRING_TRIM_ALL_HPP

View File

@ -56,7 +56,7 @@ be enough. The present library solves both problems.</p>
<tt>minmax</tt>
as straightforward extensions of the C++
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
<tt>std::min</tt>
and <tt>std::max</tt>, but to add one more algorithms that combines both; see the
@ -92,11 +92,11 @@ Synopsis of <tt>&lt;boost/algorithm/minmax.hpp></tt></h3>
namespace boost {
template &lt;class T>
tuple&lt;T const&amp;, T const&amp;> >
tuple&lt;T const&amp;, T const&amp;>
minmax(const T&amp; a, const T&amp; b);
template &lt;class T, class <a href="http://www.sgi.com/tech/stl/BinaryPredicate.html">BinaryPredicate</a>>
tuple&lt;T const&amp;, T const&amp;> >
tuple&lt;T const&amp;, T const&amp;>
minmax(const T&amp; a, const T&amp; b, BinaryPredicate comp);
}
@ -158,9 +158,9 @@ identical to
that they return the last instance of the largest element (and not the
first, as <tt>first_min_element</tt> and <tt>last_max_element</tt> would).
<p>The family of algorithms comprising <tt>first_min_first_max_element</tt>,
<tt>first_min_first_max_element</tt>,
<tt>first_min_first_max_element</tt>,
and <tt>first_min_first_max_element</tt> can be described generically as
<tt>first_min_last_max_element</tt>,
<tt>last_min_first_max_element</tt>,
and <tt>last_min_last_max_element</tt> can be described generically as
follows (using <i><tt>which</tt></i> and
<i><tt>what</tt></i> for <tt>first</tt>
or <tt>last</tt>): <tt><i>which</i>_min_<i>what</i>_max_element</tt> finds
@ -243,7 +243,7 @@ range
<a name="complexity">
<h3>
<a NAME="Complexity"></a>Complexity</h3>
Complexity</h3>
Minmax performs a single comparison and is otherwise of constant complexity.
The use of <tt>boost::tuple&lt;T const&amp;></tt> prevents copy
constructors in case the arguments are passed by reference.
@ -338,7 +338,7 @@ most</i> instead of <i>exactly</i> in the odd case.
<b>Rationale:</b></h3>
<a name="two_headers">
<h4><b>Why not a single header <tt>&amp;boost/algorithm/minmax.hpp></tt>?</b></h4>
<h4><b>Why not a single header <tt>&lt;boost/algorithm/minmax.hpp></tt>?</b></h4>
<p>This was the design originally proposed and approved in the formal
review. As the need for Boost.tuple became clear (due to the limitations
of <tt>std::pair</tt>), it became also annoying to require another
@ -438,7 +438,7 @@ comparisons).</p>
slower than
<tt>first_min_element</tt> alone, still much less than <tt>first_min_element</tt>
and
<tt>last_max_element</tt> called separately. <a href="#Performance">[2]</a>
<tt>last_max_element</tt> called separately. <a href="#Note2">[2]</a>
<h4><b>Why algorithms and not accumulators?</b></h4>
<p>The minmax algorithms are useful in computing the extent of a range.

View File

@ -54,23 +54,23 @@ void test(BOOST_EXPLICIT_TEMPLATE_TYPE(Value))
less_count<Value> lc(counter);
// Test functionality
tuple<Value const&, Value const&> result1 = minmax(zero, one);
tuple<Value const&, Value const&> result1 = boost::minmax(zero, one);
BOOST_CHECK_EQUAL( get<0>(result1), zero );
BOOST_CHECK_EQUAL( get<1>(result1), one );
tuple<Value const&, Value const&> result2 = minmax(one, zero);
tuple<Value const&, Value const&> result2 = boost::minmax(one, zero);
BOOST_CHECK_EQUAL( get<0>(result2), zero );
BOOST_CHECK_EQUAL( get<1>(result2), one );
// Test functionality and number of comparisons
lc.reset();
tuple<Value const&, Value const&> result3 = minmax(zero, one, lc );
tuple<Value const&, Value const&> result3 = boost::minmax(zero, one, lc );
BOOST_CHECK_EQUAL( get<0>(result3), zero );
BOOST_CHECK_EQUAL( get<1>(result3), one );
BOOST_CHECK_EQUAL( counter, 1 );
lc.reset();
tuple<Value const&, Value const&> result4 = minmax(one, zero, lc );
tuple<Value const&, Value const&> result4 = boost::minmax(one, zero, lc );
BOOST_CHECK_EQUAL( get<0>(result4), zero );
BOOST_CHECK_EQUAL( get<1>(result4), one );
BOOST_CHECK_EQUAL( counter, 1);

View File

@ -10,7 +10,11 @@
import toolset ;
toolset.using doxygen ;
boostbook string_algo : string_algo.xml autodoc ;
boostbook string_algo : string_algo.xml autodoc
:
<xsl:param>boost.root=../../../../..
<format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/doc/html
;
doxygen autodoc
:
@ -39,6 +43,7 @@ doxygen autodoc
[ glob ../../../../boost/algorithm/string/formatter.hpp ]
[ glob ../../../../boost/algorithm/string/regex.hpp ]
[ glob ../../../../boost/algorithm/string/regex_find_format.hpp ]
[ glob ../../../../boost/algorithm/string/trim_all.hpp ]
:
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
<doxygen:param>EXTRACT_PRIVATE=NO

View File

@ -25,7 +25,7 @@
</para>
<para>
<emphasis role="bold">Definition:</emphasis> A string is a
<ulink url="../../libs/range/doc/range.html">range</ulink> of characters accessible in sequential
<ulink url="../../libs/range/index.html">range</ulink> of characters accessible in sequential
ordered fashion. Character is any value type with "cheap" copying and assignment.
</para>
<para>

View File

@ -32,7 +32,9 @@
free-standing functions and type-generators exists:</p><code>void foo( const T&, int ); <br>
int bar( T& ); <br>
foo_type_of< T >::type;</code> <br> <br><hr size="1" ><h3 >Literature</h3><ul ><li > <a href="http://www.boost.org/more/generic_programming.html#type_generator" target="_self" >Type Generators</a> </li><li > <a href="http://www.boost.org/more/generic_programming.html#concept" target="_self" >Concepts</a> </li><li > <a href="http://www.sgi.com/tech/stl/stl_introduction.html" target="_self" >Concepts and SGI STL</a> </li></ul><hr size="1" ><p >&copy; Thorsten Ottosen 2003-2004 (nesotto_AT_cs.auc.dk).
Permission to copy, use, modify, sell and distribute this software is granted provided this copyright notice appears
in all copies. This software is provided "as is" without express or implied warranty, and with no
claim as to its suitability for any purpose.</p><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></body></html>
<!-- Copyright Dezide Aps 2003-2004 -->
<br>Use, modification and distribution is subject to the Boost
Software License, Version 1.0. (See accompanying file
<code class="filename">LICENSE_1_0.txt</code> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</br>
</p>
<!-- Copyright Dezide Aps 2003-2004 -->

View File

@ -33,7 +33,7 @@
<librarypurpose>
A set of generic string-related algorithms and utilities
</librarypurpose>
<librarycategory name="category:algoritms"/>
<librarycategory name="category:algorithms"/>
<librarycategory name="category:string-text"/>
</libraryinfo>

View File

@ -57,7 +57,7 @@
The magic of <ulink url="../../libs/range/index.html">Boost.Range</ulink>
provides a uniform way of handling different string types.
If there is a need to pass a pair of iterators,
<ulink url="../../libs/range/doc/utility_class.html"><code>boost::iterator_range</code></ulink>
<ulink url="../../libs/range/doc/html/range/reference/utilities/iterator_range.html"><code>boost::iterator_range</code></ulink>
can be used to package iterators into a structure with a compatible interface.
</para>
</listitem>
@ -130,7 +130,7 @@
string str1("command.com");
cout
&lt;&lt; str1
&lt;&lt; is_executable("command.com")? "is": "is not"
&lt;&lt; (is_executable("command.com")? "is": "is not")
&lt;&lt; "an executable"
&lt;&lt; endl; // prints "command.com is an executable"
@ -138,7 +138,7 @@
char text1[]="hello world!";
cout
&lt;&lt; text1
&lt;&lt; all( text1, is_lower() )? "is": "is not"
&lt;&lt; (all( text1, is_lower() )? "is": "is not")
&lt;&lt; " written in the lower case"
&lt;&lt; endl; // prints "hello world! is written in the lower case"
</programlisting>
@ -169,7 +169,7 @@
<programlisting>
string str1=" hello world! ";
string str2=trim_left_copy(str1); // str2 == "hello world! "
string str3=trim_right_copy(str2); // str3 == " hello world!"
string str3=trim_right_copy(str1); // str3 == " hello world!"
trim(str1); // str1 == "hello world!"
string phone="00423333444";
@ -208,7 +208,7 @@
</programlisting>
<para>
We have used <functionname>find_last()</functionname> to search the <code>text</code> for "ll".
The result is given in the <ulink url="../../libs/range/doc/utility_class.html"><code>boost::iterator_range</code></ulink>.
The result is given in the <ulink url="../../libs/range/doc/html/range/reference/utilities/iterator_range.html"><code>boost::iterator_range</code></ulink>.
This range delimits the
part of the input which satisfies the find criteria. In our example it is the last occurrence of "ll".
@ -217,7 +217,7 @@
<ulink url="../../libs/range/index.html">Boost.Range</ulink>.
The following lines transform the result. Notice that
<ulink url="../../libs/range/doc/utility_class.html"><code>boost::iterator_range</code></ulink> has familiar
<ulink url="../../libs/range/doc/html/range/reference/utilities/iterator_range.html"><code>boost::iterator_range</code></ulink> has familiar
<code>begin()</code> and <code>end()</code> methods, so it can be used like any other STL container.
Also it is convertible to bool therefore it is easy to use find algorithms for a simple containment checking.
</para>
@ -264,7 +264,7 @@
the find iterator allows us to iterate over the substrings matching the specified criteria.
This facility is using the <link linkend="string_algo.finder_concept">Finder</link> to incrementally
search the string.
Dereferencing a find iterator yields an <ulink url="../../libs/range/doc/utility_class.html"><code>boost::iterator_range</code></ulink>
Dereferencing a find iterator yields an <ulink url="../../libs/range/doc/html/range/reference/utilities/iterator_range.html"><code>boost::iterator_range</code></ulink>
object, that delimits the current match.
</para>
<para>
@ -339,7 +339,7 @@
typedef vector&lt; string &gt; split_vector_type;
split_vector_type SplitVec; // #2: Search for tokens
split( SplitVec, str1, is_any_of("-*") ); // SplitVec == { "hello abc","ABC","aBc goodbye" }
split( SplitVec, str1, is_any_of("-*"), token_compress_on ); // SplitVec == { "hello abc","ABC","aBc goodbye" }
</programlisting>
<para>
<code>[hello]</code> designates an <code>iterator_range</code> delimiting this substring.

View File

@ -59,5 +59,11 @@ test-suite algorithm/string
:
: regex
]
[ run
find_format_test.cpp
: :
:
: find_format
]
;

View File

@ -0,0 +1,163 @@
// Boost string_algo library find_format_test.cpp file ------------------//
// Copyright (c) 2009 Steven Watanabe
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org for updates, documentation, and revision history.
#include <boost/algorithm/string/find_format.hpp>
#include <boost/algorithm/string/finder.hpp>
#include <boost/algorithm/string/formatter.hpp>
// Include unit test framework
#include <boost/test/included/test_exec_monitor.hpp>
#include <boost/test/test_tools.hpp>
// We're only using const_formatter.
template<class Formatter>
struct formatter_result {
typedef boost::iterator_range<const char*> type;
};
template<class Formatter>
struct checked_formatter {
public:
checked_formatter(const Formatter& formatter) : formatter_(formatter) {}
template< typename T >
typename formatter_result<Formatter>::type operator()( const T & s ) const {
BOOST_CHECK( !s.empty() );
return formatter_(s);
}
private:
Formatter formatter_;
};
template<class Formatter>
checked_formatter<Formatter>
make_checked_formatter(const Formatter& formatter) {
return checked_formatter<Formatter>(formatter);
}
void find_format_test()
{
const std::string source = "$replace $replace";
std::string expected = "ok $replace";
std::string output(80, '\0');
std::string::iterator pos =
boost::find_format_copy(
output.begin(),
source,
boost::first_finder("$replace"),
make_checked_formatter(boost::const_formatter("ok")));
BOOST_CHECK(pos == output.begin() + expected.size());
output.erase(std::remove(output.begin(), output.end(), '\0'), output.end());
BOOST_CHECK_EQUAL(output, expected);
output =
boost::find_format_copy(
source,
boost::first_finder("$replace"),
make_checked_formatter(boost::const_formatter("ok")));
BOOST_CHECK_EQUAL(output, expected);
// now try finding a string that doesn't exist
output.resize(80);
pos =
boost::find_format_copy(
output.begin(),
source,
boost::first_finder("$noreplace"),
make_checked_formatter(boost::const_formatter("bad")));
BOOST_CHECK(pos == output.begin() + source.size());
output.erase(std::remove(output.begin(), output.end(), '\0'), output.end());
BOOST_CHECK_EQUAL(output, source);
output =
boost::find_format_copy(
source,
boost::first_finder("$noreplace"),
make_checked_formatter(boost::const_formatter("bad")));
BOOST_CHECK_EQUAL(output, source);
// in place version
output = source;
boost::find_format(
output,
boost::first_finder("$replace"),
make_checked_formatter(boost::const_formatter("ok")));
BOOST_CHECK_EQUAL(output, expected);
output = source;
boost::find_format(
output,
boost::first_finder("$noreplace"),
make_checked_formatter(boost::const_formatter("bad")));
BOOST_CHECK_EQUAL(output, source);
}
void find_format_all_test()
{
const std::string source = "$replace $replace";
std::string expected = "ok ok";
std::string output(80, '\0');
std::string::iterator pos =
boost::find_format_all_copy(output.begin(),
source,
boost::first_finder("$replace"),
boost::const_formatter("ok"));
BOOST_CHECK(pos == output.begin() + expected.size());
output.erase(std::remove(output.begin(), output.end(), '\0'), output.end());
BOOST_CHECK_EQUAL(output, expected);
output =
boost::find_format_all_copy(
source,
boost::first_finder("$replace"),
make_checked_formatter(boost::const_formatter("ok")));
BOOST_CHECK_EQUAL(output, expected);
// now try finding a string that doesn't exist
output.resize(80);
pos =
boost::find_format_all_copy(
output.begin(),
source,
boost::first_finder("$noreplace"),
make_checked_formatter(boost::const_formatter("bad")));
BOOST_CHECK(pos == output.begin() + source.size());
output.erase(std::remove(output.begin(), output.end(), '\0'), output.end());
BOOST_CHECK_EQUAL(output, source);
output =
boost::find_format_all_copy(
source,
boost::first_finder("$noreplace"),
make_checked_formatter(boost::const_formatter("bad")));
BOOST_CHECK_EQUAL(output, source);
// in place version
output = source;
boost::find_format_all(
output,
boost::first_finder("$replace"),
make_checked_formatter(boost::const_formatter("ok")));
BOOST_CHECK_EQUAL(output, expected);
output = source;
boost::find_format_all(
output,
boost::first_finder("$noreplace"),
make_checked_formatter(boost::const_formatter("bad")));
BOOST_CHECK_EQUAL(output, source);
}
int test_main( int, char*[] )
{
find_format_test();
find_format_all_test();
return 0;
}

View File

@ -11,6 +11,9 @@
#include <boost/algorithm/string/erase.hpp>
#include <boost/algorithm/string/std/list_traits.hpp>
#include <boost/algorithm/string/std/string_traits.hpp>
#include <boost/algorithm/string/finder.hpp>
#include <boost/algorithm/string/formatter.hpp>
#include <boost/algorithm/string/classification.hpp>
// Include unit test framework
#include <boost/test/included/test_exec_monitor.hpp>
@ -285,6 +288,23 @@ void collection_comp_test()
}
}
void dissect_format_test()
{
BOOST_CHECK(
find_format_all_copy(
string("aBc123Abc"),
first_finder("abc", is_iequal()),
dissect_formatter(token_finder(is_upper())))=="B123A");
BOOST_CHECK(
find_format_all_copy(
string("abc 123 abc"),
token_finder(is_space(), token_compress_on),
dissect_formatter(head_finder(1)))=="abc 123 abc");
}
// test main
int test_main( int, char*[] )
{
@ -297,6 +317,7 @@ int test_main( int, char*[] )
replace_tail_test();
replace_range_test();
collection_comp_test();
dissect_format_test();
return 0;
}

View File

@ -40,6 +40,7 @@ void iterator_test()
string str1("xx-abc--xx-abb");
string str2("Xx-abc--xX-abb-xx");
string str3("xx");
string strempty("");
const char* pch1="xx-abc--xx-abb";
vector<string> tokens;
vector< vector<int> > vtokens;
@ -123,6 +124,25 @@ void iterator_test()
BOOST_CHECK( tokens[3]==string("xx") );
BOOST_CHECK( tokens[4]==string("abb") );
split(
tokens,
str3,
is_any_of(","),
token_compress_off);
BOOST_REQUIRE( tokens.size()==1 );
BOOST_CHECK( tokens[0]==string("xx") );
split(
tokens,
strempty,
is_punct(),
token_compress_off);
BOOST_REQUIRE( tokens.size()==1 );
BOOST_CHECK( tokens[0]==string("") );
find_iterator<string::iterator> fiter=make_find_iterator(str1, first_finder("xx"));
BOOST_CHECK(equals(*fiter, "xx"));
++fiter;
@ -139,6 +159,7 @@ void iterator_test()
++siter;
BOOST_CHECK(equals(*siter, "abb"));
++siter;
BOOST_CHECK(siter==split_iterator<string::iterator>(siter));
BOOST_CHECK(siter==split_iterator<string::iterator>());
}

View File

@ -8,6 +8,7 @@
// See http://www.boost.org for updates, documentation, and revision history.
#include <boost/algorithm/string/trim.hpp>
#include <boost/algorithm/string/trim_all.hpp>
// Include unit test framework
#include <boost/test/included/test_exec_monitor.hpp>
@ -109,10 +110,52 @@ void trim_test()
BOOST_CHECK( trim_copy_if( string("<>abc<>"), is_any_of( "<<>>" ) )=="abc" );
}
void trim_all_test()
{
string str1(" 1x x x x1 ");
string str2("+---...2x+--x--+x-+-x2...---+");
string str3(" ");
// *** value passing tests *** //
// general string test
BOOST_CHECK( trim_all_copy( str1 )=="1x x x x1" ) ;
BOOST_CHECK( trim_all_copy_if( str2, is_punct() )=="2x+x-x-x2" ) ;
// spaces-only string test
BOOST_CHECK( trim_all_copy( str3 )=="" );
// empty string check
BOOST_CHECK( trim_all_copy( string("") )=="" );
// general string test
trim_all( str1 );
BOOST_CHECK( str1=="1x x x x1" ) ;
trim_all_if( str2, is_punct() );
BOOST_CHECK( str2=="2x+x-x-x2" ) ;
// spaces-only string test
str3 = " "; trim_all( str3 );
BOOST_CHECK( str3=="" );
// empty string check
str3 = ""; trim_all( str3 );
BOOST_CHECK( str3=="" );
BOOST_CHECK( str3=="" );
// *** non-standard predicate tests *** //
BOOST_CHECK(
trim_all_copy_if(
string("123abc127deb456"),
is_classified(std::ctype_base::digit) )=="abc1deb" );
BOOST_CHECK( trim_all_copy_if( string("<>abc<>def<>"), is_any_of( "<<>>" ) )=="abc<def" );
}
// test main
int test_main( int, char*[] )
{
trim_test();
trim_all_test();
return 0;
}