adapting to new range interface

[SVN r38125]
This commit is contained in:
Pavol Droba
2007-07-01 22:23:55 +00:00
parent 614cc2ebab
commit b94a3fbfba
15 changed files with 206 additions and 190 deletions

View File

@ -14,9 +14,11 @@
#include <algorithm>
#include <locale>
#include <boost/range/value_type.hpp>
#include <boost/range/as_literal.hpp>
#include <boost/algorithm/string/detail/classification.hpp>
#include <boost/algorithm/string/predicate_facade.hpp>
/*! \file
Classification predicates are included in the library to give
some more convenience when using algorithms like \c trim() and \c all().
@ -201,7 +203,7 @@ namespace boost {
is_any_of( const RangeT& Set )
{
return detail::is_any_ofF<
BOOST_STRING_TYPENAME range_value<RangeT>::type>(Set);
BOOST_STRING_TYPENAME range_value<RangeT>::type>(as_literal(Set));
}
//! is_from_range predicate

View File

@ -27,20 +27,17 @@ namespace boost {
template<
typename OutputIteratorT,
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT >
inline OutputIteratorT find_format_copy_impl(
OutputIteratorT Output,
const InputT& Input,
FinderT Finder,
FormatterT Formatter,
const FindResultT& FindResult )
{
return find_format_copy_impl2(
Output,
Input,
Finder,
Formatter,
FindResult,
Formatter(FindResult) );
@ -49,14 +46,12 @@ namespace boost {
template<
typename OutputIteratorT,
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT,
typename FormatResultT >
inline OutputIteratorT find_format_copy_impl2(
OutputIteratorT Output,
const InputT& Input,
FinderT Finder,
FormatterT Formatter,
const FindResultT& FindResult,
const FormatResultT& FormatResult )
@ -92,18 +87,15 @@ namespace boost {
template<
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT >
inline InputT find_format_copy_impl(
const InputT& Input,
FinderT Finder,
FormatterT Formatter,
const FindResultT& FindResult)
{
return find_format_copy_impl2(
Input,
Finder,
Formatter,
FindResult,
Formatter(FindResult) );
@ -111,13 +103,11 @@ namespace boost {
template<
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT,
typename FormatResultT >
inline InputT find_format_copy_impl2(
const InputT& Input,
FinderT Finder,
FormatterT Formatter,
const FindResultT& FindResult,
const FormatResultT& FormatResult)
@ -152,18 +142,15 @@ namespace boost {
template<
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT >
inline void find_format_impl(
InputT& Input,
FinderT Finder,
FormatterT Formatter,
const FindResultT& FindResult)
{
find_format_impl2(
Input,
Finder,
Formatter,
FindResult,
Formatter(FindResult) );
@ -171,13 +158,11 @@ namespace boost {
template<
typename InputT,
typename FinderT,
typename FormatterT,
typename FindResultT,
typename FormatResultT >
inline void find_format_impl2(
InputT& Input,
FinderT,
FormatterT Formatter,
const FindResultT& FindResult,
const FormatResultT& FormatResult)

View File

@ -19,6 +19,7 @@
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/empty.hpp>
#include <boost/range/as_literal.hpp>
namespace boost {
namespace algorithm {

View File

@ -19,6 +19,7 @@
#include <boost/range/iterator.hpp>
#include <boost/range/const_iterator.hpp>
#include <boost/range/result_iterator.hpp>
#include <boost/range/as_literal.hpp>
#include <boost/algorithm/string/finder.hpp>
#include <boost/algorithm/string/compare.hpp>
@ -52,16 +53,18 @@ namespace boost {
BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>
find(
RangeT& Input,
FinderT Finder)
const FinderT& Finder)
{
return Finder(begin(Input),end(Input));
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));
return Finder(begin(lit_input),end(lit_input));
}
// find_first -----------------------------------------------//
//! Find first algorithm
/*!
Search for the first occurence of the substring in the input.
Search for the first occurrence of the substring in the input.
\param Input A string which will be searched.
\param Search A substring to be searched for.
@ -80,8 +83,7 @@ namespace boost {
Range1T& Input,
const Range2T& Search)
{
return first_finder(Search)(
begin(Input),end(Input));
return find(Input, first_finder(Search));
}
//! Find first algorithm ( case insensitive )
@ -108,15 +110,14 @@ namespace boost {
const Range2T& Search,
const std::locale& Loc=std::locale())
{
return first_finder(Search,is_iequal(Loc))(
begin(Input),end(Input));
return find(Input, first_finder(Search,is_iequal(Loc)));
}
// find_last -----------------------------------------------//
//! Find last algorithm
/*!
Search for the last occurence of the substring in the input.
Search for the last occurrence of the substring in the input.
\param Input A string which will be searched.
\param Search A substring to be searched for.
@ -135,8 +136,7 @@ namespace boost {
Range1T& Input,
const Range2T& Search)
{
return last_finder(Search)(
begin(Input),end(Input));
return find(Input, last_finder(Search));
}
//! Find last algorithm ( case insensitive )
@ -163,15 +163,14 @@ namespace boost {
const Range2T& Search,
const std::locale& Loc=std::locale())
{
return last_finder(Search, is_iequal(Loc))(
begin(Input),end(Input));
return find(Input, last_finder(Search, is_iequal(Loc)));
}
// find_nth ----------------------------------------------------------------------//
//! Find n-th algorithm
/*!
Search for the n-th (zero-indexed) occurence of the substring in the
Search for the n-th (zero-indexed) occurrence of the substring in the
input.
\param Input A string which will be searched.
@ -192,8 +191,7 @@ namespace boost {
const Range2T& Search,
int Nth)
{
return nth_finder(Search,Nth)(
begin(Input),end(Input));
return find(Input, nth_finder(Search,Nth));
}
//! Find n-th algorithm ( case insensitive ).
@ -224,8 +222,7 @@ namespace boost {
int Nth,
const std::locale& Loc=std::locale())
{
return nth_finder(Search,Nth,is_iequal(Loc))(
begin(Input),end(Input));
return find(Input, nth_finder(Search,Nth,is_iequal(Loc)));
}
// find_head ----------------------------------------------------------------------//
@ -255,8 +252,7 @@ namespace boost {
RangeT& Input,
int N)
{
return head_finder(N)(
begin(Input),end(Input));
return find(Input, head_finder(N));
}
// find_tail ----------------------------------------------------------------------//
@ -287,8 +283,7 @@ namespace boost {
RangeT& Input,
int N)
{
return tail_finder(N)(
begin(Input),end(Input));
return find(Input, tail_finder(N));
}
// find_token --------------------------------------------------------------------//
@ -318,8 +313,7 @@ namespace boost {
PredicateT Pred,
token_compress_mode_type eCompress=token_compress_off)
{
return token_finder(Pred, eCompress)(
begin(Input),end(Input));
return find(Input, token_finder(Pred, eCompress));
}
} // namespace algorithm

View File

@ -69,12 +69,13 @@ namespace boost {
FormatterT,
FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(as_literal(Input));
return detail::find_format_copy_impl(
Output,
Input,
Finder,
lit_input,
Formatter,
Finder( begin(Input), end(Input) ) );
Finder( begin(lit_input), end(lit_input) ) );
}
//! Generic replace algorithm
@ -101,7 +102,6 @@ namespace boost {
return detail::find_format_copy_impl(
Input,
Finder,
Formatter,
Finder(begin(Input), end(Input)));
}
@ -135,7 +135,6 @@ namespace boost {
detail::find_format_impl(
Input,
Finder,
Formatter,
Finder(begin(Input), end(Input)));
}
@ -180,12 +179,14 @@ namespace boost {
FormatterT,
FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(as_literal(Input));
return detail::find_format_all_copy_impl(
Output,
Input,
lit_input,
Finder,
Formatter,
Finder(begin(Input), end(Input)));
Finder(begin(lit_input), end(lit_input)));
}
//! Generic replace all algorithm

View File

@ -19,6 +19,7 @@
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/result_iterator.hpp>
#include <boost/range/as_literal.hpp>
#include <boost/algorithm/string/detail/find_iterator.hpp>
@ -116,10 +117,12 @@ namespace boost {
find_iterator(
RangeT& Col,
FinderT Finder ) :
detail::find_iterator_base<IteratorT>(Finder,0),
m_Match(begin(Col),begin(Col)),
m_End(end(Col))
detail::find_iterator_base<IteratorT>(Finder,0)
{
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col));
m_Match=make_iterator_range(begin(lit_col), begin(lit_col));
m_End=end(lit_col);
increment();
}
@ -188,7 +191,7 @@ namespace boost {
FinderT Finder)
{
return find_iterator<BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>(
begin(Collection), end(Collection), Finder);
Collection, Finder);
}
// split iterator -----------------------------------------------//
@ -280,11 +283,13 @@ namespace boost {
RangeT& Col,
FinderT Finder ) :
detail::find_iterator_base<IteratorT>(Finder,0),
m_Match(begin(Col),begin(Col)),
m_Next(begin(Col)),
m_End(end(Col)),
m_bEof(false)
{
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col));
m_Match=make_iterator_range(begin(lit_col), begin(lit_col));
m_Next=begin(lit_col);
m_End=end(lit_col);
increment();
}
@ -364,7 +369,7 @@ namespace boost {
FinderT Finder)
{
return split_iterator<BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>(
begin(Collection), end(Collection), Finder);
Collection, Finder);
}

View File

@ -46,35 +46,35 @@ namespace boost {
\param Comp An element comparison predicate
\return An instance of the \c first_finder object
*/
template<typename ContainerT>
template<typename RangeT>
inline detail::first_finderF<
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
is_equal>
first_finder( const ContainerT& Search )
first_finder( const RangeT& Search )
{
return
detail::first_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<ContainerT>::type,
is_equal>( Search, is_equal() ) ;
range_const_iterator<RangeT>::type,
is_equal>( as_literal(Search), is_equal() ) ;
}
//! "First" finder
/*!
\overload
*/
template<typename ContainerT,typename PredicateT>
template<typename RangeT,typename PredicateT>
inline detail::first_finderF<
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
PredicateT>
first_finder(
const ContainerT& Search, PredicateT Comp )
const RangeT& Search, PredicateT Comp )
{
return
detail::first_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<ContainerT>::type,
PredicateT>( Search, Comp );
range_const_iterator<RangeT>::type,
PredicateT>( as_literal(Search), Comp );
}
//! "Last" finder
@ -87,33 +87,33 @@ namespace boost {
\param Comp An element comparison predicate
\return An instance of the \c last_finder object
*/
template<typename ContainerT>
template<typename RangeT>
inline detail::last_finderF<
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
is_equal>
last_finder( const ContainerT& Search )
last_finder( const RangeT& Search )
{
return
detail::last_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<ContainerT>::type,
is_equal>( Search, is_equal() );
range_const_iterator<RangeT>::type,
is_equal>( as_literal(Search), is_equal() );
}
//! "Last" finder
/*!
\overload
*/
template<typename ContainerT, typename PredicateT>
template<typename RangeT, typename PredicateT>
inline detail::last_finderF<
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
PredicateT>
last_finder( const ContainerT& Search, PredicateT Comp )
last_finder( const RangeT& Search, PredicateT Comp )
{
return
detail::last_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<ContainerT>::type,
PredicateT>( Search, Comp ) ;
range_const_iterator<RangeT>::type,
PredicateT>( as_literal(Search), Comp ) ;
}
//! "Nth" finder
@ -127,38 +127,38 @@ namespace boost {
\param Comp An element comparison predicate
\return An instance of the \c nth_finder object
*/
template<typename ContainerT>
template<typename RangeT>
inline detail::nth_finderF<
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
is_equal>
nth_finder(
const ContainerT& Search,
const RangeT& Search,
int Nth)
{
return
detail::nth_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<ContainerT>::type,
is_equal>( Search, Nth, is_equal() ) ;
range_const_iterator<RangeT>::type,
is_equal>( as_literal(Search), Nth, is_equal() ) ;
}
//! "Nth" finder
/*!
\overload
*/
template<typename ContainerT, typename PredicateT>
template<typename RangeT, typename PredicateT>
inline detail::nth_finderF<
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
PredicateT>
nth_finder(
const ContainerT& Search,
const RangeT& Search,
int Nth,
PredicateT Comp )
{
return
detail::nth_finderF<
BOOST_STRING_TYPENAME
range_const_iterator<ContainerT>::type,
PredicateT>( Search, Nth, Comp );
range_const_iterator<RangeT>::type,
PredicateT>( as_literal(Search), Nth, Comp );
}
//! "Head" finder

View File

@ -14,6 +14,7 @@
#include <boost/detail/iterator.hpp>
#include <boost/range/value_type.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/range/as_literal.hpp>
#include <boost/algorithm/string/detail/formatter.hpp>
@ -42,10 +43,14 @@ namespace boost {
\return An instance of the \c const_formatter object.
*/
template<typename RangeT>
inline detail::const_formatF<RangeT>
inline detail::const_formatF<
iterator_range<
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
const_formatter(const RangeT& Format)
{
return detail::const_formatF<RangeT>(Format);
return detail::const_formatF<
iterator_range<
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >(as_literal(Format));
}
//! Identity formatter
@ -56,10 +61,14 @@ namespace boost {
\return An instance of the \c identity_formatter object.
*/
template<typename RangeT>
inline detail::identity_formatF<RangeT>
inline detail::identity_formatF<
iterator_range<
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
identity_formatter()
{
return detail::identity_formatF<RangeT>();
return detail::identity_formatF<
iterator_range<
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
}
//! Empty formatter

View File

@ -21,6 +21,7 @@
#include <boost/range/end.hpp>
#include <boost/range/result_iterator.hpp>
#include <boost/range/value_type.hpp>
#include <boost/range/as_literal.hpp>
#include <boost/algorithm/string/concept.hpp>
#include <boost/algorithm/string/find_iterator.hpp>
@ -77,6 +78,8 @@ namespace boost {
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type> >();
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));
typedef BOOST_STRING_TYPENAME
range_result_iterator<RangeT>::type input_iterator_type;
typedef find_iterator<input_iterator_type> find_iterator_type;
@ -85,14 +88,14 @@ namespace boost {
range_value<SequenceSequenceT>::type,
input_iterator_type> copy_range_type;
input_iterator_type InputEnd=end(Input);
input_iterator_type InputEnd=end(lit_input);
typedef transform_iterator<copy_range_type, find_iterator_type>
transform_iter_type;
transform_iter_type itBegin=
make_transform_iterator(
find_iterator_type( begin(Input), InputEnd, Finder ),
find_iterator_type( begin(lit_input), InputEnd, Finder ),
copy_range_type());
transform_iter_type itEnd=
@ -144,6 +147,8 @@ namespace boost {
FinderConcept<FinderT,
BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type> >();
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));
typedef BOOST_STRING_TYPENAME
range_result_iterator<RangeT>::type input_iterator_type;
typedef split_iterator<input_iterator_type> find_iterator_type;
@ -152,14 +157,14 @@ namespace boost {
range_value<SequenceSequenceT>::type,
input_iterator_type> copy_range_type;
input_iterator_type InputEnd=end(Input);
input_iterator_type InputEnd=end(lit_input);
typedef transform_iterator<copy_range_type, find_iterator_type>
transform_iter_type;
transform_iter_type itBegin=
make_transform_iterator(
find_iterator_type( begin(Input), InputEnd, Finder ),
find_iterator_type( begin(lit_input), InputEnd, Finder ),
copy_range_type() );
transform_iter_type itEnd=

View File

@ -45,7 +45,7 @@ namespace boost {
inline typename range_value<SequenceSequenceT>::type
join(
const SequenceSequenceT& Input,
Range1T& Separator)
const Range1T& Separator)
{
// Define working types
typedef typename range_value<SequenceSequenceT>::type ResultT;
@ -68,7 +68,7 @@ namespace boost {
for(;itBegin!=itEnd; ++itBegin)
{
// Add separator
detail::insert(Result, end(Result), Separator);
detail::insert(Result, end(Result), as_literal(Separator));
// Add element
detail::insert(Result, end(Result), *itBegin);
}
@ -95,7 +95,7 @@ namespace boost {
inline typename range_value<SequenceSequenceT>::type
join_if(
const SequenceSequenceT& Input,
Range1T& Separator,
const Range1T& Separator,
PredicateT Pred)
{
// Define working types
@ -123,7 +123,7 @@ namespace boost {
if(Pred(*itBegin))
{
// Add separator
detail::insert(Result, end(Result), Separator);
detail::insert(Result, end(Result), as_literal(Separator));
// Add element
detail::insert(Result, end(Result), *itBegin);
}

View File

@ -16,6 +16,8 @@
#include <boost/range/end.hpp>
#include <boost/range/iterator.hpp>
#include <boost/range/const_iterator.hpp>
#include <boost/range/as_literal.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/algorithm/string/compare.hpp>
#include <boost/algorithm/string/find.hpp>
@ -57,16 +59,19 @@ 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));
typedef BOOST_STRING_TYPENAME
range_const_iterator<Range1T>::type Iterator1T;
typedef BOOST_STRING_TYPENAME
range_const_iterator<Range2T>::type Iterator2T;
Iterator1T InputEnd=end(Input);
Iterator2T TestEnd=end(Test);
Iterator1T InputEnd=end(lit_input);
Iterator2T TestEnd=end(lit_test);
Iterator1T it=begin(Input);
Iterator2T pit=begin(Test);
Iterator1T it=begin(lit_input);
Iterator2T pit=begin(lit_test);
for(;
it!=InputEnd && pit!=TestEnd;
++it,++pit)
@ -136,6 +141,9 @@ 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));
typedef BOOST_STRING_TYPENAME
range_const_iterator<Range1T>::type Iterator1T;
typedef BOOST_STRING_TYPENAME boost::detail::
@ -143,10 +151,10 @@ namespace boost {
return detail::
ends_with_iter_select(
begin(Input),
end(Input),
begin(Test),
end(Test),
begin(lit_input),
end(lit_input),
begin(lit_test),
end(lit_test),
Comp,
category());
}
@ -207,14 +215,17 @@ namespace boost {
const Range2T& Test,
PredicateT Comp)
{
if (empty(Test))
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));
if (empty(lit_test))
{
// Empty range is contained always
return true;
}
// Use the temporary variable to make VACPP happy
bool bResult=(first_finder(Test,Comp)(begin(Input), end(Input)));
bool bResult=(first_finder(lit_test,Comp)(begin(lit_input), end(lit_input)));
return bResult;
}
@ -275,16 +286,19 @@ 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));
typedef BOOST_STRING_TYPENAME
range_const_iterator<Range1T>::type Iterator1T;
typedef BOOST_STRING_TYPENAME
range_const_iterator<Range2T>::type Iterator2T;
Iterator1T InputEnd=end(Input);
Iterator2T TestEnd=end(Test);
Iterator1T InputEnd=end(lit_input);
Iterator2T TestEnd=end(lit_test);
Iterator1T it=begin(Input);
Iterator2T pit=begin(Test);
Iterator1T it=begin(lit_input);
Iterator2T pit=begin(lit_test);
for(;
it!=InputEnd && pit!=TestEnd;
++it,++pit)
@ -358,11 +372,14 @@ 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));
return std::lexicographical_compare(
begin(Arg1),
end(Arg1),
begin(Arg2),
end(Arg2),
begin(lit_arg1),
end(lit_arg1),
begin(lit_arg2),
end(lit_arg2),
Pred);
}
@ -375,12 +392,7 @@ namespace boost {
const Range1T& Arg1,
const Range2T& Arg2)
{
return std::lexicographical_compare(
begin(Arg1),
end(Arg1),
begin(Arg2),
end(Arg2),
is_less());
return lexicographical_compare(Arg1, Arg2, is_less());
}
//! Lexicographical compare predicate (case-insensitive)
@ -394,6 +406,7 @@ namespace boost {
\param Arg1 First argument
\param Arg2 Second argument
\param Loc A locale used for case insensitive comparison
\return The result of the test
\note This function provides the strong exception-safety guarantee
@ -401,14 +414,10 @@ namespace boost {
template<typename Range1T, typename Range2T>
inline bool ilexicographical_compare(
const Range1T& Arg1,
const Range2T& Arg2)
const Range2T& Arg2,
const std::locale& Loc=std::locale())
{
return std::lexicographical_compare(
begin(Arg1),
end(Arg1),
begin(Arg2),
end(Arg2),
is_iless());
return lexicographical_compare(Arg1, Arg2, is_iless(Loc));
}
@ -430,11 +439,13 @@ namespace boost {
const RangeT& Input,
PredicateT Pred)
{
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(as_literal(Input));
typedef BOOST_STRING_TYPENAME
range_const_iterator<RangeT>::type Iterator1T;
Iterator1T InputEnd=end(Input);
for( Iterator1T It=begin(Input); It!=InputEnd; ++It)
Iterator1T InputEnd=end(lit_input);
for( Iterator1T It=begin(lit_input); It!=InputEnd; ++It)
{
if (!Pred(*It))
return false;

View File

@ -18,6 +18,7 @@
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/result_iterator.hpp>
#include <boost/range/as_literal.hpp>
#include <boost/algorithm/string/find_format.hpp>
#include <boost/algorithm/string/regex_find_format.hpp>
@ -59,8 +60,10 @@ 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));
return regex_finder(Rx,Flags)(
begin(Input), end(Input) );
begin(lit_input), end(lit_input) );
}
// replace_regex --------------------------------------------------------------------//
@ -503,7 +506,7 @@ namespace boost {
inline typename range_value<SequenceSequenceT>::type
join_if(
const SequenceSequenceT& Input,
Range1T& Separator,
const Range1T& Separator,
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
@ -536,7 +539,7 @@ namespace boost {
if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
{
// Add separator
detail::insert(Result, end(Result), Separator);
detail::insert(Result, end(Result), as_literal(Separator));
// Add element
detail::insert(Result, end(Result), *itBegin);
}
@ -571,7 +574,7 @@ namespace boost {
inline typename range_value<SequenceSequenceT>::type
join_if_regex(
const SequenceSequenceT& Input,
Range1T& Separator,
const Range1T& Separator,
const basic_regex<CharT, RegexTraitsT>& Rx,
match_flag_type Flags=match_default )
{
@ -604,7 +607,7 @@ namespace boost {
if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
{
// Add separator
detail::insert(Result, end(Result), Separator);
detail::insert(Result, end(Result), as_literal(Separator));
// Add element
detail::insert(Result, end(Result), *itBegin);
}