diff options
Diffstat (limited to 'boost/compute/algorithm/minmax_element.hpp')
-rw-r--r-- | boost/compute/algorithm/minmax_element.hpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/boost/compute/algorithm/minmax_element.hpp b/boost/compute/algorithm/minmax_element.hpp new file mode 100644 index 0000000000..bf32c3c989 --- /dev/null +++ b/boost/compute/algorithm/minmax_element.hpp @@ -0,0 +1,70 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com> +// +// 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://boostorg.github.com/compute for more information. +//---------------------------------------------------------------------------// + +#ifndef BOOST_COMPUTE_ALGORITHM_MINMAX_ELEMENT_HPP +#define BOOST_COMPUTE_ALGORITHM_MINMAX_ELEMENT_HPP + +#include <utility> + +#include <boost/compute/system.hpp> +#include <boost/compute/command_queue.hpp> +#include <boost/compute/algorithm/max_element.hpp> +#include <boost/compute/algorithm/min_element.hpp> + +namespace boost { +namespace compute { + +/// Returns a pair of iterators with the first pointing to the minimum +/// element and the second pointing to the maximum element in the range +/// [\p first, \p last). +/// +/// \param first first element in the input range +/// \param last last element in the input range +/// \param compare comparison function object which returns true if the first +/// argument is less than (i.e. is ordered before) the second. +/// \param queue command queue to perform the operation +/// +/// \see max_element(), min_element() +template<class InputIterator, class Compare> +inline std::pair<InputIterator, InputIterator> +minmax_element(InputIterator first, + InputIterator last, + Compare compare, + command_queue &queue = system::default_queue()) +{ + if(first == last){ + // empty range + return std::make_pair(first, first); + } + + return std::make_pair(min_element(first, last, compare, queue), + max_element(first, last, compare, queue)); +} + +///\overload +template<class InputIterator, class Compare> +inline std::pair<InputIterator, InputIterator> +minmax_element(InputIterator first, + InputIterator last, + command_queue &queue = system::default_queue()) +{ + if(first == last){ + // empty range + return std::make_pair(first, first); + } + + return std::make_pair(min_element(first, last, queue), + max_element(first, last, queue)); +} + +} // end compute namespace +} // end boost namespace + +#endif // BOOST_COMPUTE_ALGORITHM_MINMAX_ELEMENT_HPP |