From 17012d5aae0999345de04524f2f609faf87664cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Tue, 3 May 2022 22:59:44 +0200 Subject: [PATCH] Split lower_bound/upper_bound to its own header --- include/boost/move/algo/detail/merge.hpp | 50 +------------- include/boost/move/algo/detail/search.hpp | 79 +++++++++++++++++++++++ 2 files changed, 80 insertions(+), 49 deletions(-) create mode 100644 include/boost/move/algo/detail/search.hpp diff --git a/include/boost/move/algo/detail/merge.hpp b/include/boost/move/algo/detail/merge.hpp index e3bde2f..f631923 100644 --- a/include/boost/move/algo/detail/merge.hpp +++ b/include/boost/move/algo/detail/merge.hpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -368,55 +369,6 @@ RandIt rotate_gcd(RandIt first, RandIt middle, RandIt last) return ret; } -template -RandIt lower_bound - (RandIt first, const RandIt last, const T& key, Compare comp) -{ - typedef typename iter_size::type size_type; - size_type len = size_type(last - first); - RandIt middle; - - while (len) { - size_type step = size_type(len >> 1); - middle = first; - middle += step; - - if (comp(*middle, key)) { - first = ++middle; - len = size_type(len - (step + 1)); - } - else{ - len = step; - } - } - return first; -} - -template -RandIt upper_bound - (RandIt first, const RandIt last, const T& key, Compare comp) -{ - typedef typename iter_size::type size_type; - size_type len = size_type(last - first); - RandIt middle; - - while (len) { - size_type step = size_type(len >> 1); - middle = first; - middle += step; - - if (!comp(key, *middle)) { - first = ++middle; - len = size_type(len - (step + 1)); - } - else{ - len = step; - } - } - return first; -} - - template void op_merge_left( RandIt buf_first , RandIt first1 diff --git a/include/boost/move/algo/detail/search.hpp b/include/boost/move/algo/detail/search.hpp new file mode 100644 index 0000000..9433fbd --- /dev/null +++ b/include/boost/move/algo/detail/search.hpp @@ -0,0 +1,79 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2022-2022. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_MOVE_DETAIL_SEARCH_HPP +#define BOOST_MOVE_DETAIL_SEARCH_HPP + +#include + +#if defined(BOOST_CLANG) || (defined(BOOST_GCC) && (BOOST_GCC >= 40600)) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#endif + +namespace boost { +namespace movelib { + +template +RandIt lower_bound + (RandIt first, const RandIt last, const T& key, Compare comp) +{ + typedef typename iter_size::type size_type; + size_type len = size_type(last - first); + RandIt middle; + + while (len) { + size_type step = size_type(len >> 1); + middle = first; + middle += step; + + if (comp(*middle, key)) { + first = ++middle; + len = size_type(len - (step + 1)); + } + else{ + len = step; + } + } + return first; +} + +template +RandIt upper_bound + (RandIt first, const RandIt last, const T& key, Compare comp) +{ + typedef typename iter_size::type size_type; + size_type len = size_type(last - first); + RandIt middle; + + while (len) { + size_type step = size_type(len >> 1); + middle = first; + middle += step; + + if (!comp(key, *middle)) { + first = ++middle; + len = size_type(len - (step + 1)); + } + else{ + len = step; + } + } + return first; +} + +} //namespace movelib { +} //namespace boost { + +#if defined(BOOST_CLANG) || (defined(BOOST_GCC) && (BOOST_GCC >= 40600)) +#pragma GCC diagnostic pop +#endif + +#endif //#define BOOST_MOVE_DETAIL_SEARCH_HPP