| 40 | 
  | 
 */ | 
| 41 | 
  | 
 | 
| 42 | 
  | 
#include <functional> | 
| 43 | 
< | 
 | 
| 43 | 
> | 
#include "config.h" | 
| 44 | 
  | 
namespace oopse { | 
| 45 | 
  | 
 | 
| 46 | 
< | 
/**  | 
| 47 | 
< | 
 * copy_if is one of the missing functions in STL.  | 
| 48 | 
< | 
 * copy_if copies elements from the range [first, last) to the range [result, result + (last-first)),  | 
| 49 | 
< | 
 * except that any element for which pred is false is not copied. | 
| 50 | 
< | 
 */ | 
| 51 | 
< | 
template<typename InputIterator, typename OutputIterator, typename Predicate> | 
| 52 | 
< | 
OutputIterator copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate p) { | 
| 46 | 
> | 
  /**  | 
| 47 | 
> | 
   * copy_if is one of the missing functions in STL.  | 
| 48 | 
> | 
   * copy_if copies elements from the range [first, last) to the range [result, result + (last-first)),  | 
| 49 | 
> | 
   * except that any element for which pred is false is not copied. | 
| 50 | 
> | 
   */ | 
| 51 | 
> | 
  template<typename InputIterator, typename OutputIterator, typename Predicate> | 
| 52 | 
> | 
  OutputIterator copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate p) { | 
| 53 | 
  | 
    while (first != last) { | 
| 54 | 
< | 
        if (p(*first)) { | 
| 55 | 
< | 
            *result++ = *first; | 
| 56 | 
< | 
        } | 
| 57 | 
< | 
        ++first; | 
| 54 | 
> | 
      if (p(*first)) { | 
| 55 | 
> | 
        *result++ = *first; | 
| 56 | 
> | 
      } | 
| 57 | 
> | 
      ++first; | 
| 58 | 
  | 
    } | 
| 59 | 
  | 
 | 
| 60 | 
  | 
    return result; | 
| 61 | 
< | 
} | 
| 61 | 
> | 
  } | 
| 62 | 
  | 
 | 
| 63 | 
  | 
 | 
| 64 | 
  | 
 | 
| 65 | 
< | 
template<typename T> | 
| 66 | 
< | 
struct logical_xor :public std::binary_function<T, T, bool> { | 
| 67 | 
< | 
    double operator()(T x, T y) { return x ^ y; } | 
| 68 | 
< | 
}; | 
| 65 | 
> | 
  template<typename T> | 
| 66 | 
> | 
  struct logical_xor :public std::binary_function<T, T, bool> { | 
| 67 | 
> | 
    RealType operator()(T x, T y) { return x ^ y; } | 
| 68 | 
> | 
  }; | 
| 69 | 
  | 
 | 
| 70 | 
  | 
} |