Add std::iterator_traits specialization for thrust::pointer
MODIFY
test/test_transform.cpp
test/test_transform.cpp
@@ -112,7 +112,6 @@ TYPED_TEST(TransformTests, UnaryTransform)
for(size_t i = 0; i < size; i++)
{
input[i] = i;
- //input_ptr[i] = i;
}
hipMemcpy(
@@ -120,7 +119,6 @@ TYPED_TEST(TransformTests, UnaryTransform)
input.size() * sizeof(T),
hipMemcpyHostToDevice
);
- //thrust::copy(input, input + size, input_ptr);
// Calculate expected results on host
std::vector<U> expected(input.size());
@@ -133,7 +131,6 @@ TYPED_TEST(TransformTests, UnaryTransform)
size * sizeof(U),
hipMemcpyDeviceToHost
);
- //thrust::copy(output_ptr, output_ptr + size, output);
for(size_t i = 0; i < size; i++)
{

MODIFY
thrust/system/hip/detail/transform.h
thrust/system/hip/detail/transform.h
#if THRUST_DEVICE_COMPILER == THRUST_DEVICE_COMPILER_HCC
#include <thrust/system/hip/config.h>
+#include <thrust/system/hip/pointer.h>
#include <thrust/system/hip/detail/util.h>
#include <thrust/detail/type_traits/iterator/is_output_iterator.h>

ADD
thrust/system/hip/pointer.h
+/******************************************************************************
+ * Copyright (c) 2016, NVIDIA CORPORATION. All rights meserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the NVIDIA CORPORATION nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************/
+#pragma once
+
+template<typename Element, typename Tag, typename Reference, typename Derived>
+struct std::iterator_traits<thrust::pointer<Element,Tag,Reference,Derived> >
+ {
+private:
+ typedef thrust::pointer<Element,Tag,Reference,Derived> ptr;
+
+public:
+ typedef typename ptr::iterator_category iterator_category;
+ typedef typename ptr::value_type value_type;
+ typedef typename ptr::difference_type difference_type;
+ typedef ptr pointer;
+ typedef typename ptr::reference reference;
+};

Add std::iterator_traits specialization for thrust::pointer