From c69ea170fbbe18dfe6cc2f0472022104cb02b269 Mon Sep 17 00:00:00 2001 From: Kyle Lutz Date: Wed, 20 Aug 2014 22:57:10 -0700 Subject: [PATCH] Remove adjacent_transform_iterator class --- .../detail/adjacent_transform_iterator.hpp | 229 ------------------ test/CMakeLists.txt | 1 - test/test_adjacent_transform_iterator.cpp | 55 ----- 3 files changed, 285 deletions(-) delete mode 100644 include/boost/compute/iterator/detail/adjacent_transform_iterator.hpp delete mode 100644 test/test_adjacent_transform_iterator.cpp diff --git a/include/boost/compute/iterator/detail/adjacent_transform_iterator.hpp b/include/boost/compute/iterator/detail/adjacent_transform_iterator.hpp deleted file mode 100644 index 0876710b..00000000 --- a/include/boost/compute/iterator/detail/adjacent_transform_iterator.hpp +++ /dev/null @@ -1,229 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2013 Kyle Lutz -// -// 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://kylelutz.github.com/compute for more information. -//---------------------------------------------------------------------------// - -#ifndef BOOST_COMPUTE_ITERATOR_DETAIL_ADJACENT_TRANSFORM_ITERATOR_HPP -#define BOOST_COMPUTE_ITERATOR_DETAIL_ADJACENT_TRANSFORM_ITERATOR_HPP - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - -namespace boost { -namespace compute { -namespace detail { - -// forward declaration for transform_iterator -template -class adjacent_transform_iterator; - -// meta-function returning the value_type for an adjacent_transform_iterator -template -struct make_adjacent_transform_iterator_value_type -{ - typedef typename std::iterator_traits::value_type value_type; - - typedef typename - boost::tr1_result_of::type - type; -}; - -// helper class which defines the iterator_adaptor super-class -// type for adjacent_transform_iterator -template -class adjacent_transform_iterator_base -{ -public: - typedef ::boost::iterator_adaptor< - adjacent_transform_iterator, - InputIterator, - typename make_adjacent_transform_iterator_value_type::type, - typename std::iterator_traits::iterator_category, - typename make_adjacent_transform_iterator_value_type::type - > type; -}; - -template -struct index_minus_one -{ - index_minus_one(const IndexExpr &expr) - : m_expr(expr) - { - } - - IndexExpr m_expr; -}; - -template -inline meta_kernel& operator<<(meta_kernel &kernel, - const index_minus_one &expr) -{ - return kernel << expr.m_expr << "-1"; -} - -template -struct adjacent_transform_iterator_index_expr -{ - typedef typename - make_adjacent_transform_iterator_value_type< - InputIterator, - BinaryFunction - >::type result_type; - - adjacent_transform_iterator_index_expr(const InputIterator &input_iter, - const BinaryFunction &transform_expr, - const IndexExpr &index_expr) - : m_input_iter(input_iter), - m_transform_expr(transform_expr), - m_index_expr(index_expr) - { - } - - InputIterator m_input_iter; - BinaryFunction m_transform_expr; - IndexExpr m_index_expr; -}; - -template -inline meta_kernel& operator<<(meta_kernel &kernel, - const adjacent_transform_iterator_index_expr &expr) -{ - typedef typename std::iterator_traits::value_type input_type; - - IndexExpr index_expr = expr.m_index_expr; - index_minus_one index_expr_minus_one(index_expr); - - kernel << "(" << index_expr << " == 0 ? " - << expr.m_transform_expr(expr.m_input_iter[index_expr], - kernel.expr("0")) - << " : " - << expr.m_transform_expr(expr.m_input_iter[index_expr], - expr.m_input_iter[index_expr_minus_one]) - << ")"; - - return kernel; -} - -template -class adjacent_transform_iterator : - public adjacent_transform_iterator_base::type -{ -public: - typedef typename - adjacent_transform_iterator_base::type - super_type; - typedef typename super_type::value_type value_type; - typedef typename super_type::reference reference; - typedef typename super_type::base_type base_type; - typedef typename super_type::difference_type difference_type; - typedef BinaryFunction binary_function; - - adjacent_transform_iterator(InputIterator iterator, BinaryFunction transform) - : super_type(iterator), - m_transform(transform) - { - } - - adjacent_transform_iterator(const adjacent_transform_iterator &other) - : super_type(other.base()), - m_transform(other.m_transform) - { - } - - adjacent_transform_iterator& - operator=(const adjacent_transform_iterator &other) - { - if(this != &other){ - super_type::operator=(other); - - m_transform = other.m_transform; - } - - return *this; - } - - ~adjacent_transform_iterator() - { - } - - size_t get_index() const - { - return super_type::base().get_index(); - } - - const buffer& get_buffer() const - { - return get_base_iterator_buffer(*this); - } - - template - adjacent_transform_iterator_index_expr< - InputIterator, - BinaryFunction, - IndexExpression - > - operator[](const IndexExpression &expr) const - { - return adjacent_transform_iterator_index_expr< - InputIterator, - BinaryFunction, - IndexExpression - >(super_type::base(), m_transform, expr); - } - -private: - friend class ::boost::iterator_core_access; - - reference dereference() const - { - return reference(); - } - -private: - BinaryFunction m_transform; -}; - -template -inline adjacent_transform_iterator -make_adjacent_transform_iterator(InputIterator iterator, BinaryFunction transform) -{ - return adjacent_transform_iterator(iterator, transform); -} - -// is_device_iterator specialization for adjacent_transform_iterator -template -struct is_device_iterator< - Iterator, - typename boost::enable_if< - boost::is_same< - adjacent_transform_iterator, - typename boost::remove_const::type - > - >::type -> : public boost::true_type {}; - -} // end detail namespace -} // end compute namespace -} // end boost namespace - -#endif // BOOST_COMPUTE_ITERATOR_DETAIL_ADJACENT_TRANSFORM_ITERATOR_HPP diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 986d3622..9ea75388 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -130,7 +130,6 @@ add_compute_test("functional.get" test_functional_get.cpp) add_compute_test("functional.hash" test_functional_hash.cpp) add_compute_test("functional.unpack" test_functional_unpack.cpp) -add_compute_test("iterator.adjacent_transform_iterator" test_adjacent_transform_iterator.cpp) add_compute_test("iterator.buffer_iterator" test_buffer_iterator.cpp) add_compute_test("iterator.constant_iterator" test_constant_iterator.cpp) add_compute_test("iterator.counting_iterator" test_counting_iterator.cpp) diff --git a/test/test_adjacent_transform_iterator.cpp b/test/test_adjacent_transform_iterator.cpp deleted file mode 100644 index fd1e9550..00000000 --- a/test/test_adjacent_transform_iterator.cpp +++ /dev/null @@ -1,55 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2013 Kyle Lutz -// -// 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://kylelutz.github.com/compute for more information. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE TestAdjacentTransformIterator -#include - -#include -#include -#include -#include -#include - -#include "check_macros.hpp" -#include "context_setup.hpp" - -BOOST_AUTO_TEST_CASE(copy) -{ - int data[] = { 1, 2, 4, 7, 11, 16 }; - boost::compute::vector input(data, data + 6); - - boost::compute::vector output(6); - - boost::compute::minus minus_op; - - boost::compute::copy( - boost::compute::detail::make_adjacent_transform_iterator(input.begin(), minus_op), - boost::compute::detail::make_adjacent_transform_iterator(input.end(), minus_op), - output.begin() - ); - CHECK_RANGE_EQUAL(int, 6, output, (1, 1, 2, 3, 4, 5)); -} - -BOOST_AUTO_TEST_CASE(find_largest_gap) -{ - float data[] = { 2.0f, 4.0f, 8.0f, 10.0f, 12.0f }; - boost::compute::vector vector(data, data + 5); - - boost::compute::minus minus_op; - - boost::compute::vector::iterator iter = - boost::compute::max_element( - boost::compute::detail::make_adjacent_transform_iterator(vector.begin(), minus_op), - boost::compute::detail::make_adjacent_transform_iterator(vector.end(), minus_op) - ).base() - 1; - BOOST_VERIFY(iter == vector.begin() + 1); -} - -BOOST_AUTO_TEST_SUITE_END()