@@ -38,15 +38,15 @@ SOFTWARE.
38
38
// / Additional new variants of certain algorithms.
39
39
// /\ingroup utilities
40
40
41
- #include < stdint.h>
42
- #include < string.h>
43
-
44
41
#include " platform.h"
45
42
#include " type_traits.h"
46
43
#include " iterator.h"
47
44
#include " functional.h"
48
45
#include " utility.h"
49
46
47
+ #include < stdint.h>
48
+ #include < string.h>
49
+
50
50
#include " private/minmax_push.h"
51
51
52
52
#if ETL_USING_STL
@@ -183,13 +183,6 @@ namespace etl
183
183
{
184
184
return std::copy_n (sb, count, db);
185
185
}
186
- #elif ETL_USING_STL && ETL_USING_CPP11 && !ETL_FORCE_CONSTEXPR_ALGORITHMS
187
- // Use the STL implementation
188
- template <typename TIterator1, typename TSize, typename TIterator2>
189
- TIterator2 copy_n (TIterator1 sb, TSize count, TIterator2 db)
190
- {
191
- return std::copy_n (sb, count, db);
192
- }
193
186
#else
194
187
// Non-pointer or not trivially copyable or not using builtin memcpy.
195
188
template <typename TIterator1, typename TSize, typename TIterator2>
@@ -236,12 +229,6 @@ namespace etl
236
229
{
237
230
return std::move (sb, se, db);
238
231
}
239
- #elif ETL_USING_STL && ETL_USING_CPP11 && !ETL_FORCE_CONSTEXPR_ALGORITHMS
240
- template <typename TIterator1, typename TIterator2>
241
- TIterator2 move (TIterator1 sb, TIterator1 se, TIterator2 db)
242
- {
243
- return std::move (sb, se, db);
244
- }
245
232
#else
246
233
// non-pointer or not trivially copyable
247
234
template <typename TIterator1, typename TIterator2>
@@ -267,12 +254,6 @@ namespace etl
267
254
{
268
255
return std::move_backward (sb, se, de);
269
256
}
270
- #elif ETL_USING_STL && ETL_USING_CPP11 && !ETL_FORCE_CONSTEXPR_ALGORITHMS
271
- template <typename TIterator1, typename TIterator2>
272
- TIterator2 move_backward (TIterator1 sb, TIterator1 se, TIterator2 de)
273
- {
274
- return std::move_backward (sb, se, de);
275
- }
276
257
#else
277
258
// non-pointer or not trivially copyable
278
259
template <typename TIterator1, typename TIterator2>
@@ -424,6 +405,27 @@ namespace etl
424
405
etl::upper_bound (first, last, value, compare ()));
425
406
}
426
407
408
+ // ***************************************************************************
409
+ // binary_search
410
+ // ***************************************************************************
411
+ template <typename TIterator, typename T, typename Compare>
412
+ ETL_NODISCARD
413
+ bool binary_search (TIterator first, TIterator last, const T& value, Compare compare)
414
+ {
415
+ first = etl::lower_bound (first, last, value, compare);
416
+
417
+ return (!(first == last) && !(compare (value, *first)));
418
+ }
419
+
420
+ template <typename TIterator, typename T>
421
+ ETL_NODISCARD
422
+ bool binary_search (TIterator first, TIterator last, const T& value)
423
+ {
424
+ typedef etl::less<typename etl::iterator_traits<TIterator>::value_type> compare;
425
+
426
+ return binary_search (first, last, value, compare ());
427
+ }
428
+
427
429
// ***************************************************************************
428
430
// find_if
429
431
// ***************************************************************************
0 commit comments