inline iterator_range< BOOST_STRING_TYPENAME range_iterator<Range1T>::type> find_last( Range1T& Input, const Range2T& Search) { return find(Input, last_finder(Search)); }
inline iterator_range< BOOST_STRING_TYPENAME range_result_iterator<Range1T>::type> find_last( Range1T& Input, const Range2T& Search) { return last_finder(Search)( begin(Input),end(Input)); }
inline void erase_last( SequenceT& Input, const RangeT& Search ) { find_format( Input, last_finder(Search), empty_formatter(Input) ); }
inline iterator_range< BOOST_STRING_TYPENAME result_iterator_of<Collection1T>::type> find_last( Collection1T& Input, const Collection2T& Search) { return last_finder(Search)( begin(Input),end(Input)); }
inline SequenceT erase_last_copy( const SequenceT& Input, const RangeT& Search ) { return find_format_copy( Input, last_finder(Search), empty_formatter(Input) ); }
inline iterator_range< BOOST_STRING_TYPENAME range_iterator<Range1T>::type> ifind_last( Range1T& Input, const Range2T& Search, const std::locale& Loc=std::locale()) { return find(Input, last_finder(Search, is_iequal(Loc))); }
inline iterator_range< BOOST_STRING_TYPENAME result_iterator_of<Collection1T>::type> ifind_last( Collection1T& Input, const Collection2T& Search, const std::locale& Loc=std::locale()) { return last_finder(Search, is_iequal(Loc))( begin(Input),end(Input)); }
inline void replace_last( SequenceT& Input, const Collection1T& Search, const Collection2T& Format ) { find_format( Input, last_finder(Search), const_formatter(Format) ); }
inline void ierase_last( SequenceT& Input, const RangeT& Search, const std::locale& Loc=std::locale() ) { find_format( Input, last_finder(Search, is_iequal(Loc)), empty_formatter(Input) ); }
inline SequenceT ierase_last_copy( const SequenceT& Input, const RangeT& Search, const std::locale& Loc=std::locale() ) { return find_format_copy( Input, last_finder(Search, is_iequal(Loc)), empty_formatter(Input) ); }
inline void replace_last( SequenceT& Input, const Range1T& Search, const Range2T& Format ) { find_format( Input, last_finder(Search), const_formatter(Format) ); }
inline SequenceT replace_last_copy( const SequenceT& Input, const Range1T& Search, const Range2T& Format ) { return find_format_copy( Input, last_finder(Search), const_formatter(Format) ); }
inline OutputIteratorT erase_last_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search ) { return find_format_copy( Output, Input, last_finder(Search), empty_formatter(Input) ); }
inline void ireplace_last( SequenceT& Input, const Range1T& Search, const Range2T& Format, const std::locale& Loc=std::locale() ) { find_format( Input, last_finder(Search, is_iequal(Loc)), const_formatter(Format) ); }
inline SequenceT ireplace_last_copy( const SequenceT& Input, const Range1T& Search, const Range2T& Format, const std::locale& Loc=std::locale() ) { return find_format_copy( Input, last_finder(Search, is_iequal(Loc)), const_formatter(Format) ); }
inline OutputIteratorT ierase_last_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search, const std::locale& Loc=std::locale() ) { return find_format_copy( Output, Input, last_finder(Search, is_iequal(Loc)), empty_formatter(Input) ); }
inline OutputIteratorT replace_last_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search, const Range3T& Format ) { return find_format_copy( Output, Input, last_finder(Search), const_formatter(Format) ); }
inline OutputIteratorT replace_last_copy( OutputIteratorT Output, const Collection1T& Input, const Collection2T& Search, const Collection3T& Format ) { return find_format_copy( Output, Input, last_finder(Search), const_formatter(Format) ); }
inline OutputIteratorT ireplace_last_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search, const Range3T& Format, const std::locale& Loc=std::locale() ) { return find_format_copy( Output, Input, last_finder(Search, is_iequal(Loc)), const_formatter(Format) ); }
inline bool ends_with_iter_select( ForwardIterator1T Begin, ForwardIterator1T End, ForwardIterator2T SubBegin, ForwardIterator2T SubEnd, PredicateT Comp, std::forward_iterator_tag) { if ( SubBegin==SubEnd ) { // empty subsequence check return true; } iterator_range<ForwardIterator1T> Result =last_finder( ::boost::make_iterator_range(SubBegin, SubEnd), Comp)(Begin, End); return !Result.empty() && Result.end()==End; }