diff options
Diffstat (limited to 'boost/compute/algorithm/replace_copy.hpp')
-rw-r--r-- | boost/compute/algorithm/replace_copy.hpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/boost/compute/algorithm/replace_copy.hpp b/boost/compute/algorithm/replace_copy.hpp new file mode 100644 index 0000000000..7224bd3ae6 --- /dev/null +++ b/boost/compute/algorithm/replace_copy.hpp @@ -0,0 +1,62 @@ +//---------------------------------------------------------------------------// +// 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_REPLACE_COPY_HPP +#define BOOST_COMPUTE_ALGORITHM_REPLACE_COPY_HPP + +#include <iterator> + +#include <boost/compute/system.hpp> +#include <boost/compute/command_queue.hpp> +#include <boost/compute/algorithm/copy.hpp> +#include <boost/compute/algorithm/replace.hpp> + +namespace boost { +namespace compute { + +/// Copies the value in the range [\p first, \p last) to the range +/// beginning at \p result while replacing each instance of \p old_value +/// with \p new_value. +/// +/// \see replace() +template<class InputIterator, class OutputIterator, class T> +inline OutputIterator +replace_copy(InputIterator first, + InputIterator last, + OutputIterator result, + const T &old_value, + const T &new_value, + command_queue &queue = system::default_queue()) +{ + typedef typename std::iterator_traits<OutputIterator>::difference_type difference_type; + + difference_type count = std::distance(first, last); + if(count == 0){ + return result; + } + + // copy data to result + ::boost::compute::copy(first, last, result, queue); + + // replace in result + ::boost::compute::replace(result, + result + count, + old_value, + new_value, + queue); + + // return iterator to the end of result + return result + count; +} + +} // end compute namespace +} // end boost namespace + +#endif // BOOST_COMPUTE_ALGORITHM_REPLACE_COPY_HPP |