Skip to content

Commit fac3657

Browse files
committed
use thrust iterator categories in iterator wrapper
1 parent e37433c commit fac3657

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

testing/unittest/iterator_helpers.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,30 @@
11
#pragma once
22

33
#include <thrust/iterator/iterator_traits.h>
4+
#include <thrust/iterator/iterator_categories.h>
5+
#include <type_traits>
46

57

68
// Wraps an existing iterator into a forward iterator,
79
// thus removing some of its functionality
810
template <typename Iterator>
911
struct forward_iterator_wrapper {
1012
// LegacyIterator requirements
13+
using iterator_system_tag = typename thrust::iterator_system<Iterator>::type;
1114
using reference = typename thrust::iterator_traits<Iterator>::reference;
1215
using pointer = typename thrust::iterator_traits<Iterator>::pointer;
1316
using value_type = typename thrust::iterator_traits<Iterator>::value_type;
1417
using difference_type = typename thrust::iterator_traits<Iterator>::difference_type;
15-
using iterator_category = std::forward_iterator_tag;
18+
using iterator_category = typename std::conditional<
19+
std::is_convertible<iterator_system_tag, thrust::device_system_tag>::value,
20+
thrust::forward_device_iterator_tag,
21+
typename std::conditional<
22+
std::is_convertible<iterator_system_tag, thrust::host_system_tag>::value,
23+
thrust::forward_host_iterator_tag,
24+
std::forward_iterator_tag>::type>::type;
1625
using base_iterator_category = typename thrust::iterator_traits<Iterator>::iterator_category;
1726
static_assert(
18-
std::is_convertible<base_iterator_category, std::forward_iterator_tag>::value,
27+
std::is_convertible<base_iterator_category, std::forward_iterator_tag>::value,
1928
"Cannot create forward_iterator_wrapper around an iterator that is not itself at least a forward iterator");
2029

2130
__host__ __device__ reference operator*() const {

0 commit comments

Comments
 (0)