33 #ifndef _GLIBCXX_PARALLEL_FIND_SELECTORS_H
34 #define _GLIBCXX_PARALLEL_FIND_SELECTORS_H 1
40 namespace __gnu_parallel
57 template<
typename RandomAccessIterator1,
typename RandomAccessIterator2,
60 operator()(RandomAccessIterator1 i1, RandomAccessIterator2 i2, Pred pred)
69 template<
typename RandomAccessIterator1,
typename RandomAccessIterator2,
73 RandomAccessIterator1 end1,
74 RandomAccessIterator2 begin2, Pred pred)
75 {
return std::make_pair(find_if(begin1, end1, pred,
87 template<
typename RandomAccessIterator1,
typename RandomAccessIterator2,
90 operator()(RandomAccessIterator1 i1, RandomAccessIterator2 i2, Pred pred)
93 return pred(*i1, *(i1 + 1));
102 template<
typename RandomAccessIterator1,
typename RandomAccessIterator2,
106 RandomAccessIterator1 end1,
107 RandomAccessIterator2 begin2, Pred pred)
110 RandomAccessIterator1 spot = adjacent_find(begin1, end1 + 1,
112 if (spot == (end1 + 1))
114 return std::make_pair(spot, begin2);
127 template<
typename RandomAccessIterator1,
typename RandomAccessIterator2,
130 operator()(RandomAccessIterator1 i1, RandomAccessIterator2 i2, Pred pred)
131 {
return !pred(*i1, *i2); }
140 template<
typename RandomAccessIterator1,
typename RandomAccessIterator2,
144 RandomAccessIterator1 end1,
145 RandomAccessIterator2 begin2, Pred pred)
146 {
return mismatch(begin1, end1, begin2, pred,
sequential_tag()); }
151 template<
typename ForwardIterator>
154 ForwardIterator begin;
158 : begin(begin), end(end) { }
164 template<
typename RandomAccessIterator1,
typename RandomAccessIterator2,
167 operator()(RandomAccessIterator1 i1, RandomAccessIterator2 i2, Pred pred)
169 for (ForwardIterator pos_in_candidates = begin;
170 pos_in_candidates != end; ++pos_in_candidates)
171 if (pred(*i1, *pos_in_candidates))
181 template<
typename RandomAccessIterator1,
typename RandomAccessIterator2,
185 RandomAccessIterator1 end1,
186 RandomAccessIterator2 begin2, Pred pred)
187 {
return std::make_pair(find_first_of(begin1, end1, begin, end, pred,