@@ -38,15 +38,15 @@ SOFTWARE.
3838// / Additional new variants of certain algorithms.
3939// /\ingroup utilities
4040
41- #include < stdint.h>
42- #include < string.h>
43-
4441#include " platform.h"
4542#include " type_traits.h"
4643#include " iterator.h"
4744#include " functional.h"
4845#include " utility.h"
4946
47+ #include < stdint.h>
48+ #include < string.h>
49+
5050#include " private/minmax_push.h"
5151
5252#if ETL_USING_STL
@@ -183,13 +183,6 @@ namespace etl
183183 {
184184 return std::copy_n (sb, count, db);
185185 }
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- }
193186#else
194187 // Non-pointer or not trivially copyable or not using builtin memcpy.
195188 template <typename TIterator1, typename TSize, typename TIterator2>
@@ -236,12 +229,6 @@ namespace etl
236229 {
237230 return std::move (sb, se, db);
238231 }
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- }
245232#else
246233 // non-pointer or not trivially copyable
247234 template <typename TIterator1, typename TIterator2>
@@ -267,12 +254,6 @@ namespace etl
267254 {
268255 return std::move_backward (sb, se, de);
269256 }
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- }
276257#else
277258 // non-pointer or not trivially copyable
278259 template <typename TIterator1, typename TIterator2>
@@ -424,6 +405,27 @@ namespace etl
424405 etl::upper_bound (first, last, value, compare ()));
425406 }
426407
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+
427429 // ***************************************************************************
428430 // find_if
429431 // ***************************************************************************
0 commit comments