74 #ifndef SLIP_APPLY_HPP
75 #define SLIP_APPLY_HPP
126 template<
typename InputIterator,
typename OutputIterator>
128 void apply(InputIterator first, InputIterator last,
129 OutputIterator result,
130 typename std::iterator_traits<OutputIterator>::value_type
131 (*
function)(
typename std::iterator_traits<InputIterator>::value_type))
133 for (;first!=last;++first,++result)
134 *result=(*
function)(*first);
173 template<
typename InputIterator,
typename OutputIterator,
typename MaskIterator>
177 MaskIterator mask_first,
178 OutputIterator result,
179 typename std::iterator_traits<OutputIterator>::value_type (*
function)(
typename std::iterator_traits<InputIterator>::value_type),
180 typename std::iterator_traits<MaskIterator>::value_type value=
typename std::iterator_traits<MaskIterator>::value_type(1))
182 for (;first!=last;++first,++result,++mask_first)
184 if(*mask_first == value)
186 *result=(*function)(*first);
230 template<
typename InputIterator,
typename OutputIterator,
typename Predicate>
234 OutputIterator result,
236 typename std::iterator_traits<OutputIterator>::value_type (*
function)(
typename std::iterator_traits<InputIterator>::value_type))
238 for (;first!=last;++first,++result)
242 *result=(*function)(*first);
290 template<
typename InputIterator,
typename OutputIterator>
292 void apply(InputIterator first, InputIterator last,
293 OutputIterator result,
294 typename std::iterator_traits<OutputIterator>::value_type
295 (*
function)(
const typename std::iterator_traits<InputIterator>::value_type&))
297 for (;first!=last;++first,++result)
298 *result=(*
function)(*first);
340 template<
typename InputIterator,
typename OutputIterator,
typename MaskIterator>
344 MaskIterator mask_first,
345 OutputIterator result,
346 typename std::iterator_traits<OutputIterator>::value_type (*
function)(
const typename std::iterator_traits<InputIterator>::value_type&),
347 typename std::iterator_traits<MaskIterator>::value_type value=
typename
348 std::iterator_traits<MaskIterator>::value_type(1))
351 for (;first!=last;++first,++result,++mask_first)
353 if(*mask_first == value)
355 *result=(*function)(*first);
399 template<
typename InputIterator,
typename OutputIterator,
typename Predicate>
403 OutputIterator result,
405 typename std::iterator_traits<OutputIterator>::value_type (*
function)(
const typename std::iterator_traits<InputIterator>::value_type&))
408 for (;first!=last;++first,++result)
412 *result=(*function)(*first);
465 template<
typename InputIterator1,
466 typename InputIterator2,
467 typename OutputIterator>
469 void apply(InputIterator1 first, InputIterator1 last,
470 InputIterator2 first2,
471 OutputIterator result,
472 typename std::iterator_traits<OutputIterator>::value_type
473 (*
function)(
typename std::iterator_traits<InputIterator1>::value_type,
474 typename std::iterator_traits<InputIterator2>::value_type ))
476 for (;first!=last;++first,++first2,++result)
477 *result=(*
function)(*first,*first2);
520 template<
typename InputIterator1,
521 typename InputIterator2,
522 typename OutputIterator,
523 typename MaskIterator>
527 MaskIterator mask_first,
528 InputIterator2 first2,
529 OutputIterator result,
531 typename std::iterator_traits<OutputIterator>::value_type
532 (*
function)(
typename std::iterator_traits<InputIterator1>::value_type,
533 typename std::iterator_traits<InputIterator2>::value_type ),
534 typename std::iterator_traits<MaskIterator>::value_type value=
typename
535 std::iterator_traits<MaskIterator>::value_type(1))
538 for (;first!=last;++first,++first2,++result,++mask_first)
539 if(*mask_first == value)
541 *result=(*function)(*first,*first2);
589 template<
typename InputIterator1,
590 typename InputIterator2,
591 typename OutputIterator,
596 InputIterator2 first2,
597 OutputIterator result,
599 typename std::iterator_traits<OutputIterator>::value_type
600 (*
function)(
typename std::iterator_traits<InputIterator1>::value_type,
601 typename std::iterator_traits<InputIterator2>::value_type ))
604 for (;first!=last;++first,++first2,++result)
607 *result=(*function)(*first,*first2);
660 template<
typename InputIterator1,
661 typename InputIterator2,
662 typename OutputIterator>
664 void apply(InputIterator1 first, InputIterator1 last,
665 InputIterator2 first2,
666 OutputIterator result,
667 typename std::iterator_traits<OutputIterator>::value_type
668 (*
function)(
const typename std::iterator_traits<InputIterator1>::value_type&,
const typename std::iterator_traits<InputIterator2>::value_type& ))
670 for (;first!=last;++first,++first2,++result)
671 *result=(*
function)(*first,*first2);
714 template<
typename InputIterator1,
715 typename InputIterator2,
716 typename OutputIterator,
717 typename MaskIterator>
721 MaskIterator mask_first,
722 InputIterator2 first2,
723 OutputIterator result,
725 typename std::iterator_traits<OutputIterator>::value_type
726 (*
function)(
const typename std::iterator_traits<InputIterator1>::value_type&,
const typename std::iterator_traits<InputIterator2>::value_type& ),
727 typename std::iterator_traits<MaskIterator>::value_type value=
typename
728 std::iterator_traits<MaskIterator>::value_type(1))
731 for (;first!=last;++first,++first2,++result,++mask_first)
732 if(*mask_first == value)
734 *result=(*function)(*first,*first2);
781 template<
typename InputIterator1,
782 typename InputIterator2,
783 typename OutputIterator,
typename Predicate>
787 InputIterator2 first2,
788 OutputIterator result,
790 typename std::iterator_traits<OutputIterator>::value_type
791 (*
function)(
const typename std::iterator_traits<InputIterator1>::value_type&,
const typename std::iterator_traits<InputIterator2>::value_type& ))
794 for (;first!=last;++first,++first2,++result)
797 *result=(*function)(*first,*first2);
805 #endif //SLIP_APPLY_HPP
void apply_mask(InputIterator first, InputIterator last, MaskIterator mask_first, OutputIterator result, typename std::iterator_traits< OutputIterator >::value_type(*function)(typename std::iterator_traits< InputIterator >::value_type), typename std::iterator_traits< MaskIterator >::value_type value=typename std::iterator_traits< MaskIterator >::value_type(1))
Applies a C-function to each element of a range according to a mask range.
void apply(InputIterator first, InputIterator last, OutputIterator result, typename std::iterator_traits< OutputIterator >::value_type(*function)(typename std::iterator_traits< InputIterator >::value_type))
Applies a C-function to each element of a range.
void apply_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred, typename std::iterator_traits< OutputIterator >::value_type(*function)(typename std::iterator_traits< InputIterator >::value_type))
Applies a C-function to each element of a range according to a predicate.