@@ -29,52 +29,48 @@ class subrange : public detray::ranges::view_interface<subrange<range_t>> {
29
29
public:
30
30
using iterator_t = typename detray::ranges::iterator_t <range_t >;
31
31
using const_iterator_t = typename detray::ranges::const_iterator_t <range_t >;
32
- using range_size_t = typename detray::ranges::range_size_t <range_t >;
32
+ using difference_t = typename detray::ranges::range_difference_t <range_t >;
33
33
34
34
// / Default constructor
35
35
subrange () = default ;
36
36
37
37
// / Construct from an @param start and @param end iterator pair.
38
- DETRAY_HOST_DEVICE constexpr subrange (iterator_t &&start, iterator_t &&end)
39
- : m_begin{std::forward<iterator_t >(start)},
40
- m_end{std::forward<iterator_t >(end)} {}
38
+ template <typename deduced_itr_t ,
39
+ std::enable_if_t <std::is_same_v<deduced_itr_t , iterator_t >,
40
+ bool > = true >
41
+ DETRAY_HOST_DEVICE constexpr subrange (deduced_itr_t &&start,
42
+ deduced_itr_t &&end)
43
+ : m_begin{std::forward<deduced_itr_t >(start)},
44
+ m_end{std::forward<deduced_itr_t >(end)} {}
41
45
42
46
// / Construct from a @param range.
43
47
template <
44
48
typename deduced_range_t ,
45
49
std::enable_if_t <detray::ranges::range_v<deduced_range_t >, bool > = true >
46
50
DETRAY_HOST_DEVICE constexpr subrange (deduced_range_t &&range)
47
- : m_begin{detray::ranges::begin (std::forward< deduced_range_t >( range) )},
48
- m_end{detray::ranges::end (std::forward< deduced_range_t >( range) )} {}
51
+ : m_begin{detray::ranges::begin (range)},
52
+ m_end{detray::ranges::end (range)} {}
49
53
50
54
// / Construct from a @param range and starting position @param pos. Used
51
55
// / as an overload when only a single position is needed.
52
56
template <
53
57
typename deduced_range_t ,
54
58
std::enable_if_t <detray::ranges::range_v<deduced_range_t >, bool > = true >
55
59
DETRAY_HOST_DEVICE constexpr subrange (deduced_range_t &&range,
56
- range_size_t pos)
57
- : m_begin{detray::ranges::next (
58
- detray::ranges::begin (std::forward<deduced_range_t >(range)),
59
- pos)},
60
+ difference_t pos)
61
+ : m_begin{detray::ranges::next (detray::ranges::begin (range), pos)},
60
62
m_end{detray::ranges::next (m_begin)} {}
61
63
62
64
// / Construct from a @param range and an index range provided by a volume
63
65
// / @param vol.
64
66
template <
65
67
typename deduced_range_t , typename volume_t ,
68
+ typename value_t = detray::ranges::range_value_t <deduced_range_t >,
66
69
std::enable_if_t <detray::ranges::range_v<deduced_range_t >, bool > = true ,
67
70
typename = typename std::remove_reference_t <volume_t >::volume_def>
68
- DETRAY_HOST_DEVICE subrange (deduced_range_t &&range, const volume_t &vol) {
69
- const dindex_range r = vol.template range <
70
- typename detray::ranges::range_value_t <deduced_range_t >>();
71
-
72
- auto start =
73
- detray::ranges::begin (std::forward<deduced_range_t >(range));
74
-
75
- m_begin = start + detray::detail::get<0 >(r);
76
- m_end = start + detray::detail::get<1 >(r);
77
- }
71
+ DETRAY_HOST_DEVICE subrange (deduced_range_t &&range, const volume_t &vol)
72
+ : subrange(std::forward<deduced_range_t >(range),
73
+ vol.template range<value_t>()) {}
78
74
79
75
// / Construct from a @param range and an index range @param pos.
80
76
template <
@@ -84,12 +80,10 @@ class subrange : public detray::ranges::view_interface<subrange<range_t>> {
84
80
true >
85
81
DETRAY_HOST_DEVICE constexpr subrange (deduced_range_t &&range,
86
82
index_range_t &&pos)
87
- : m_begin{detray::ranges::next (
88
- detray::ranges::begin (std::forward<deduced_range_t >(range)),
89
- detray::detail::get<0 >(pos))},
90
- m_end{detray::ranges::next (
91
- detray::ranges::begin (std::forward<deduced_range_t >(range)),
92
- detray::detail::get<1 >(pos))} {}
83
+ : m_begin{detray::ranges::next (detray::ranges::begin (range),
84
+ detray::detail::get<0 >(pos))},
85
+ m_end{detray::ranges::next (detray::ranges::begin (range),
86
+ detray::detail::get<1 >(pos))} {}
93
87
94
88
// / Copy assignment operator
95
89
DETRAY_HOST_DEVICE
@@ -105,7 +99,7 @@ class subrange : public detray::ranges::view_interface<subrange<range_t>> {
105
99
106
100
// / @return start position of the range - const
107
101
DETRAY_HOST_DEVICE
108
- constexpr auto begin () const -> const_iterator_t { return m_begin; }
102
+ constexpr auto begin () const -> iterator_t { return m_begin; }
109
103
110
104
// / @return sentinel of the range.
111
105
DETRAY_HOST_DEVICE
@@ -133,7 +127,7 @@ template <
133
127
std::enable_if_t <detray::ranges::range_v<deduced_range_t >, bool > = true >
134
128
DETRAY_HOST_DEVICE subrange (
135
129
deduced_range_t &&range,
136
- typename detray::ranges::range_size_t <deduced_range_t > pos)
130
+ typename detray::ranges::range_difference_t <deduced_range_t > pos)
137
131
->subrange<deduced_range_t>;
138
132
139
133
template <
0 commit comments