33#ifndef ETL_ALGORITHM_INCLUDED
34#define ETL_ALGORITHM_INCLUDED
67 template <
typename TIterator>
68#if ETL_USING_STD_NAMESPACE
75 template <
typename TIterator,
typename TCompare>
76#if ETL_USING_STD_NAMESPACE
83 template <
typename TIterator>
86 template <
typename TIterator,
typename TCompare>
116 namespace private_algorithm
118 template <
bool use_swap>
125 template <
typename TIterator1,
typename TIterator2>
128 typename etl::iterator_traits<TIterator1>::value_type
tmp = *a;
138 template <
typename TIterator1,
typename TIterator2>
141 using ETL_OR_STD::swap;
150 template <
typename TIterator1,
typename TIterator2>
151#if ETL_USING_STD_NAMESPACE
161 typedef typename traits1::value_type
v1;
162 typedef typename traits2::value_type
v2;
164 typedef typename traits1::reference
r1;
165 typedef typename traits2::reference
r2;
177 template <
typename TIterator1,
typename TIterator2>
178#if ETL_USING_STD_NAMESPACE
199 template <
typename TIterator,
typename TFunction>
211#if ETL_USING_STL && ETL_USING_CPP20
213 template <
typename TIterator1,
typename TIterator2>
216 return std::copy(
sb,
se,
db);
220 template <
typename TIterator1,
typename TIterator2>
236#if ETL_USING_STL && ETL_USING_CPP20
237 template <
typename TIterator1,
typename TIterator2>
240 return std::reverse_copy(
sb,
se,
db);
243 template <
typename TIterator1,
typename TIterator2>
259#if ETL_USING_STL && ETL_USING_CPP20
261 template <
typename TIterator1,
typename TSize,
typename TIterator2>
264 return std::copy_n(
sb, count,
db);
268 template <
typename TIterator1,
typename TSize,
typename TIterator2>
285#if ETL_USING_STL && ETL_USING_CPP20
286 template <
typename TIterator1,
typename TIterator2>
289 return std::copy_backward(
sb,
se,
de);
292 template <
typename TIterator1,
typename TIterator2>
306#if ETL_USING_STL && ETL_USING_CPP20
307 template <
typename TIterator1,
typename TIterator2>
310 return std::move(
sb,
se,
db);
314 template <
typename TIterator1,
typename TIterator2>
319 *
db = etl::move(*
sb);
328 template <
typename TIterator1,
typename TIterator2>
337#if ETL_USING_STL && ETL_USING_CPP20
338 template <
typename TIterator1,
typename TIterator2>
341 return std::move_backward(
sb,
se,
de);
345 template <
typename TIterator1,
typename TIterator2>
350 *(--
de) = etl::move(*(--
se));
357 template <
typename TIterator1,
typename TIterator2>
360 return etl::copy_backward(
sb,
se,
de);
368 template <
typename TIterator>
377 etl::iter_swap(
b, e);
384 template <
typename TIterator>
389 while ((
b != e) && (
b != --e))
391 etl::iter_swap(
b++, e);
398 template<
typename TIterator,
typename TValue,
typename TCompare>
403 typedef typename etl::iterator_traits<TIterator>::difference_type
difference_t;
412 etl::advance(itr, step);
414 if (compare(*itr, value))
428 template<
typename TIterator,
typename TValue>
435 return etl::lower_bound(first, last, value, compare());
441 template<
typename TIterator,
typename TValue,
typename TCompare>
446 typedef typename etl::iterator_traits<TIterator>::difference_type
difference_t;
455 etl::advance(itr, step);
457 if (!compare(value, *itr))
471 template<
typename TIterator,
typename TValue>
478 return etl::upper_bound(first, last, value, compare());
484 template<
typename TIterator,
typename TValue,
typename TCompare>
489 return ETL_OR_STD::make_pair(etl::lower_bound(first, last, value, compare),
490 etl::upper_bound(first, last, value, compare));
493 template<
typename TIterator,
typename TValue>
499 return ETL_OR_STD::make_pair(etl::lower_bound(first, last, value, compare()),
500 etl::upper_bound(first, last, value, compare()));
506 template <
typename TIterator,
typename T,
typename Compare>
510 first = etl::lower_bound(first, last, value, compare);
512 return (!(first == last) && !(compare(value, *first)));
515 template <
typename TIterator,
typename T>
521 return binary_search(first, last, value, compare());
527 template <
typename TIterator,
typename TUnaryPredicate>
532 while (first != last)
548 template <
typename TIterator,
typename T>
553 while (first != last)
568#if ETL_USING_STL && ETL_USING_CPP20
569 template<
typename TIterator,
typename TValue>
572 std::fill(first, last, value);
575 template<
typename TIterator,
typename TValue>
578 while (first != last)
588#if ETL_USING_STL && ETL_USING_CPP20
589 template<
typename TIterator,
typename TSize,
typename TValue>
592 return std::fill_n(first, count, value);
595 template<
typename TIterator,
typename TSize,
typename TValue>
611 template <
typename TIterator,
typename T>
614 typename etl::iterator_traits<TIterator>::difference_type count(
TIterator first,
TIterator last,
const T& value)
616 typename iterator_traits<TIterator>::difference_type
n = 0;
618 while (first != last)
634 template <
typename TIterator,
typename TUnaryPredicate>
637 typename etl::iterator_traits<TIterator>::difference_type
640 typename iterator_traits<TIterator>::difference_type
n = 0;
642 while (first != last)
657#if ETL_USING_STL && ETL_USING_CPP20
659 template <
typename TIterator1,
typename TIterator2>
668 template <
typename TIterator1,
typename TIterator2,
typename TPredicate>
677 template <
typename TIterator1,
typename TIterator2>
686 template <
typename TIterator1,
typename TIterator2,
typename TPredicate>
696 template <
typename TIterator1,
typename TIterator2>
716 template <
typename TIterator1,
typename TIterator2,
typename TPredicate>
736 template <
typename TIterator1,
typename TIterator2>
756 template <
typename TIterator1,
typename TIterator2,
typename TPredicate>
779 template <
typename TIterator1,
typename TIterator2,
typename TCompare>
806 template <
typename TIterator1,
typename TIterator2>
820 template <
typename T,
typename TCompare>
825 return (compare(a,
b)) ? a :
b;
828 template <
typename T>
831 const T& min(
const T& a,
const T&
b)
835 return etl::min(a,
b, compare());
841 template <
typename T,
typename TCompare>
846 return (compare(a,
b)) ?
b : a;
849 template <
typename T>
852 const T& max(
const T& a,
const T&
b)
856 return etl::max(a,
b, compare());
862 template <
typename TIterator,
typename TUnaryOperation>
866 while (first != last)
878 template <
typename TIteratorIn,
typename TIteratorOut,
typename TUnaryOperation>
893 template <
typename TIteratorIn1,
typename TIteratorIn2,
typename TIteratorOut,
typename TBinaryOperation>
912 template <
typename TIterator,
typename T>
915 while (first != last)
929 template <
typename TIterator,
typename TPredicate,
typename T>
932 while (first != last)
946 namespace private_heap
949 template <
typename TIterator,
typename TDistance,
typename TValue,
typename TCompare>
954 while ((
value_index > top_index) && compare(first[parent], value))
965 template <
typename TIterator,
typename TDistance,
typename TValue,
typename TCompare>
989 push_heap(first,
value_index, top_index, ETL_MOVE(value), compare);
993 template <
typename TIterator,
typename TDistance,
typename TCompare>
1000 if (compare(first[parent], first[
child]))
1005 if ((
child & 1) == 0)
1016 template <
typename TIterator,
typename TCompare>
1019 typedef typename etl::iterator_traits<TIterator>::value_type
value_t;
1020 typedef typename etl::iterator_traits<TIterator>::difference_type
distance_t;
1022 value_t value = ETL_MOVE(last[-1]);
1023 last[-1] = ETL_MOVE(first[0]);
1025 private_heap::adjust_heap(first,
distance_t(0),
distance_t(last - first - 1), ETL_MOVE(value), compare);
1029 template <
typename TIterator>
1034 etl::pop_heap(first, last, compare());
1038 template <
typename TIterator,
typename TCompare>
1041 typedef typename etl::iterator_traits<TIterator>::difference_type
difference_t;
1042 typedef typename etl::iterator_traits<TIterator>::value_type
value_t;
1048 template <
typename TIterator>
1053 etl::push_heap(first, last, compare());
1057 template <
typename TIterator,
typename TCompare>
1060 typedef typename etl::iterator_traits<TIterator>::difference_type
difference_t;
1062 if ((last - first) < 2)
1072 private_heap::adjust_heap(first, parent, length, ETL_MOVE(*(first + parent)), compare);
1084 template <
typename TIterator>
1089 etl::make_heap(first, last, compare());
1093 template <
typename TIterator>
1099 return private_heap::is_heap(first, last - first, compare());
1103 template <
typename TIterator,
typename TCompare>
1107 return private_heap::is_heap(first, last - first, compare);
1111 template <
typename TIterator>
1114 while (first != last)
1116 etl::pop_heap(first, last);
1122 template <
typename TIterator,
typename TCompare>
1125 while (first != last)
1127 etl::pop_heap(first, last, compare);
1135 template<
typename TIterator1,
typename TIterator2,
typename TCompare>
1171 template<
typename TIterator1,
typename TIterator2>
1184 namespace private_algorithm
1189 template <
typename TIterator>
1199 typedef typename etl::iterator_traits<TIterator>::value_type value_type;
1201 int n = last - first;
1203 int gcd_nm = (
n == 0 || m == 0) ?
n + m :
etl::gcd(
n, m);
1207 for (
int i = 0; i <
gcd_nm; i++)
1209 value_type
temp = ETL_MOVE(*(first + i));
1226 *(first +
j) = ETL_MOVE(*(first +
k));
1230 *(first +
j) = ETL_MOVE(
temp);
1238 template <
typename TIterator>
1248 typedef typename etl::iterator_traits<TIterator>::value_type value_type;
1250 int n = last - first;
1252 int gcd_nm = (
n == 0 || m == 0) ?
n + m :
etl::gcd(
n, m);
1256 for (
int i = 0; i <
gcd_nm; i++)
1258 value_type
temp = *(first + i);
1275 *(first +
j) = *(first +
k);
1279 *(first +
j) =
temp;
1288 template <
typename TIterator>
1299 etl::advance(result, etl::distance(
middle, last));
1303 reverse(first, last);
1310 template <
typename TIterator>
1322 etl::advance(result, etl::distance(
middle, last));
1324 while (first != next)
1326 using ETL_OR_STD::swap;
1327 swap(*first++, *next++);
1333 else if (first ==
middle)
1344 template <
typename TIterator>
1348 typedef typename etl::iterator_traits<TIterator>::value_type value_type;
1351 value_type
temp(ETL_MOVE(*first));
1354 TIterator result = etl::move(etl::next(first), last, first);
1357 *result = ETL_MOVE(
temp);
1365 template <
typename TIterator>
1369 typedef typename etl::iterator_traits<TIterator>::value_type value_type;
1373 value_type
temp(ETL_MOVE(*previous));
1376 TIterator result = etl::move_backward(first, previous, last);
1379 *first = ETL_MOVE(
temp);
1387 template<
typename TIterator>
1391 if (etl::next(first) ==
middle)
1393 return private_algorithm::rotate_left_by_one(first, last);
1396 if (etl::next(
middle) == last)
1401 return private_algorithm::rotate_general(first,
middle, last);
1405 return private_algorithm::rotate_right_by_one(first, last);
1408 return private_algorithm::rotate_general(first,
middle, last);
1412 return private_algorithm::rotate_general(first,
middle, last);
1419 template <
typename TIterator1,
typename TIterator2,
typename TPredicate>
1452 template <
typename TIterator1,
typename TIterator2>
1468 template <
typename TIterator,
typename TCompare>
1500 template <
typename TIterator>
1506 typedef typename etl::iterator_traits<TIterator>::value_type
value_t;
1516 template <
typename TIterator,
typename TCompare>
1548 template <
typename TIterator>
1554 typedef typename etl::iterator_traits<TIterator>::value_type
value_t;
1564 template <
typename TIterator,
typename TCompare>
1594 return ETL_OR_STD::pair<TIterator, TIterator>(
minimum, maximum);
1602 template <
typename TIterator>
1608 typedef typename etl::iterator_traits<TIterator>::value_type
value_t;
1618 template <
typename T>
1621 ETL_OR_STD::pair<const T&, const T&>
minmax(
const T& a,
1624 return (
b < a) ? ETL_OR_STD::pair<const T&, const T&>(
b, a) : ETL_OR_STD::pair<const T&, const T&>(a,
b);
1632 template <
typename T,
typename TCompare>
1635 ETL_OR_STD::pair<const T&, const T&>
minmax(
const T& a,
1639 return compare(
b, a) ? ETL_OR_STD::pair<const T&, const T&>(
b, a) : ETL_OR_STD::pair<const T&, const T&>(a,
b);
1647 template <
typename TIterator>
1657 while (++next !=
end)
1676 template <
typename TIterator,
typename TCompare>
1687 while (++next !=
end)
1706 template<
typename TIterator>
1720 template<
typename TIterator,
typename TCompare>
1734 template <
typename TIterator,
typename TCompare>
1745 while (++next !=
end)
1763 template <
typename TIterator>
1773 while (++next !=
end)
1775 if (!(*
begin < *next))
1791 template<
typename TIterator>
1804 template<
typename TIterator,
typename TCompare>
1819 template <
typename TIterator,
typename TUnaryPredicate>
1844 template <
typename TIterator1,
typename TIterator2>
1859 if (i == etl::find(
begin1, i, *i))
1863 if (
n == 0 ||
size_t(etl::count(i,
end1, *i)) !=
n)
1879 template <
typename TIterator1,
typename TIterator2,
typename TBinaryPredicate>
1899 if (
n == 0 ||
size_t(etl::count(i,
end1, *i)) !=
n)
1915 template <
typename TIterator1,
typename TIterator2>
1927 if (i == etl::find(
begin1, i, *i))
1931 if (
n == 0 ||
size_t(etl::count(i,
end1, *i)) !=
n)
1947 template <
typename TIterator1,
typename TIterator2,
typename TBinaryPredicate>
1963 if (
n == 0 ||
size_t(etl::count(i,
end1, *i)) !=
n)
1979 template <
typename TIterator,
typename TUnaryPredicate>
2014 template <
typename TIterator,
typename TUnaryPredicate>
2040 template <
typename TSource,
typename TDestinationTrue,
typename TDestinationFalse,
typename TUnaryPredicate>
2072 template <
typename TIterator,
typename TOutputIterator,
typename TUnaryPredicate>
2098 template <
typename TIterator,
typename TUnaryPredicate>
2113 template <
typename TIterator,
typename TUnaryPredicate>
2128 template <
typename TIterator,
typename TUnaryPredicate>
2138#if ETL_NOT_USING_STL
2144 template <
typename TIterator,
typename TCompare>
2154 template <
typename TIterator>
2166 template <
typename TIterator,
typename TCompare>
2177 template <
typename TIterator>
2188 template <
typename TIterator,
typename TCompare>
2191 std::sort(first, last,
compare);
2198 template <
typename TIterator>
2201 std::sort(first, last);
2210 template <
typename TIterator,
typename TCompare>
2213 std::stable_sort(first, last,
compare);
2221 template <
typename TIterator>
2224 std::stable_sort(first, last);
2232 template <
typename TIterator,
typename T>
2236 while (first != last)
2238 sum = ETL_MOVE(sum) + *first;
2249 template <
typename TIterator,
typename T,
typename TBinaryOperation>
2253 while (first != last)
2255 sum = operation(ETL_MOVE(sum), *first);
2266 template<
typename T,
typename TCompare>
2273 template <
typename T>
2280 template<
typename T, T Low, T High,
typename TCompare>
2284 return compare(value,
Low) ?
Low : compare(
High, value) ?
High : value;
2287 template <
typename T, T Low, T High>
2298 template <
typename TIterator,
typename T>
2302 first = etl::find(first, last, value);
2308 while (++itr != last)
2310 if (!(*itr == value))
2312 *first++ = ETL_MOVE(*itr);
2324 template <
typename TIterator,
typename TUnaryPredicate>
2328 first = etl::find_if(first, last,
predicate);
2334 while (++itr != last)
2338 *first++ = ETL_MOVE(*itr);
2373 typedef typename iterator_traits<TInputIterator>::difference_type
s_size_type;
2374 typedef typename iterator_traits<TOutputIterator>::difference_type
d_size_type;
2377 typedef typename etl::common_type<s_size_type, d_size_type>::type
min_size_type;
2379 typedef typename etl::largest_type<s_size_type, d_size_type>::type
min_size_type;
2461 while ((
n1-- > 0) && (
n2-- > 0))
2542 template <
typename TInputIterator,
typename TOutputIterator>
2551 using s_size_type =
typename iterator_traits<TInputIterator>::difference_type;
2552 using d_size_type =
typename iterator_traits<TOutputIterator>::difference_type;
2553 using min_size_type =
typename etl::common_type<s_size_type, d_size_type>::type;
2575 template <
typename TInputIterator,
typename TOutputIterator>
2606 template <
typename TInputIterator,
typename TOutputIterator>
2622 template <
typename TIterator,
typename TValue>
2631 if ((it ==
end) || (*it != value))
2746 template <
typename TInputIterator,
typename TOutputIterator,
typename TUnaryFunction>
3016 template <
typename TIterator,
typename TCompare>
3017#if ETL_USING_STD_NAMESPACE
3029 typedef typename etl::iterator_traits<TIterator>::difference_type
difference_t;
3042 etl::advance(
itr1,
k);
3043 etl::advance(
itr2,
k + i);
3058 template <
typename TIterator>
3059#if ETL_USING_STD_NAMESPACE
3074 template <
typename TIterator,
typename TCompare>
3078 for (
TIterator itr = first; itr != last; ++itr)
3080 etl::rotate(etl::upper_bound(first, itr, *itr,
compare), itr, etl::next(itr));
3088 template <
typename TIterator>
3096 namespace private_algorithm
3098 template <
typename TIterator>
3116 template <
typename TIterator>
3127 template <
typename TIterator>
3141 template <
typename TIterator,
typename TCompare>
3146 const TIterator ilast = private_algorithm::get_before_last(first, last);
3164 using ETL_OR_STD::swap;
3173 template <
typename TIterator>
3185 template <
typename TIterator,
typename TCompare>
3189 if (!etl::is_heap(first, last,
compare))
3191 etl::make_heap(first, last,
compare);
3194 etl::sort_heap(first, last,
compare);
3201 template <
typename TIterator>
3205 if (!etl::is_heap(first, last))
3207 etl::make_heap(first, last);
3210 etl::sort_heap(first, last);
3217 template <
typename T>
3221 return a <
b ?
b : a;
3224 template <
typename T,
typename...
Tx>
3237 template <
typename TCompare,
typename T>
3241 return compare(a,
b) ?
b : a;
3244 template <
typename TCompare,
typename T,
typename...
Tx>
3256 template <
typename T>
3260 return a <
b ? a :
b;
3263 template <
typename T,
typename...
Tx>
3276 template <
typename TCompare,
typename T>
3280 return compare(a,
b) ? a :
b;
3283 template <
typename TCompare,
typename T,
typename...
Tx>
3295 template <
typename TIterator>
3299 return *a < *
b ?
b : a;
3315 template <
typename TCompare,
typename TIterator>
3319 return compare(*a, *
b) ?
b : a;
3334 template <
typename TIterator>
3338 return *a < *
b ? a :
b;
3354 template <
typename TCompare,
typename TIterator>
3358 return compare(*a, *
b) ? a :
b;
3374 template <
typename TIterator,
typename TPredicate>
3386 for (
TIterator i = etl::next(first); i != last; ++i)
3390 using ETL_OR_STD::swap;
3404 template <
typename TIterator,
typename TPredicate>
3409 while (first != last)
3428 using ETL_OR_STD::swap;
3429 swap(*first, *last);
3437 namespace private_algorithm
3439 using ETL_OR_STD::swap;
3441 template <
typename TIterator,
typename TCompare>
3442#if (ETL_USING_CPP20 && ETL_USING_STL) || (ETL_USING_CPP14 && ETL_NOT_USING_STL && !defined(ETL_IN_UNIT_TEST))
3447 typedef typename etl::iterator_traits<TIterator>::value_type value_type;
3455 swap(*
pivot, *last);
3481#if (ETL_USING_CPP20 && ETL_USING_STL) || (ETL_USING_CPP14 && ETL_NOT_USING_STL && !defined(ETL_IN_UNIT_TEST))
3495 while (first <= last)
3497 TIterator p = private_algorithm::nth_partition(first, last, compare);
3517 template <
typename TIterator,
typename TCompare>
3529 while (first <= last)
3549 template <
typename TIterator>
Definition algorithm.h:100
Definition algorithm.h:90
Definition iterator.h:228
ETL_CONSTEXPR T clamp(const T &value, const T &low, const T &high, TCompare compare)
Definition algorithm.h:2268
ETL_CONSTEXPR20 void shell_sort(TIterator first, TIterator last)
Definition algorithm.h:3064
ETL_CONSTEXPR14 TOutputIterator copy_if(TIterator begin, TIterator end, TOutputIterator out, TUnaryPredicate predicate)
Definition algorithm.h:2074
ETL_CONSTEXPR14 ETL_OR_STD::pair< TDestinationTrue, TDestinationFalse > partition_transform(TSource begin, TSource end, TDestinationTrue destination_true, TDestinationFalse destination_false, TUnaryFunctionTrue function_true, TUnaryFunctionFalse function_false, TUnaryPredicate predicate)
Definition algorithm.h:2942
ETL_NODISCARD ETL_CONSTEXPR14 bool any_of(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:2116
ETL_NODISCARD ETL_CONSTEXPR14 TIterator min_element(TIterator begin, TIterator end, TCompare compare)
Definition algorithm.h:1471
ETL_CONSTEXPR14 TOutputIterator transform_n_if(TInputIterator i_begin, TSize n, TOutputIterator o_begin, TUnaryFunction function, TUnaryPredicate predicate)
Definition algorithm.h:2881
ETL_CONSTEXPR14 T accumulate(TIterator first, TIterator last, T sum)
Definition algorithm.h:2234
ETL_NODISCARD ETL_CONSTEXPR14 bool all_of(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:2101
ETL_NODISCARD ETL_CONSTEXPR14 ETL_OR_STD::pair< TIterator, TIterator > minmax_element(TIterator begin, TIterator end, TCompare compare)
Definition algorithm.h:1567
ETL_CONSTEXPR14 TOutputIterator transform_if(TInputIterator i_begin, const TInputIterator i_end, TOutputIterator o_begin, TUnaryFunction function, TUnaryPredicate predicate)
Definition algorithm.h:2819
ETL_CONSTEXPR14 TUnaryFunction for_each_if(TIterator begin, const TIterator end, TUnaryFunction function, TUnaryPredicate predicate)
Definition algorithm.h:2674
ETL_NODISCARD ETL_CONSTEXPR14 TIterator find_if_not(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:1822
ETL_NODISCARD ETL_CONSTEXPR14 bool is_sorted(TIterator begin, TIterator end)
Definition algorithm.h:1709
ETL_CONSTEXPR14 TOutputIterator transform_s(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin, TOutputIterator o_end, TUnaryFunction function)
Definition algorithm.h:2748
ETL_CONSTEXPR14 TIterator remove(TIterator first, TIterator last, const T &value)
Definition algorithm.h:2300
ETL_CONSTEXPR14 void transform_n(TInputIterator i_begin, TSize n, TOutputIterator o_begin, TUnaryFunction function)
Definition algorithm.h:2775
ETL_CONSTEXPR14 TOutputIterator copy_n_if(TInputIterator i_begin, TSize n, TOutputIterator o_begin, TUnaryPredicate predicate)
Definition algorithm.h:2511
ETL_NODISCARD ETL_CONSTEXPR14 TIterator is_sorted_until(TIterator begin, TIterator end)
Definition algorithm.h:1650
ETL_CONSTEXPR14 void insertion_sort(TIterator first, TIterator last)
Definition algorithm.h:3090
void sort(TIterator first, TIterator last, TCompare compare)
Definition algorithm.h:2189
ETL_NODISCARD ETL_CONSTEXPR14 bool is_unique_sorted(TIterator begin, TIterator end)
Definition algorithm.h:1794
ETL_NODISCARD ETL_CONSTEXPR14 ETL_OR_STD::pair< const T &, const T & > minmax(const T &a, const T &b)
Definition algorithm.h:1621
ETL_CONSTEXPR14 etl::enable_if< etl::is_random_iterator< TInputIterator >::value &&etl::is_random_iterator< TOutputIterator >::value, TOutputIterator >::type copy_s(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin, TOutputIterator o_end)
Definition algorithm.h:2368
ETL_CONSTEXPR14 TIterator remove_if(TIterator first, TIterator last, TUnaryPredicate predicate)
Definition algorithm.h:2326
ETL_CONSTEXPR14 ETL_OR_STD::pair< TDestinationTrue, TDestinationFalse > partition_copy(TSource begin, TSource end, TDestinationTrue destination_true, TDestinationFalse destination_false, TUnaryPredicate predicate)
Definition algorithm.h:2042
ETL_CONSTEXPR14 TIterator for_each_n(TIterator begin, TSize n, TUnaryFunction function)
Definition algorithm.h:2700
ETL_NODISCARD ETL_CONSTEXPR14 TIterator binary_find(TIterator begin, TIterator end, const TValue &value)
Definition algorithm.h:2625
ETL_CONSTEXPR14 void heap_sort(TIterator first, TIterator last, TCompare compare)
Definition algorithm.h:3187
ETL_NODISCARD ETL_CONSTEXPR14 bool none_of(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:2131
ETL_CONSTEXPR20 void selection_sort(TIterator first, TIterator last, TCompare compare)
Definition algorithm.h:3143
ETL_CONSTEXPR14 TOutputIterator copy_n_s(TInputIterator i_begin, TSize n, TOutputIterator o_begin, TOutputIterator o_end)
Definition algorithm.h:2431
ETL_NODISCARD ETL_CONSTEXPR14 TIterator is_unique_sorted_until(TIterator begin, TIterator end, TCompare compare)
Definition algorithm.h:1737
TOutputIterator move_s(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin, TOutputIterator o_end)
Definition algorithm.h:2607
ETL_CONSTEXPR14 TOutputIterator copy_if_s(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin, TOutputIterator o_end, TUnaryPredicate predicate)
Definition algorithm.h:2481
ETL_CONSTEXPR14 TIterator for_each_n_if(TIterator begin, TSize n, TUnaryFunction function, TUnaryPredicate predicate)
Definition algorithm.h:2722
void stable_sort(TIterator first, TIterator last, TCompare compare)
Definition algorithm.h:2211
ETL_NODISCARD ETL_CONSTEXPR14 bool is_partitioned(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:1982
ETL_NODISCARD ETL_CONSTEXPR14 TIterator max_element(TIterator begin, TIterator end, TCompare compare)
Definition algorithm.h:1519
ETL_NODISCARD ETL_CONSTEXPR14 TIterator partition_point(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:2017
ETL_NODISCARD ETL_CONSTEXPR14 bool is_permutation(TIterator1 begin1, TIterator1 end1, TIterator2 begin2)
Definition algorithm.h:1847
#define ETL_ASSERT(b, e)
Definition error_handler.h:356
Definition exception.h:47
enable_if
Definition type_traits_generator.h:1230
is_reference
Definition type_traits_generator.h:1150
is_same
Definition type_traits_generator.h:1080
bitset_ext
Definition absolute.h:38
etl::enable_if< etl::is_random_access_iterator_concept< TIterator >::value, void >::type nth_element(TIterator first, TIterator nth, TIterator last, TCompare compare)
Definition algorithm.h:3519
void swap(etl::array< T, SIZE > &lhs, etl::array< T, SIZE > &rhs)
Template deduction guides.
Definition array.h:1085
ETL_CONSTEXPR TContainer::size_type size(const TContainer &container)
Definition iterator.h:1187
ETL_CONSTEXPR TContainer::iterator begin(TContainer &container)
Definition iterator.h:962
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:314
ETL_CONSTEXPR14 etl::enable_if< etl::is_forward_iterator< TIterator >::value, TIterator >::type partition(TIterator first, TIterator last, TPredicate predicate)
Returns the maximum value.
Definition algorithm.h:3377
ETL_CONSTEXPR TContainer::iterator end(TContainer &container)
Definition iterator.h:992
Definition functional.h:274
Definition iterator.h:854
Definition iterator.h:873
Definition functional.h:170
Definition algorithm.h:119