diff options
Diffstat (limited to 'boost/compute/algorithm/partition_copy.hpp')
-rw-r--r-- | boost/compute/algorithm/partition_copy.hpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/boost/compute/algorithm/partition_copy.hpp b/boost/compute/algorithm/partition_copy.hpp new file mode 100644 index 0000000000..80a2c6475f --- /dev/null +++ b/boost/compute/algorithm/partition_copy.hpp @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------------// +// 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_PARTITION_COPY_HPP +#define BOOST_COMPUTE_ALGORITHM_PARTITION_COPY_HPP + +#include <boost/compute/system.hpp> +#include <boost/compute/functional.hpp> +#include <boost/compute/command_queue.hpp> +#include <boost/compute/algorithm/copy_if.hpp> + +namespace boost { +namespace compute { + +/// Copies all of the elements in the range [\p first, \p last) for which +/// \p predicate returns \c true to the range beginning at \p first_true +/// and all of the elements for which \p predicate returns \c false to +/// the range beginning at \p first_false. +/// +/// \see partition() +template<class InputIterator, + class OutputIterator1, + class OutputIterator2, + class UnaryPredicate> +inline std::pair<OutputIterator1, OutputIterator2> +partition_copy(InputIterator first, + InputIterator last, + OutputIterator1 first_true, + OutputIterator2 first_false, + UnaryPredicate predicate, + command_queue &queue = system::default_queue()) +{ + // copy true values + OutputIterator1 last_true = + ::boost::compute::copy_if(first, + last, + first_true, + predicate, + queue); + + // copy false values + OutputIterator2 last_false = + ::boost::compute::copy_if(first, + last, + first_false, + not1(predicate), + queue); + + // return iterators to the end of the true and the false ranges + return std::make_pair(last_true, last_false); +} + +} // end compute namespace +} // end boost namespace + +#endif // BOOST_COMPUTE_ALGORITHM_PARTITION_COPY_HPP |