mirror of
https://github.com/boostorg/algorithm.git
synced 2025-07-01 23:11:00 +02:00
adapting to new range interface
[SVN r38125]
This commit is contained in:
@ -14,9 +14,11 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <locale>
|
#include <locale>
|
||||||
#include <boost/range/value_type.hpp>
|
#include <boost/range/value_type.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
#include <boost/algorithm/string/detail/classification.hpp>
|
#include <boost/algorithm/string/detail/classification.hpp>
|
||||||
#include <boost/algorithm/string/predicate_facade.hpp>
|
#include <boost/algorithm/string/predicate_facade.hpp>
|
||||||
|
|
||||||
|
|
||||||
/*! \file
|
/*! \file
|
||||||
Classification predicates are included in the library to give
|
Classification predicates are included in the library to give
|
||||||
some more convenience when using algorithms like \c trim() and \c all().
|
some more convenience when using algorithms like \c trim() and \c all().
|
||||||
@ -201,7 +203,7 @@ namespace boost {
|
|||||||
is_any_of( const RangeT& Set )
|
is_any_of( const RangeT& Set )
|
||||||
{
|
{
|
||||||
return detail::is_any_ofF<
|
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
|
//! is_from_range predicate
|
||||||
|
@ -27,20 +27,17 @@ namespace boost {
|
|||||||
template<
|
template<
|
||||||
typename OutputIteratorT,
|
typename OutputIteratorT,
|
||||||
typename InputT,
|
typename InputT,
|
||||||
typename FinderT,
|
|
||||||
typename FormatterT,
|
typename FormatterT,
|
||||||
typename FindResultT >
|
typename FindResultT >
|
||||||
inline OutputIteratorT find_format_copy_impl(
|
inline OutputIteratorT find_format_copy_impl(
|
||||||
OutputIteratorT Output,
|
OutputIteratorT Output,
|
||||||
const InputT& Input,
|
const InputT& Input,
|
||||||
FinderT Finder,
|
|
||||||
FormatterT Formatter,
|
FormatterT Formatter,
|
||||||
const FindResultT& FindResult )
|
const FindResultT& FindResult )
|
||||||
{
|
{
|
||||||
return find_format_copy_impl2(
|
return find_format_copy_impl2(
|
||||||
Output,
|
Output,
|
||||||
Input,
|
Input,
|
||||||
Finder,
|
|
||||||
Formatter,
|
Formatter,
|
||||||
FindResult,
|
FindResult,
|
||||||
Formatter(FindResult) );
|
Formatter(FindResult) );
|
||||||
@ -49,14 +46,12 @@ namespace boost {
|
|||||||
template<
|
template<
|
||||||
typename OutputIteratorT,
|
typename OutputIteratorT,
|
||||||
typename InputT,
|
typename InputT,
|
||||||
typename FinderT,
|
|
||||||
typename FormatterT,
|
typename FormatterT,
|
||||||
typename FindResultT,
|
typename FindResultT,
|
||||||
typename FormatResultT >
|
typename FormatResultT >
|
||||||
inline OutputIteratorT find_format_copy_impl2(
|
inline OutputIteratorT find_format_copy_impl2(
|
||||||
OutputIteratorT Output,
|
OutputIteratorT Output,
|
||||||
const InputT& Input,
|
const InputT& Input,
|
||||||
FinderT Finder,
|
|
||||||
FormatterT Formatter,
|
FormatterT Formatter,
|
||||||
const FindResultT& FindResult,
|
const FindResultT& FindResult,
|
||||||
const FormatResultT& FormatResult )
|
const FormatResultT& FormatResult )
|
||||||
@ -92,18 +87,15 @@ namespace boost {
|
|||||||
|
|
||||||
template<
|
template<
|
||||||
typename InputT,
|
typename InputT,
|
||||||
typename FinderT,
|
|
||||||
typename FormatterT,
|
typename FormatterT,
|
||||||
typename FindResultT >
|
typename FindResultT >
|
||||||
inline InputT find_format_copy_impl(
|
inline InputT find_format_copy_impl(
|
||||||
const InputT& Input,
|
const InputT& Input,
|
||||||
FinderT Finder,
|
|
||||||
FormatterT Formatter,
|
FormatterT Formatter,
|
||||||
const FindResultT& FindResult)
|
const FindResultT& FindResult)
|
||||||
{
|
{
|
||||||
return find_format_copy_impl2(
|
return find_format_copy_impl2(
|
||||||
Input,
|
Input,
|
||||||
Finder,
|
|
||||||
Formatter,
|
Formatter,
|
||||||
FindResult,
|
FindResult,
|
||||||
Formatter(FindResult) );
|
Formatter(FindResult) );
|
||||||
@ -111,13 +103,11 @@ namespace boost {
|
|||||||
|
|
||||||
template<
|
template<
|
||||||
typename InputT,
|
typename InputT,
|
||||||
typename FinderT,
|
|
||||||
typename FormatterT,
|
typename FormatterT,
|
||||||
typename FindResultT,
|
typename FindResultT,
|
||||||
typename FormatResultT >
|
typename FormatResultT >
|
||||||
inline InputT find_format_copy_impl2(
|
inline InputT find_format_copy_impl2(
|
||||||
const InputT& Input,
|
const InputT& Input,
|
||||||
FinderT Finder,
|
|
||||||
FormatterT Formatter,
|
FormatterT Formatter,
|
||||||
const FindResultT& FindResult,
|
const FindResultT& FindResult,
|
||||||
const FormatResultT& FormatResult)
|
const FormatResultT& FormatResult)
|
||||||
@ -152,18 +142,15 @@ namespace boost {
|
|||||||
|
|
||||||
template<
|
template<
|
||||||
typename InputT,
|
typename InputT,
|
||||||
typename FinderT,
|
|
||||||
typename FormatterT,
|
typename FormatterT,
|
||||||
typename FindResultT >
|
typename FindResultT >
|
||||||
inline void find_format_impl(
|
inline void find_format_impl(
|
||||||
InputT& Input,
|
InputT& Input,
|
||||||
FinderT Finder,
|
|
||||||
FormatterT Formatter,
|
FormatterT Formatter,
|
||||||
const FindResultT& FindResult)
|
const FindResultT& FindResult)
|
||||||
{
|
{
|
||||||
find_format_impl2(
|
find_format_impl2(
|
||||||
Input,
|
Input,
|
||||||
Finder,
|
|
||||||
Formatter,
|
Formatter,
|
||||||
FindResult,
|
FindResult,
|
||||||
Formatter(FindResult) );
|
Formatter(FindResult) );
|
||||||
@ -171,13 +158,11 @@ namespace boost {
|
|||||||
|
|
||||||
template<
|
template<
|
||||||
typename InputT,
|
typename InputT,
|
||||||
typename FinderT,
|
|
||||||
typename FormatterT,
|
typename FormatterT,
|
||||||
typename FindResultT,
|
typename FindResultT,
|
||||||
typename FormatResultT >
|
typename FormatResultT >
|
||||||
inline void find_format_impl2(
|
inline void find_format_impl2(
|
||||||
InputT& Input,
|
InputT& Input,
|
||||||
FinderT,
|
|
||||||
FormatterT Formatter,
|
FormatterT Formatter,
|
||||||
const FindResultT& FindResult,
|
const FindResultT& FindResult,
|
||||||
const FormatResultT& FormatResult)
|
const FormatResultT& FormatResult)
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
#include <boost/range/empty.hpp>
|
#include <boost/range/empty.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace algorithm {
|
namespace algorithm {
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <boost/range/iterator.hpp>
|
#include <boost/range/iterator.hpp>
|
||||||
#include <boost/range/const_iterator.hpp>
|
#include <boost/range/const_iterator.hpp>
|
||||||
#include <boost/range/result_iterator.hpp>
|
#include <boost/range/result_iterator.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
|
||||||
#include <boost/algorithm/string/finder.hpp>
|
#include <boost/algorithm/string/finder.hpp>
|
||||||
#include <boost/algorithm/string/compare.hpp>
|
#include <boost/algorithm/string/compare.hpp>
|
||||||
@ -52,16 +53,18 @@ namespace boost {
|
|||||||
BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>
|
BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>
|
||||||
find(
|
find(
|
||||||
RangeT& Input,
|
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 -----------------------------------------------//
|
||||||
|
|
||||||
//! Find first algorithm
|
//! 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 Input A string which will be searched.
|
||||||
\param Search A substring to be searched for.
|
\param Search A substring to be searched for.
|
||||||
@ -80,8 +83,7 @@ namespace boost {
|
|||||||
Range1T& Input,
|
Range1T& Input,
|
||||||
const Range2T& Search)
|
const Range2T& Search)
|
||||||
{
|
{
|
||||||
return first_finder(Search)(
|
return find(Input, first_finder(Search));
|
||||||
begin(Input),end(Input));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Find first algorithm ( case insensitive )
|
//! Find first algorithm ( case insensitive )
|
||||||
@ -108,15 +110,14 @@ namespace boost {
|
|||||||
const Range2T& Search,
|
const Range2T& Search,
|
||||||
const std::locale& Loc=std::locale())
|
const std::locale& Loc=std::locale())
|
||||||
{
|
{
|
||||||
return first_finder(Search,is_iequal(Loc))(
|
return find(Input, first_finder(Search,is_iequal(Loc)));
|
||||||
begin(Input),end(Input));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// find_last -----------------------------------------------//
|
// find_last -----------------------------------------------//
|
||||||
|
|
||||||
//! Find last algorithm
|
//! 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 Input A string which will be searched.
|
||||||
\param Search A substring to be searched for.
|
\param Search A substring to be searched for.
|
||||||
@ -135,8 +136,7 @@ namespace boost {
|
|||||||
Range1T& Input,
|
Range1T& Input,
|
||||||
const Range2T& Search)
|
const Range2T& Search)
|
||||||
{
|
{
|
||||||
return last_finder(Search)(
|
return find(Input, last_finder(Search));
|
||||||
begin(Input),end(Input));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Find last algorithm ( case insensitive )
|
//! Find last algorithm ( case insensitive )
|
||||||
@ -163,15 +163,14 @@ namespace boost {
|
|||||||
const Range2T& Search,
|
const Range2T& Search,
|
||||||
const std::locale& Loc=std::locale())
|
const std::locale& Loc=std::locale())
|
||||||
{
|
{
|
||||||
return last_finder(Search, is_iequal(Loc))(
|
return find(Input, last_finder(Search, is_iequal(Loc)));
|
||||||
begin(Input),end(Input));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// find_nth ----------------------------------------------------------------------//
|
// find_nth ----------------------------------------------------------------------//
|
||||||
|
|
||||||
//! Find n-th algorithm
|
//! 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.
|
input.
|
||||||
|
|
||||||
\param Input A string which will be searched.
|
\param Input A string which will be searched.
|
||||||
@ -192,8 +191,7 @@ namespace boost {
|
|||||||
const Range2T& Search,
|
const Range2T& Search,
|
||||||
int Nth)
|
int Nth)
|
||||||
{
|
{
|
||||||
return nth_finder(Search,Nth)(
|
return find(Input, nth_finder(Search,Nth));
|
||||||
begin(Input),end(Input));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Find n-th algorithm ( case insensitive ).
|
//! Find n-th algorithm ( case insensitive ).
|
||||||
@ -224,8 +222,7 @@ namespace boost {
|
|||||||
int Nth,
|
int Nth,
|
||||||
const std::locale& Loc=std::locale())
|
const std::locale& Loc=std::locale())
|
||||||
{
|
{
|
||||||
return nth_finder(Search,Nth,is_iequal(Loc))(
|
return find(Input, nth_finder(Search,Nth,is_iequal(Loc)));
|
||||||
begin(Input),end(Input));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// find_head ----------------------------------------------------------------------//
|
// find_head ----------------------------------------------------------------------//
|
||||||
@ -255,8 +252,7 @@ namespace boost {
|
|||||||
RangeT& Input,
|
RangeT& Input,
|
||||||
int N)
|
int N)
|
||||||
{
|
{
|
||||||
return head_finder(N)(
|
return find(Input, head_finder(N));
|
||||||
begin(Input),end(Input));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// find_tail ----------------------------------------------------------------------//
|
// find_tail ----------------------------------------------------------------------//
|
||||||
@ -287,8 +283,7 @@ namespace boost {
|
|||||||
RangeT& Input,
|
RangeT& Input,
|
||||||
int N)
|
int N)
|
||||||
{
|
{
|
||||||
return tail_finder(N)(
|
return find(Input, tail_finder(N));
|
||||||
begin(Input),end(Input));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// find_token --------------------------------------------------------------------//
|
// find_token --------------------------------------------------------------------//
|
||||||
@ -318,8 +313,7 @@ namespace boost {
|
|||||||
PredicateT Pred,
|
PredicateT Pred,
|
||||||
token_compress_mode_type eCompress=token_compress_off)
|
token_compress_mode_type eCompress=token_compress_off)
|
||||||
{
|
{
|
||||||
return token_finder(Pred, eCompress)(
|
return find(Input, token_finder(Pred, eCompress));
|
||||||
begin(Input),end(Input));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace algorithm
|
} // namespace algorithm
|
||||||
|
@ -69,12 +69,13 @@ namespace boost {
|
|||||||
FormatterT,
|
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));
|
||||||
|
|
||||||
return detail::find_format_copy_impl(
|
return detail::find_format_copy_impl(
|
||||||
Output,
|
Output,
|
||||||
Input,
|
lit_input,
|
||||||
Finder,
|
|
||||||
Formatter,
|
Formatter,
|
||||||
Finder( begin(Input), end(Input) ) );
|
Finder( begin(lit_input), end(lit_input) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Generic replace algorithm
|
//! Generic replace algorithm
|
||||||
@ -101,7 +102,6 @@ namespace boost {
|
|||||||
|
|
||||||
return detail::find_format_copy_impl(
|
return detail::find_format_copy_impl(
|
||||||
Input,
|
Input,
|
||||||
Finder,
|
|
||||||
Formatter,
|
Formatter,
|
||||||
Finder(begin(Input), end(Input)));
|
Finder(begin(Input), end(Input)));
|
||||||
}
|
}
|
||||||
@ -135,7 +135,6 @@ namespace boost {
|
|||||||
|
|
||||||
detail::find_format_impl(
|
detail::find_format_impl(
|
||||||
Input,
|
Input,
|
||||||
Finder,
|
|
||||||
Formatter,
|
Formatter,
|
||||||
Finder(begin(Input), end(Input)));
|
Finder(begin(Input), end(Input)));
|
||||||
}
|
}
|
||||||
@ -180,12 +179,14 @@ namespace boost {
|
|||||||
FormatterT,
|
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));
|
||||||
|
|
||||||
return detail::find_format_all_copy_impl(
|
return detail::find_format_all_copy_impl(
|
||||||
Output,
|
Output,
|
||||||
Input,
|
lit_input,
|
||||||
Finder,
|
Finder,
|
||||||
Formatter,
|
Formatter,
|
||||||
Finder(begin(Input), end(Input)));
|
Finder(begin(lit_input), end(lit_input)));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Generic replace all algorithm
|
//! Generic replace all algorithm
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
#include <boost/range/result_iterator.hpp>
|
#include <boost/range/result_iterator.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
|
||||||
#include <boost/algorithm/string/detail/find_iterator.hpp>
|
#include <boost/algorithm/string/detail/find_iterator.hpp>
|
||||||
|
|
||||||
@ -116,10 +117,12 @@ namespace boost {
|
|||||||
find_iterator(
|
find_iterator(
|
||||||
RangeT& Col,
|
RangeT& Col,
|
||||||
FinderT Finder ) :
|
FinderT Finder ) :
|
||||||
detail::find_iterator_base<IteratorT>(Finder,0),
|
detail::find_iterator_base<IteratorT>(Finder,0)
|
||||||
m_Match(begin(Col),begin(Col)),
|
|
||||||
m_End(end(Col))
|
|
||||||
{
|
{
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col));
|
||||||
|
m_Match=make_iterator_range(begin(lit_col), begin(lit_col));
|
||||||
|
m_End=end(lit_col);
|
||||||
|
|
||||||
increment();
|
increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +191,7 @@ namespace boost {
|
|||||||
FinderT Finder)
|
FinderT Finder)
|
||||||
{
|
{
|
||||||
return find_iterator<BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>(
|
return find_iterator<BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>(
|
||||||
begin(Collection), end(Collection), Finder);
|
Collection, Finder);
|
||||||
}
|
}
|
||||||
|
|
||||||
// split iterator -----------------------------------------------//
|
// split iterator -----------------------------------------------//
|
||||||
@ -280,11 +283,13 @@ namespace boost {
|
|||||||
RangeT& Col,
|
RangeT& Col,
|
||||||
FinderT Finder ) :
|
FinderT Finder ) :
|
||||||
detail::find_iterator_base<IteratorT>(Finder,0),
|
detail::find_iterator_base<IteratorT>(Finder,0),
|
||||||
m_Match(begin(Col),begin(Col)),
|
|
||||||
m_Next(begin(Col)),
|
|
||||||
m_End(end(Col)),
|
|
||||||
m_bEof(false)
|
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();
|
increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -364,7 +369,7 @@ namespace boost {
|
|||||||
FinderT Finder)
|
FinderT Finder)
|
||||||
{
|
{
|
||||||
return split_iterator<BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>(
|
return split_iterator<BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>(
|
||||||
begin(Collection), end(Collection), Finder);
|
Collection, Finder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,35 +46,35 @@ namespace boost {
|
|||||||
\param Comp An element comparison predicate
|
\param Comp An element comparison predicate
|
||||||
\return An instance of the \c first_finder object
|
\return An instance of the \c first_finder object
|
||||||
*/
|
*/
|
||||||
template<typename ContainerT>
|
template<typename RangeT>
|
||||||
inline detail::first_finderF<
|
inline detail::first_finderF<
|
||||||
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
is_equal>
|
is_equal>
|
||||||
first_finder( const ContainerT& Search )
|
first_finder( const RangeT& Search )
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
detail::first_finderF<
|
detail::first_finderF<
|
||||||
BOOST_STRING_TYPENAME
|
BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<ContainerT>::type,
|
range_const_iterator<RangeT>::type,
|
||||||
is_equal>( Search, is_equal() ) ;
|
is_equal>( as_literal(Search), is_equal() ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! "First" finder
|
//! "First" finder
|
||||||
/*!
|
/*!
|
||||||
\overload
|
\overload
|
||||||
*/
|
*/
|
||||||
template<typename ContainerT,typename PredicateT>
|
template<typename RangeT,typename PredicateT>
|
||||||
inline detail::first_finderF<
|
inline detail::first_finderF<
|
||||||
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
PredicateT>
|
PredicateT>
|
||||||
first_finder(
|
first_finder(
|
||||||
const ContainerT& Search, PredicateT Comp )
|
const RangeT& Search, PredicateT Comp )
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
detail::first_finderF<
|
detail::first_finderF<
|
||||||
BOOST_STRING_TYPENAME
|
BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<ContainerT>::type,
|
range_const_iterator<RangeT>::type,
|
||||||
PredicateT>( Search, Comp );
|
PredicateT>( as_literal(Search), Comp );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! "Last" finder
|
//! "Last" finder
|
||||||
@ -87,33 +87,33 @@ namespace boost {
|
|||||||
\param Comp An element comparison predicate
|
\param Comp An element comparison predicate
|
||||||
\return An instance of the \c last_finder object
|
\return An instance of the \c last_finder object
|
||||||
*/
|
*/
|
||||||
template<typename ContainerT>
|
template<typename RangeT>
|
||||||
inline detail::last_finderF<
|
inline detail::last_finderF<
|
||||||
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
is_equal>
|
is_equal>
|
||||||
last_finder( const ContainerT& Search )
|
last_finder( const RangeT& Search )
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
detail::last_finderF<
|
detail::last_finderF<
|
||||||
BOOST_STRING_TYPENAME
|
BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<ContainerT>::type,
|
range_const_iterator<RangeT>::type,
|
||||||
is_equal>( Search, is_equal() );
|
is_equal>( as_literal(Search), is_equal() );
|
||||||
}
|
}
|
||||||
//! "Last" finder
|
//! "Last" finder
|
||||||
/*!
|
/*!
|
||||||
\overload
|
\overload
|
||||||
*/
|
*/
|
||||||
template<typename ContainerT, typename PredicateT>
|
template<typename RangeT, typename PredicateT>
|
||||||
inline detail::last_finderF<
|
inline detail::last_finderF<
|
||||||
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
PredicateT>
|
PredicateT>
|
||||||
last_finder( const ContainerT& Search, PredicateT Comp )
|
last_finder( const RangeT& Search, PredicateT Comp )
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
detail::last_finderF<
|
detail::last_finderF<
|
||||||
BOOST_STRING_TYPENAME
|
BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<ContainerT>::type,
|
range_const_iterator<RangeT>::type,
|
||||||
PredicateT>( Search, Comp ) ;
|
PredicateT>( as_literal(Search), Comp ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! "Nth" finder
|
//! "Nth" finder
|
||||||
@ -127,38 +127,38 @@ namespace boost {
|
|||||||
\param Comp An element comparison predicate
|
\param Comp An element comparison predicate
|
||||||
\return An instance of the \c nth_finder object
|
\return An instance of the \c nth_finder object
|
||||||
*/
|
*/
|
||||||
template<typename ContainerT>
|
template<typename RangeT>
|
||||||
inline detail::nth_finderF<
|
inline detail::nth_finderF<
|
||||||
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
is_equal>
|
is_equal>
|
||||||
nth_finder(
|
nth_finder(
|
||||||
const ContainerT& Search,
|
const RangeT& Search,
|
||||||
int Nth)
|
int Nth)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
detail::nth_finderF<
|
detail::nth_finderF<
|
||||||
BOOST_STRING_TYPENAME
|
BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<ContainerT>::type,
|
range_const_iterator<RangeT>::type,
|
||||||
is_equal>( Search, Nth, is_equal() ) ;
|
is_equal>( as_literal(Search), Nth, is_equal() ) ;
|
||||||
}
|
}
|
||||||
//! "Nth" finder
|
//! "Nth" finder
|
||||||
/*!
|
/*!
|
||||||
\overload
|
\overload
|
||||||
*/
|
*/
|
||||||
template<typename ContainerT, typename PredicateT>
|
template<typename RangeT, typename PredicateT>
|
||||||
inline detail::nth_finderF<
|
inline detail::nth_finderF<
|
||||||
BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
PredicateT>
|
PredicateT>
|
||||||
nth_finder(
|
nth_finder(
|
||||||
const ContainerT& Search,
|
const RangeT& Search,
|
||||||
int Nth,
|
int Nth,
|
||||||
PredicateT Comp )
|
PredicateT Comp )
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
detail::nth_finderF<
|
detail::nth_finderF<
|
||||||
BOOST_STRING_TYPENAME
|
BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<ContainerT>::type,
|
range_const_iterator<RangeT>::type,
|
||||||
PredicateT>( Search, Nth, Comp );
|
PredicateT>( as_literal(Search), Nth, Comp );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! "Head" finder
|
//! "Head" finder
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <boost/detail/iterator.hpp>
|
#include <boost/detail/iterator.hpp>
|
||||||
#include <boost/range/value_type.hpp>
|
#include <boost/range/value_type.hpp>
|
||||||
#include <boost/range/iterator_range.hpp>
|
#include <boost/range/iterator_range.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
|
||||||
#include <boost/algorithm/string/detail/formatter.hpp>
|
#include <boost/algorithm/string/detail/formatter.hpp>
|
||||||
|
|
||||||
@ -42,10 +43,14 @@ namespace boost {
|
|||||||
\return An instance of the \c const_formatter object.
|
\return An instance of the \c const_formatter object.
|
||||||
*/
|
*/
|
||||||
template<typename RangeT>
|
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)
|
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
|
//! Identity formatter
|
||||||
@ -56,10 +61,14 @@ namespace boost {
|
|||||||
\return An instance of the \c identity_formatter object.
|
\return An instance of the \c identity_formatter object.
|
||||||
*/
|
*/
|
||||||
template<typename RangeT>
|
template<typename RangeT>
|
||||||
inline detail::identity_formatF<RangeT>
|
inline detail::identity_formatF<
|
||||||
|
iterator_range<
|
||||||
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
|
||||||
identity_formatter()
|
identity_formatter()
|
||||||
{
|
{
|
||||||
return detail::identity_formatF<RangeT>();
|
return detail::identity_formatF<
|
||||||
|
iterator_range<
|
||||||
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Empty formatter
|
//! Empty formatter
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
#include <boost/range/result_iterator.hpp>
|
#include <boost/range/result_iterator.hpp>
|
||||||
#include <boost/range/value_type.hpp>
|
#include <boost/range/value_type.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
|
||||||
#include <boost/algorithm/string/concept.hpp>
|
#include <boost/algorithm/string/concept.hpp>
|
||||||
#include <boost/algorithm/string/find_iterator.hpp>
|
#include <boost/algorithm/string/find_iterator.hpp>
|
||||||
@ -77,6 +78,8 @@ namespace boost {
|
|||||||
FinderConcept<FinderT,
|
FinderConcept<FinderT,
|
||||||
BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type> >();
|
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
|
typedef BOOST_STRING_TYPENAME
|
||||||
range_result_iterator<RangeT>::type input_iterator_type;
|
range_result_iterator<RangeT>::type input_iterator_type;
|
||||||
typedef find_iterator<input_iterator_type> find_iterator_type;
|
typedef find_iterator<input_iterator_type> find_iterator_type;
|
||||||
@ -85,14 +88,14 @@ namespace boost {
|
|||||||
range_value<SequenceSequenceT>::type,
|
range_value<SequenceSequenceT>::type,
|
||||||
input_iterator_type> copy_range_type;
|
input_iterator_type> copy_range_type;
|
||||||
|
|
||||||
input_iterator_type InputEnd=end(Input);
|
input_iterator_type InputEnd=end(lit_input);
|
||||||
|
|
||||||
typedef transform_iterator<copy_range_type, find_iterator_type>
|
typedef transform_iterator<copy_range_type, find_iterator_type>
|
||||||
transform_iter_type;
|
transform_iter_type;
|
||||||
|
|
||||||
transform_iter_type itBegin=
|
transform_iter_type itBegin=
|
||||||
make_transform_iterator(
|
make_transform_iterator(
|
||||||
find_iterator_type( begin(Input), InputEnd, Finder ),
|
find_iterator_type( begin(lit_input), InputEnd, Finder ),
|
||||||
copy_range_type());
|
copy_range_type());
|
||||||
|
|
||||||
transform_iter_type itEnd=
|
transform_iter_type itEnd=
|
||||||
@ -144,6 +147,8 @@ namespace boost {
|
|||||||
FinderConcept<FinderT,
|
FinderConcept<FinderT,
|
||||||
BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type> >();
|
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
|
typedef BOOST_STRING_TYPENAME
|
||||||
range_result_iterator<RangeT>::type input_iterator_type;
|
range_result_iterator<RangeT>::type input_iterator_type;
|
||||||
typedef split_iterator<input_iterator_type> find_iterator_type;
|
typedef split_iterator<input_iterator_type> find_iterator_type;
|
||||||
@ -152,14 +157,14 @@ namespace boost {
|
|||||||
range_value<SequenceSequenceT>::type,
|
range_value<SequenceSequenceT>::type,
|
||||||
input_iterator_type> copy_range_type;
|
input_iterator_type> copy_range_type;
|
||||||
|
|
||||||
input_iterator_type InputEnd=end(Input);
|
input_iterator_type InputEnd=end(lit_input);
|
||||||
|
|
||||||
typedef transform_iterator<copy_range_type, find_iterator_type>
|
typedef transform_iterator<copy_range_type, find_iterator_type>
|
||||||
transform_iter_type;
|
transform_iter_type;
|
||||||
|
|
||||||
transform_iter_type itBegin=
|
transform_iter_type itBegin=
|
||||||
make_transform_iterator(
|
make_transform_iterator(
|
||||||
find_iterator_type( begin(Input), InputEnd, Finder ),
|
find_iterator_type( begin(lit_input), InputEnd, Finder ),
|
||||||
copy_range_type() );
|
copy_range_type() );
|
||||||
|
|
||||||
transform_iter_type itEnd=
|
transform_iter_type itEnd=
|
||||||
|
@ -45,7 +45,7 @@ namespace boost {
|
|||||||
inline typename range_value<SequenceSequenceT>::type
|
inline typename range_value<SequenceSequenceT>::type
|
||||||
join(
|
join(
|
||||||
const SequenceSequenceT& Input,
|
const SequenceSequenceT& Input,
|
||||||
Range1T& Separator)
|
const Range1T& Separator)
|
||||||
{
|
{
|
||||||
// Define working types
|
// Define working types
|
||||||
typedef typename range_value<SequenceSequenceT>::type ResultT;
|
typedef typename range_value<SequenceSequenceT>::type ResultT;
|
||||||
@ -68,7 +68,7 @@ namespace boost {
|
|||||||
for(;itBegin!=itEnd; ++itBegin)
|
for(;itBegin!=itEnd; ++itBegin)
|
||||||
{
|
{
|
||||||
// Add separator
|
// Add separator
|
||||||
detail::insert(Result, end(Result), Separator);
|
detail::insert(Result, end(Result), as_literal(Separator));
|
||||||
// Add element
|
// Add element
|
||||||
detail::insert(Result, end(Result), *itBegin);
|
detail::insert(Result, end(Result), *itBegin);
|
||||||
}
|
}
|
||||||
@ -95,7 +95,7 @@ namespace boost {
|
|||||||
inline typename range_value<SequenceSequenceT>::type
|
inline typename range_value<SequenceSequenceT>::type
|
||||||
join_if(
|
join_if(
|
||||||
const SequenceSequenceT& Input,
|
const SequenceSequenceT& Input,
|
||||||
Range1T& Separator,
|
const Range1T& Separator,
|
||||||
PredicateT Pred)
|
PredicateT Pred)
|
||||||
{
|
{
|
||||||
// Define working types
|
// Define working types
|
||||||
@ -123,7 +123,7 @@ namespace boost {
|
|||||||
if(Pred(*itBegin))
|
if(Pred(*itBegin))
|
||||||
{
|
{
|
||||||
// Add separator
|
// Add separator
|
||||||
detail::insert(Result, end(Result), Separator);
|
detail::insert(Result, end(Result), as_literal(Separator));
|
||||||
// Add element
|
// Add element
|
||||||
detail::insert(Result, end(Result), *itBegin);
|
detail::insert(Result, end(Result), *itBegin);
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
#include <boost/range/iterator.hpp>
|
#include <boost/range/iterator.hpp>
|
||||||
#include <boost/range/const_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/compare.hpp>
|
||||||
#include <boost/algorithm/string/find.hpp>
|
#include <boost/algorithm/string/find.hpp>
|
||||||
@ -57,16 +59,19 @@ namespace boost {
|
|||||||
const Range2T& Test,
|
const Range2T& Test,
|
||||||
PredicateT Comp)
|
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
|
typedef BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<Range1T>::type Iterator1T;
|
range_const_iterator<Range1T>::type Iterator1T;
|
||||||
typedef BOOST_STRING_TYPENAME
|
typedef BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<Range2T>::type Iterator2T;
|
range_const_iterator<Range2T>::type Iterator2T;
|
||||||
|
|
||||||
Iterator1T InputEnd=end(Input);
|
Iterator1T InputEnd=end(lit_input);
|
||||||
Iterator2T TestEnd=end(Test);
|
Iterator2T TestEnd=end(lit_test);
|
||||||
|
|
||||||
Iterator1T it=begin(Input);
|
Iterator1T it=begin(lit_input);
|
||||||
Iterator2T pit=begin(Test);
|
Iterator2T pit=begin(lit_test);
|
||||||
for(;
|
for(;
|
||||||
it!=InputEnd && pit!=TestEnd;
|
it!=InputEnd && pit!=TestEnd;
|
||||||
++it,++pit)
|
++it,++pit)
|
||||||
@ -136,6 +141,9 @@ namespace boost {
|
|||||||
const Range2T& Test,
|
const Range2T& Test,
|
||||||
PredicateT Comp)
|
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
|
typedef BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<Range1T>::type Iterator1T;
|
range_const_iterator<Range1T>::type Iterator1T;
|
||||||
typedef BOOST_STRING_TYPENAME boost::detail::
|
typedef BOOST_STRING_TYPENAME boost::detail::
|
||||||
@ -143,10 +151,10 @@ namespace boost {
|
|||||||
|
|
||||||
return detail::
|
return detail::
|
||||||
ends_with_iter_select(
|
ends_with_iter_select(
|
||||||
begin(Input),
|
begin(lit_input),
|
||||||
end(Input),
|
end(lit_input),
|
||||||
begin(Test),
|
begin(lit_test),
|
||||||
end(Test),
|
end(lit_test),
|
||||||
Comp,
|
Comp,
|
||||||
category());
|
category());
|
||||||
}
|
}
|
||||||
@ -207,14 +215,17 @@ namespace boost {
|
|||||||
const Range2T& Test,
|
const Range2T& Test,
|
||||||
PredicateT Comp)
|
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
|
// Empty range is contained always
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use the temporary variable to make VACPP happy
|
// 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;
|
return bResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,16 +286,19 @@ namespace boost {
|
|||||||
const Range2T& Test,
|
const Range2T& Test,
|
||||||
PredicateT Comp)
|
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
|
typedef BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<Range1T>::type Iterator1T;
|
range_const_iterator<Range1T>::type Iterator1T;
|
||||||
typedef BOOST_STRING_TYPENAME
|
typedef BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<Range2T>::type Iterator2T;
|
range_const_iterator<Range2T>::type Iterator2T;
|
||||||
|
|
||||||
Iterator1T InputEnd=end(Input);
|
Iterator1T InputEnd=end(lit_input);
|
||||||
Iterator2T TestEnd=end(Test);
|
Iterator2T TestEnd=end(lit_test);
|
||||||
|
|
||||||
Iterator1T it=begin(Input);
|
Iterator1T it=begin(lit_input);
|
||||||
Iterator2T pit=begin(Test);
|
Iterator2T pit=begin(lit_test);
|
||||||
for(;
|
for(;
|
||||||
it!=InputEnd && pit!=TestEnd;
|
it!=InputEnd && pit!=TestEnd;
|
||||||
++it,++pit)
|
++it,++pit)
|
||||||
@ -358,11 +372,14 @@ namespace boost {
|
|||||||
const Range2T& Arg2,
|
const Range2T& Arg2,
|
||||||
PredicateT Pred)
|
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(
|
return std::lexicographical_compare(
|
||||||
begin(Arg1),
|
begin(lit_arg1),
|
||||||
end(Arg1),
|
end(lit_arg1),
|
||||||
begin(Arg2),
|
begin(lit_arg2),
|
||||||
end(Arg2),
|
end(lit_arg2),
|
||||||
Pred);
|
Pred);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -375,12 +392,7 @@ namespace boost {
|
|||||||
const Range1T& Arg1,
|
const Range1T& Arg1,
|
||||||
const Range2T& Arg2)
|
const Range2T& Arg2)
|
||||||
{
|
{
|
||||||
return std::lexicographical_compare(
|
return lexicographical_compare(Arg1, Arg2, is_less());
|
||||||
begin(Arg1),
|
|
||||||
end(Arg1),
|
|
||||||
begin(Arg2),
|
|
||||||
end(Arg2),
|
|
||||||
is_less());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Lexicographical compare predicate (case-insensitive)
|
//! Lexicographical compare predicate (case-insensitive)
|
||||||
@ -394,6 +406,7 @@ namespace boost {
|
|||||||
|
|
||||||
\param Arg1 First argument
|
\param Arg1 First argument
|
||||||
\param Arg2 Second argument
|
\param Arg2 Second argument
|
||||||
|
\param Loc A locale used for case insensitive comparison
|
||||||
\return The result of the test
|
\return The result of the test
|
||||||
|
|
||||||
\note This function provides the strong exception-safety guarantee
|
\note This function provides the strong exception-safety guarantee
|
||||||
@ -401,14 +414,10 @@ namespace boost {
|
|||||||
template<typename Range1T, typename Range2T>
|
template<typename Range1T, typename Range2T>
|
||||||
inline bool ilexicographical_compare(
|
inline bool ilexicographical_compare(
|
||||||
const Range1T& Arg1,
|
const Range1T& Arg1,
|
||||||
const Range2T& Arg2)
|
const Range2T& Arg2,
|
||||||
|
const std::locale& Loc=std::locale())
|
||||||
{
|
{
|
||||||
return std::lexicographical_compare(
|
return lexicographical_compare(Arg1, Arg2, is_iless(Loc));
|
||||||
begin(Arg1),
|
|
||||||
end(Arg1),
|
|
||||||
begin(Arg2),
|
|
||||||
end(Arg2),
|
|
||||||
is_iless());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -430,11 +439,13 @@ namespace boost {
|
|||||||
const RangeT& Input,
|
const RangeT& Input,
|
||||||
PredicateT Pred)
|
PredicateT Pred)
|
||||||
{
|
{
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(as_literal(Input));
|
||||||
|
|
||||||
typedef BOOST_STRING_TYPENAME
|
typedef BOOST_STRING_TYPENAME
|
||||||
range_const_iterator<RangeT>::type Iterator1T;
|
range_const_iterator<RangeT>::type Iterator1T;
|
||||||
|
|
||||||
Iterator1T InputEnd=end(Input);
|
Iterator1T InputEnd=end(lit_input);
|
||||||
for( Iterator1T It=begin(Input); It!=InputEnd; ++It)
|
for( Iterator1T It=begin(lit_input); It!=InputEnd; ++It)
|
||||||
{
|
{
|
||||||
if (!Pred(*It))
|
if (!Pred(*It))
|
||||||
return false;
|
return false;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
#include <boost/range/result_iterator.hpp>
|
#include <boost/range/result_iterator.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
|
||||||
#include <boost/algorithm/string/find_format.hpp>
|
#include <boost/algorithm/string/find_format.hpp>
|
||||||
#include <boost/algorithm/string/regex_find_format.hpp>
|
#include <boost/algorithm/string/regex_find_format.hpp>
|
||||||
@ -59,8 +60,10 @@ namespace boost {
|
|||||||
const basic_regex<CharT, RegexTraitsT>& Rx,
|
const basic_regex<CharT, RegexTraitsT>& Rx,
|
||||||
match_flag_type Flags=match_default )
|
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)(
|
return regex_finder(Rx,Flags)(
|
||||||
begin(Input), end(Input) );
|
begin(lit_input), end(lit_input) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// replace_regex --------------------------------------------------------------------//
|
// replace_regex --------------------------------------------------------------------//
|
||||||
@ -503,7 +506,7 @@ namespace boost {
|
|||||||
inline typename range_value<SequenceSequenceT>::type
|
inline typename range_value<SequenceSequenceT>::type
|
||||||
join_if(
|
join_if(
|
||||||
const SequenceSequenceT& Input,
|
const SequenceSequenceT& Input,
|
||||||
Range1T& Separator,
|
const Range1T& Separator,
|
||||||
const basic_regex<CharT, RegexTraitsT>& Rx,
|
const basic_regex<CharT, RegexTraitsT>& Rx,
|
||||||
match_flag_type Flags=match_default )
|
match_flag_type Flags=match_default )
|
||||||
{
|
{
|
||||||
@ -536,7 +539,7 @@ namespace boost {
|
|||||||
if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
|
if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
|
||||||
{
|
{
|
||||||
// Add separator
|
// Add separator
|
||||||
detail::insert(Result, end(Result), Separator);
|
detail::insert(Result, end(Result), as_literal(Separator));
|
||||||
// Add element
|
// Add element
|
||||||
detail::insert(Result, end(Result), *itBegin);
|
detail::insert(Result, end(Result), *itBegin);
|
||||||
}
|
}
|
||||||
@ -571,7 +574,7 @@ namespace boost {
|
|||||||
inline typename range_value<SequenceSequenceT>::type
|
inline typename range_value<SequenceSequenceT>::type
|
||||||
join_if_regex(
|
join_if_regex(
|
||||||
const SequenceSequenceT& Input,
|
const SequenceSequenceT& Input,
|
||||||
Range1T& Separator,
|
const Range1T& Separator,
|
||||||
const basic_regex<CharT, RegexTraitsT>& Rx,
|
const basic_regex<CharT, RegexTraitsT>& Rx,
|
||||||
match_flag_type Flags=match_default )
|
match_flag_type Flags=match_default )
|
||||||
{
|
{
|
||||||
@ -604,7 +607,7 @@ namespace boost {
|
|||||||
if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
|
if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
|
||||||
{
|
{
|
||||||
// Add separator
|
// Add separator
|
||||||
detail::insert(Result, end(Result), Separator);
|
detail::insert(Result, end(Result), as_literal(Separator));
|
||||||
// Add element
|
// Add element
|
||||||
detail::insert(Result, end(Result), *itBegin);
|
detail::insert(Result, end(Result), *itBegin);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user