inline SequenceT transform_range_copy( const RangeT& Input, FunctorT Functor) { return SequenceT( make_transform_iterator( ::boost::begin(Input), Functor), make_transform_iterator( ::boost::end(Input), Functor)); }
inline times2_iterator make_times2_iterator(std::size_t i) { return make_transform_iterator( make_counting_iterator(i) , std::bind1st(std::multiplies<std::size_t>(), 2) ); }
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; }
replaced_if_range( R& r, const Pred& pred, value_type to ) : base_t( make_transform_iterator( mars_boost::begin(r), Fn(pred, to) ), make_transform_iterator( mars_boost::end(r), Fn(pred, to) ) ) { }
transformed_range( F f, R& r ) : base( make_transform_iterator( boost::begin(r), f ), make_transform_iterator( boost::end(r), f ) ) { }
replaced_range( R& r, value_type from, value_type to ) : base_t( make_transform_iterator( lslboost::begin(r), Fn(from, to) ), make_transform_iterator( lslboost::end(r), Fn(from, to) ) ) { }