From b94a3fbfba3258b24ae28fd5bc823f2cc0e6dd96 Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Sun, 1 Jul 2007 22:23:55 +0000 Subject: [PATCH] adapting to new range interface [SVN r38125] --- include/boost/algorithm/string/case_conv.hpp | 24 +++--- .../boost/algorithm/string/classification.hpp | 4 +- .../algorithm/string/detail/case_conv.hpp | 76 +++++++++--------- .../algorithm/string/detail/find_format.hpp | 15 ---- .../boost/algorithm/string/detail/finder.hpp | 1 + include/boost/algorithm/string/find.hpp | 40 ++++------ .../boost/algorithm/string/find_format.hpp | 15 ++-- .../boost/algorithm/string/find_iterator.hpp | 21 +++-- include/boost/algorithm/string/finder.hpp | 60 +++++++-------- include/boost/algorithm/string/formatter.hpp | 17 +++- include/boost/algorithm/string/iter_find.hpp | 13 +++- include/boost/algorithm/string/join.hpp | 8 +- include/boost/algorithm/string/predicate.hpp | 77 +++++++++++-------- include/boost/algorithm/string/regex.hpp | 13 ++-- include/boost/algorithm/string/trim.hpp | 12 +-- 15 files changed, 206 insertions(+), 190 deletions(-) diff --git a/include/boost/algorithm/string/case_conv.hpp b/include/boost/algorithm/string/case_conv.hpp index 6699c80..536c022 100644 --- a/include/boost/algorithm/string/case_conv.hpp +++ b/include/boost/algorithm/string/case_conv.hpp @@ -59,7 +59,7 @@ namespace boost { { return ::boost::algorithm::detail::transform_range_copy( Output, - as_literal(Input), + as_literal(Input), ::boost::algorithm::detail::to_lowerF< typename range_value::type >(Loc)); } @@ -73,10 +73,10 @@ namespace boost { const SequenceT& Input, const std::locale& Loc=std::locale()) { - return ::boost::algorithm::detail::transform_range_copy( - Input, + return ::boost::algorithm::detail::transform_range_copy( + Input, ::boost::algorithm::detail::to_lowerF< - typename range_value::type >(Loc)); + typename range_value::type >(Loc)); } //! Convert to lower case @@ -92,8 +92,8 @@ namespace boost { WritableRangeT& Input, const std::locale& Loc=std::locale()) { - ::boost::algorithm::detail::transform_range( - as_literal(Input), + ::boost::algorithm::detail::transform_range( + as_literal(Input), ::boost::algorithm::detail::to_lowerF< typename range_value::type >(Loc)); } @@ -124,7 +124,7 @@ namespace boost { { return ::boost::algorithm::detail::transform_range_copy( Output, - as_literal(Input), + as_literal(Input), ::boost::algorithm::detail::to_upperF< typename range_value::type >(Loc)); } @@ -138,10 +138,10 @@ namespace boost { const SequenceT& Input, const std::locale& Loc=std::locale()) { - return ::boost::algorithm::detail::transform_range_copy( - Input, + return ::boost::algorithm::detail::transform_range_copy( + Input, ::boost::algorithm::detail::to_upperF< - typename range_value::type >(Loc)); + typename range_value::type >(Loc)); } //! Convert to upper case @@ -157,8 +157,8 @@ namespace boost { WritableRangeT& Input, const std::locale& Loc=std::locale()) { - ::boost::algorithm::detail::transform_range( - as_literal(Input), + ::boost::algorithm::detail::transform_range( + as_literal(Input), ::boost::algorithm::detail::to_upperF< typename range_value::type >(Loc)); } diff --git a/include/boost/algorithm/string/classification.hpp b/include/boost/algorithm/string/classification.hpp index 93d6411..a2e2b4d 100644 --- a/include/boost/algorithm/string/classification.hpp +++ b/include/boost/algorithm/string/classification.hpp @@ -14,9 +14,11 @@ #include #include #include +#include #include #include + /*! \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::type>(Set); + BOOST_STRING_TYPENAME range_value::type>(as_literal(Set)); } //! is_from_range predicate diff --git a/include/boost/algorithm/string/detail/case_conv.hpp b/include/boost/algorithm/string/detail/case_conv.hpp index 73e6bd8..0eaad19 100644 --- a/include/boost/algorithm/string/detail/case_conv.hpp +++ b/include/boost/algorithm/string/detail/case_conv.hpp @@ -63,46 +63,46 @@ namespace boost { // algorithm implementation ------------------------------------------------------------------------- - // Transform a range - template - OutputIteratorT transform_range_copy( - OutputIteratorT Output, - const RangeT& Input, - FunctorT Functor) - { - return std::transform( - begin(Input), - end(Input), - Output, - Functor); - } + // Transform a range + template + OutputIteratorT transform_range_copy( + OutputIteratorT Output, + const RangeT& Input, + FunctorT Functor) + { + return std::transform( + begin(Input), + end(Input), + Output, + Functor); + } - // Transform a range (in-place) - template - void transform_range( - const RangeT& Input, - FunctorT Functor) - { - std::transform( - begin(Input), - end(Input), - begin(Input), - Functor); - } + // Transform a range (in-place) + template + void transform_range( + const RangeT& Input, + FunctorT Functor) + { + std::transform( + begin(Input), + end(Input), + begin(Input), + Functor); + } - template - inline SequenceT transform_range_copy( - const RangeT& Input, - FunctorT Functor) - { - return SequenceT( - make_transform_iterator( - begin(Input), - Functor), - make_transform_iterator( - end(Input), - Functor)); - } + template + inline SequenceT transform_range_copy( + const RangeT& Input, + FunctorT Functor) + { + return SequenceT( + make_transform_iterator( + begin(Input), + Functor), + make_transform_iterator( + end(Input), + Functor)); + } } // namespace detail } // namespace algorithm diff --git a/include/boost/algorithm/string/detail/find_format.hpp b/include/boost/algorithm/string/detail/find_format.hpp index ee16535..f1dcc0c 100644 --- a/include/boost/algorithm/string/detail/find_format.hpp +++ b/include/boost/algorithm/string/detail/find_format.hpp @@ -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) diff --git a/include/boost/algorithm/string/detail/finder.hpp b/include/boost/algorithm/string/detail/finder.hpp index b53705a..194296e 100644 --- a/include/boost/algorithm/string/detail/finder.hpp +++ b/include/boost/algorithm/string/detail/finder.hpp @@ -19,6 +19,7 @@ #include #include #include +#include namespace boost { namespace algorithm { diff --git a/include/boost/algorithm/string/find.hpp b/include/boost/algorithm/string/find.hpp index 99ecce0..f7996f4 100644 --- a/include/boost/algorithm/string/find.hpp +++ b/include/boost/algorithm/string/find.hpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -52,16 +53,18 @@ namespace boost { BOOST_STRING_TYPENAME range_result_iterator::type> find( RangeT& Input, - FinderT Finder) + const FinderT& Finder) { - return Finder(begin(Input),end(Input)); + iterator_range::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 diff --git a/include/boost/algorithm/string/find_format.hpp b/include/boost/algorithm/string/find_format.hpp index c0c6950..f244df3 100644 --- a/include/boost/algorithm/string/find_format.hpp +++ b/include/boost/algorithm/string/find_format.hpp @@ -69,12 +69,13 @@ namespace boost { FormatterT, FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> >(); + iterator_range::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::type> >(); + iterator_range::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 diff --git a/include/boost/algorithm/string/find_iterator.hpp b/include/boost/algorithm/string/find_iterator.hpp index 7c36b84..38a30bd 100644 --- a/include/boost/algorithm/string/find_iterator.hpp +++ b/include/boost/algorithm/string/find_iterator.hpp @@ -19,6 +19,7 @@ #include #include #include +#include #include @@ -116,10 +117,12 @@ namespace boost { find_iterator( RangeT& Col, FinderT Finder ) : - detail::find_iterator_base(Finder,0), - m_Match(begin(Col),begin(Col)), - m_End(end(Col)) + detail::find_iterator_base(Finder,0) { + iterator_range::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::type>( - begin(Collection), end(Collection), Finder); + Collection, Finder); } // split iterator -----------------------------------------------// @@ -280,11 +283,13 @@ namespace boost { RangeT& Col, FinderT Finder ) : detail::find_iterator_base(Finder,0), - m_Match(begin(Col),begin(Col)), - m_Next(begin(Col)), - m_End(end(Col)), m_bEof(false) { + iterator_range::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::type>( - begin(Collection), end(Collection), Finder); + Collection, Finder); } diff --git a/include/boost/algorithm/string/finder.hpp b/include/boost/algorithm/string/finder.hpp index ba8324f..c936ddb 100644 --- a/include/boost/algorithm/string/finder.hpp +++ b/include/boost/algorithm/string/finder.hpp @@ -46,35 +46,35 @@ namespace boost { \param Comp An element comparison predicate \return An instance of the \c first_finder object */ - template + template inline detail::first_finderF< - BOOST_STRING_TYPENAME range_const_iterator::type, + BOOST_STRING_TYPENAME range_const_iterator::type, is_equal> - first_finder( const ContainerT& Search ) + first_finder( const RangeT& Search ) { return detail::first_finderF< BOOST_STRING_TYPENAME - range_const_iterator::type, - is_equal>( Search, is_equal() ) ; + range_const_iterator::type, + is_equal>( as_literal(Search), is_equal() ) ; } //! "First" finder /*! \overload */ - template + template inline detail::first_finderF< - BOOST_STRING_TYPENAME range_const_iterator::type, + BOOST_STRING_TYPENAME range_const_iterator::type, PredicateT> first_finder( - const ContainerT& Search, PredicateT Comp ) + const RangeT& Search, PredicateT Comp ) { return detail::first_finderF< BOOST_STRING_TYPENAME - range_const_iterator::type, - PredicateT>( Search, Comp ); + range_const_iterator::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 + template inline detail::last_finderF< - BOOST_STRING_TYPENAME range_const_iterator::type, + BOOST_STRING_TYPENAME range_const_iterator::type, is_equal> - last_finder( const ContainerT& Search ) + last_finder( const RangeT& Search ) { return detail::last_finderF< BOOST_STRING_TYPENAME - range_const_iterator::type, - is_equal>( Search, is_equal() ); + range_const_iterator::type, + is_equal>( as_literal(Search), is_equal() ); } //! "Last" finder /*! \overload */ - template + template inline detail::last_finderF< - BOOST_STRING_TYPENAME range_const_iterator::type, + BOOST_STRING_TYPENAME range_const_iterator::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::type, - PredicateT>( Search, Comp ) ; + range_const_iterator::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 + template inline detail::nth_finderF< - BOOST_STRING_TYPENAME range_const_iterator::type, + BOOST_STRING_TYPENAME range_const_iterator::type, is_equal> nth_finder( - const ContainerT& Search, + const RangeT& Search, int Nth) { return detail::nth_finderF< BOOST_STRING_TYPENAME - range_const_iterator::type, - is_equal>( Search, Nth, is_equal() ) ; + range_const_iterator::type, + is_equal>( as_literal(Search), Nth, is_equal() ) ; } //! "Nth" finder /*! \overload */ - template + template inline detail::nth_finderF< - BOOST_STRING_TYPENAME range_const_iterator::type, + BOOST_STRING_TYPENAME range_const_iterator::type, PredicateT> nth_finder( - const ContainerT& Search, + const RangeT& Search, int Nth, PredicateT Comp ) { return detail::nth_finderF< BOOST_STRING_TYPENAME - range_const_iterator::type, - PredicateT>( Search, Nth, Comp ); + range_const_iterator::type, + PredicateT>( as_literal(Search), Nth, Comp ); } //! "Head" finder diff --git a/include/boost/algorithm/string/formatter.hpp b/include/boost/algorithm/string/formatter.hpp index 00f3541..e04a50f 100644 --- a/include/boost/algorithm/string/formatter.hpp +++ b/include/boost/algorithm/string/formatter.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include @@ -42,10 +43,14 @@ namespace boost { \return An instance of the \c const_formatter object. */ template - inline detail::const_formatF + inline detail::const_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> > const_formatter(const RangeT& Format) { - return detail::const_formatF(Format); + return detail::const_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> >(as_literal(Format)); } //! Identity formatter @@ -56,10 +61,14 @@ namespace boost { \return An instance of the \c identity_formatter object. */ template - inline detail::identity_formatF + inline detail::identity_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> > identity_formatter() { - return detail::identity_formatF(); + return detail::identity_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> >(); } //! Empty formatter diff --git a/include/boost/algorithm/string/iter_find.hpp b/include/boost/algorithm/string/iter_find.hpp index d828960..41d11b7 100644 --- a/include/boost/algorithm/string/iter_find.hpp +++ b/include/boost/algorithm/string/iter_find.hpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -77,6 +78,8 @@ namespace boost { FinderConcept::type> >(); + iterator_range::type> lit_input(as_literal(Input)); + typedef BOOST_STRING_TYPENAME range_result_iterator::type input_iterator_type; typedef find_iterator find_iterator_type; @@ -85,14 +88,14 @@ namespace boost { range_value::type, input_iterator_type> copy_range_type; - input_iterator_type InputEnd=end(Input); + input_iterator_type InputEnd=end(lit_input); typedef transform_iterator 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::type> >(); + iterator_range::type> lit_input(as_literal(Input)); + typedef BOOST_STRING_TYPENAME range_result_iterator::type input_iterator_type; typedef split_iterator find_iterator_type; @@ -152,14 +157,14 @@ namespace boost { range_value::type, input_iterator_type> copy_range_type; - input_iterator_type InputEnd=end(Input); + input_iterator_type InputEnd=end(lit_input); typedef transform_iterator 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= diff --git a/include/boost/algorithm/string/join.hpp b/include/boost/algorithm/string/join.hpp index e91619b..a6c26ab 100644 --- a/include/boost/algorithm/string/join.hpp +++ b/include/boost/algorithm/string/join.hpp @@ -45,7 +45,7 @@ namespace boost { inline typename range_value::type join( const SequenceSequenceT& Input, - Range1T& Separator) + const Range1T& Separator) { // Define working types typedef typename range_value::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::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); } diff --git a/include/boost/algorithm/string/predicate.hpp b/include/boost/algorithm/string/predicate.hpp index 73ecc41..4edd553 100644 --- a/include/boost/algorithm/string/predicate.hpp +++ b/include/boost/algorithm/string/predicate.hpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include #include @@ -57,16 +59,19 @@ namespace boost { const Range2T& Test, PredicateT Comp) { + iterator_range::type> lit_input(as_literal(Input)); + iterator_range::type> lit_test(as_literal(Test)); + typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator1T; typedef BOOST_STRING_TYPENAME range_const_iterator::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::type> lit_input(as_literal(Input)); + iterator_range::type> lit_test(as_literal(Test)); + typedef BOOST_STRING_TYPENAME range_const_iterator::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::type> lit_input(as_literal(Input)); + iterator_range::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::type> lit_input(as_literal(Input)); + iterator_range::type> lit_test(as_literal(Test)); + typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator1T; typedef BOOST_STRING_TYPENAME range_const_iterator::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::type> lit_arg1(as_literal(Arg1)); + iterator_range::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 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::type> lit_input(as_literal(Input)); + typedef BOOST_STRING_TYPENAME range_const_iterator::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; diff --git a/include/boost/algorithm/string/regex.hpp b/include/boost/algorithm/string/regex.hpp index b4346b4..d670364 100644 --- a/include/boost/algorithm/string/regex.hpp +++ b/include/boost/algorithm/string/regex.hpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -59,8 +60,10 @@ namespace boost { const basic_regex& Rx, match_flag_type Flags=match_default ) { + iterator_range::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::type join_if( const SequenceSequenceT& Input, - Range1T& Separator, + const Range1T& Separator, const basic_regex& 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::type join_if_regex( const SequenceSequenceT& Input, - Range1T& Separator, + const Range1T& Separator, const basic_regex& 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); } diff --git a/include/boost/algorithm/string/trim.hpp b/include/boost/algorithm/string/trim.hpp index 72b6e1b..b2bdc04 100644 --- a/include/boost/algorithm/string/trim.hpp +++ b/include/boost/algorithm/string/trim.hpp @@ -63,7 +63,7 @@ namespace boost { const RangeT& Input, PredicateT IsSpace) { - iterator_range::type> lit_range(as_literal(Input)); + iterator_range::type> lit_range(as_literal(Input)); std::copy( ::boost::algorithm::detail::trim_begin( @@ -171,9 +171,9 @@ namespace boost { const RangeT& Input, PredicateT IsSpace ) { - iterator_range::type> lit_range(as_literal(Input)); - - std::copy( + iterator_range::type> lit_range(as_literal(Input)); + + std::copy( begin(lit_range), ::boost::algorithm::detail::trim_end( begin(lit_range), @@ -283,9 +283,9 @@ namespace boost { const RangeT& Input, PredicateT IsSpace) { - iterator_range::type> lit_range(as_literal(Input)); + iterator_range::type> lit_range(as_literal(Input)); - BOOST_STRING_TYPENAME + BOOST_STRING_TYPENAME range_const_iterator::type TrimEnd= ::boost::algorithm::detail::trim_end( begin(lit_range),