inline OutputIteratorT find_format_copy( OutputIteratorT Output, const RangeT& Input, FinderT Finder, FormatterT Formatter ) { // Concept check BOOST_CONCEPT_ASSERT(( FinderConcept< FinderT, BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> )); BOOST_CONCEPT_ASSERT(( FormatterConcept< FormatterT, FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> )); iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input)); return detail::find_format_copy_impl( Output, lit_input, Formatter, Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) ); }
inline iterator_range< BOOST_STRING_TYPENAME range_iterator<RangeT>::type> find( RangeT& Input, const FinderT& Finder) { iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input)); return Finder(::boost::begin(lit_input),::boost::end(lit_input)); }
inline iterator_range< BOOST_STRING_TYPENAME range_iterator<RangeT>::type > find_regex( RangeT& Input, const basic_regex<CharT, RegexTraitsT>& Rx, match_flag_type Flags=match_default ) { iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input)); return ::boost::algorithm::regex_finder(Rx,Flags)( ::boost::begin(lit_input), ::boost::end(lit_input) ); }
inline bool all( const RangeT& Input, PredicateT Pred) { iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input)); typedef BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type Iterator1T; Iterator1T InputEnd=::boost::end(lit_input); for( Iterator1T It=::boost::begin(lit_input); It!=InputEnd; ++It) { if (!Pred(*It)) return false; } return true; }
inline SequenceSequenceT& iter_find( SequenceSequenceT& Result, RangeT& Input, FinderT Finder ) { BOOST_CONCEPT_ASSERT(( FinderConcept< FinderT, BOOST_STRING_TYPENAME range_iterator<RangeT>::type> )); iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::geofeatures_boost::as_literal(Input)); typedef BOOST_STRING_TYPENAME range_iterator<RangeT>::type input_iterator_type; typedef find_iterator<input_iterator_type> find_iterator_type; typedef detail::copy_iterator_rangeF< BOOST_STRING_TYPENAME range_value<SequenceSequenceT>::type, input_iterator_type> copy_range_type; input_iterator_type InputEnd=::geofeatures_boost::end(lit_input); typedef transform_iterator<copy_range_type, find_iterator_type> transform_iter_type; transform_iter_type itBegin= ::geofeatures_boost::make_transform_iterator( find_iterator_type( ::geofeatures_boost::begin(lit_input), InputEnd, Finder ), copy_range_type()); transform_iter_type itEnd= ::geofeatures_boost::make_transform_iterator( find_iterator_type(), copy_range_type()); SequenceSequenceT Tmp(itBegin, itEnd); Result.swap(Tmp); return Result; }
inline SequenceSequenceT& iter_find( SequenceSequenceT& Result, RangeT& Input, FinderT Finder ) { function_requires< FinderConcept<FinderT, BOOST_STRING_TYPENAME range_iterator<RangeT>::type> >(); iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input)); typedef BOOST_STRING_TYPENAME range_iterator<RangeT>::type input_iterator_type; typedef find_iterator<input_iterator_type> find_iterator_type; typedef detail::copy_iterator_rangeF< BOOST_STRING_TYPENAME range_value<SequenceSequenceT>::type, input_iterator_type> copy_range_type; 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(lit_input), InputEnd, Finder ), copy_range_type()); transform_iter_type itEnd= make_transform_iterator( find_iterator_type(), copy_range_type()); SequenceSequenceT Tmp(itBegin, itEnd); Result.swap(Tmp); return Result; }
inline bool starts_with( const Range1T& Input, const Range2T& Test, PredicateT Comp) { iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input)); iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test)); typedef BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type Iterator1T; typedef BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type Iterator2T; Iterator1T InputEnd=::boost::end(lit_input); Iterator2T TestEnd=::boost::end(lit_test); Iterator1T it=::boost::begin(lit_input); Iterator2T pit=::boost::begin(lit_test); for(; it!=InputEnd && pit!=TestEnd; ++it,++pit) { if( !(Comp(*it,*pit)) ) return false; } return pit==TestEnd; }
inline bool contains( const Range1T& Input, const Range2T& Test, PredicateT Comp) { iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input)); iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test)); if (::boost::empty(lit_test)) { // Empty range is contained always return true; } // Use the temporary variable to make VACPP happy bool bResult=(::boost::algorithm::first_finder(lit_test,Comp)(::boost::begin(lit_input), ::boost::end(lit_input))); return bResult; }
inline bool ends_with( const Range1T& Input, const Range2T& Test, PredicateT Comp) { iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input)); iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test)); typedef BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type Iterator1T; typedef BOOST_STRING_TYPENAME boost::detail:: iterator_traits<Iterator1T>::iterator_category category; return detail:: ends_with_iter_select( ::boost::begin(lit_input), ::boost::end(lit_input), ::boost::begin(lit_test), ::boost::end(lit_test), Comp, category()); }