From a6bdf21b314bb13bef2f87d24f573cd8c14f673d Mon Sep 17 00:00:00 2001 From: Kyle Lutz Date: Wed, 26 Nov 2014 08:42:48 -0800 Subject: [PATCH] Fix issue with copy() and std::vector --- .../compute/algorithm/detail/copy_to_host.hpp | 13 +++++++++++++ test/test_copy.cpp | 14 ++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/boost/compute/algorithm/detail/copy_to_host.hpp b/include/boost/compute/algorithm/detail/copy_to_host.hpp index f31cde2e..33700668 100644 --- a/include/boost/compute/algorithm/detail/copy_to_host.hpp +++ b/include/boost/compute/algorithm/detail/copy_to_host.hpp @@ -51,6 +51,19 @@ inline HostIterator copy_to_host(DeviceIterator first, return iterator_plus_distance(result, count); } +// copy_to_host() specialization for std::vector +template +inline std::vector::iterator +copy_to_host(DeviceIterator first, + DeviceIterator last, + std::vector::iterator result, + command_queue &queue) +{ + std::vector temp(std::distance(first, last)); + copy_to_host(first, last, temp.begin(), queue); + return std::copy(temp.begin(), temp.end(), result); +} + template inline future copy_to_host_async(DeviceIterator first, DeviceIterator last, diff --git a/test/test_copy.cpp b/test/test_copy.cpp index fdc949d4..4c621eef 100644 --- a/test/test_copy.cpp +++ b/test/test_copy.cpp @@ -292,4 +292,18 @@ BOOST_AUTO_TEST_CASE(copy_svm_ptr) } #endif // CL_VERSION_2_0 +BOOST_AUTO_TEST_CASE(copy_to_vector_bool) +{ + using compute::uchar_; + + compute::vector vec; + vec.push_back(true, queue); + vec.push_back(false, queue); + + std::vector host_vec(vec.size()); + compute::copy(vec.begin(), vec.end(), host_vec.begin(), queue); + BOOST_CHECK(host_vec[0] == true); + BOOST_CHECK(host_vec[1] == false); +} + BOOST_AUTO_TEST_SUITE_END()