diff options
Diffstat (limited to 'boost/compute/algorithm/remove.hpp')
-rw-r--r-- | boost/compute/algorithm/remove.hpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/boost/compute/algorithm/remove.hpp b/boost/compute/algorithm/remove.hpp new file mode 100644 index 0000000000..98feb1f9d8 --- /dev/null +++ b/boost/compute/algorithm/remove.hpp @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------------// +// 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_REMOVE_HPP +#define BOOST_COMPUTE_ALGORITHM_REMOVE_HPP + +#include <boost/compute/lambda.hpp> +#include <boost/compute/system.hpp> +#include <boost/compute/algorithm/remove_if.hpp> +#include <boost/compute/type_traits/vector_size.hpp> + +namespace boost { +namespace compute { + +/// Removes each element equal to \p value in the range [\p first, +/// \p last). +/// +/// \see remove_if() +template<class Iterator, class T> +inline Iterator remove(Iterator first, + Iterator last, + const T &value, + command_queue &queue = system::default_queue()) +{ + typedef typename std::iterator_traits<Iterator>::value_type value_type; + + using ::boost::compute::_1; + using ::boost::compute::lambda::all; + + if(vector_size<value_type>::value == 1){ + return ::boost::compute::remove_if(first, + last, + _1 == value, + queue); + } + else { + return ::boost::compute::remove_if(first, + last, + all(_1 == value), + queue); + } +} + +} // end compute namespace +} // end boost namespace + +#endif // BOOST_COMPUTE_ALGORITHM_REMOVE_HPP |