Program Listing for File copy_if.hpp

Return to documentation for file (include/uitsl/algorithm/copy_if.hpp)

#pragma once
#ifndef UITSL_ALGORITHM_COPY_IF_HPP_INCLUDE
#define UITSL_ALGORITHM_COPY_IF_HPP_INCLUDE

#include <algorithm>

namespace uitsl {

template<class SourceIt, class InputIt1, class OutputIt, class UnaryPredicate>
OutputIt copy_if(
  SourceIt first, SourceIt last, InputIt1 first1,
  OutputIt d_first, UnaryPredicate pred
) {
  while (first != last) {
    if ( pred(*first1) ) *d_first++ = *first;
    first++;
    first1++;
  }
  return d_first;
}

template<
  class SourceIt, class InputIt1, class InputIt2,
  class OutputIt, class BinaryPredicate
>
OutputIt copy_if(
  SourceIt first, SourceIt last, InputIt1 first1, InputIt2 first2,
  OutputIt d_first, BinaryPredicate pred
) {
  while (first != last) {
    if ( pred(*first1, *first2) ) *d_first++ = *first;
    first++;
    first1++;
    first2++;
  }
  return d_first;
}

template<
  class SourceIt, class InputIt1, class InputIt2, class InputIt3,
  class OutputIt, class TrinaryPredicate
>
OutputIt copy_if(
  SourceIt first, SourceIt last,
  InputIt1 first1, InputIt2 first2, InputIt3 first3,
  OutputIt d_first, TrinaryPredicate pred
) {
  while (first != last) {
    if ( pred(*first1, *first2, *first3) ) *d_first++ = *first;
    first++;
    first1++;
    first2++;
    first3++;
  }
  return d_first;
}

} // namespace uitsl

#endif // #ifndef UITSL_ALGORITHM_COPY_IF_HPP_INCLUDE