45 template <
class InputIt,
46 class T =
typename std::iterator_traits<InputIt>::value_type>
53 for(InputIt i = start; i < end; i++)
64 #pragma omp cancel for 83 template <
class InputIt,
class UnaryPred>
90 for(InputIt i = start; i < end; i++)
101 #pragma omp cancel for 118 template <
class InputIt,
class UnaryPred>
126 std::vector<std::tuple<InputIt, InputIt>> parts;
127 parts.push_back(std::make_tuple(start, end));
132 while(parts.size() > 0)
134 std::vector<std::tuple<InputIt, InputIt>> l_parts;
138 for(
auto it = parts.begin(); it != parts.end(); it++)
142 InputIt i = std::get<0>(*it);
143 InputIt end = std::get<1>(*it);
144 std::ptrdiff_t diff = end - i;
147 if(predicate(*i, *(end - 1)))
155 std::swap(*(end - 1), *(end - 2));
157 std::swap(*i, *(end - 1));
162 if(end - 1 - std::get<0>(*it) > 1)
166 std::make_tuple(std::get<0>(*it), end - 1));
167 omp_unset_lock(&mtx);
169 if(std::get<1>(*it) - end > 1)
172 l_parts.push_back(std::make_tuple(end, std::get<1>(*it)));
173 omp_unset_lock(&mtx);
178 parts = std::move(l_parts);
181 omp_destroy_lock(&mtx);
196 template <
class InputIt,
197 class T =
typename std::iterator_traits<InputIt>::value_type>
202 return std::remove(start, end, val);
210 #pragma omp for ordered 211 for(T *i = s + 1; i != e; i++)
217 *s = std::move((*i));
222 start += s - start.base();
240 template <
class InputIt,
class UnaryPred,
241 class T =
typename std::iterator_traits<InputIt>::value_type>
246 return std::remove_if(start, end, predicate);
254 #pragma omp for ordered 255 for(T *i = s + 1; i != e; i++)
266 start += s - start.base();
273 #endif // ALGORITHM_H The Algorithm class.
Definition: Algorithm.h:28
static InputIt parallelFindIf(InputIt start, InputIt end, UnaryPred predicate)
Definition: Algorithm.h:85
static void parallelSort(InputIt start, InputIt end, UnaryPred predicate)
Definition: Algorithm.h:120
static InputIt parallelRemove(InputIt start, InputIt end, const T &val)
Definition: Algorithm.h:199
static InputIt parallelRemoveIf(InputIt start, InputIt end, UnaryPred predicate)
Definition: Algorithm.h:243
static InputIt parallelFind(InputIt start, InputIt end, const T &val)
Definition: Algorithm.h:48