Skip to content

Commit 9566194

Browse files
authored
Merge pull request #936 from niermann999/ref-iter-traits
ref: New iterator type alias
2 parents 163aa4b + f08d87f commit 9566194

File tree

13 files changed

+51
-72
lines changed

13 files changed

+51
-72
lines changed

core/include/detray/navigation/volume_graph.hpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,10 @@ class volume_graph {
109109
using volume_iter =
110110
detray::ranges::const_iterator_t<volume_container_t>;
111111

112-
using difference_type =
113-
typename std::iterator_traits<volume_iter>::difference_type;
112+
using difference_type = std::iter_difference_t<volume_iter>;
114113
using value_type = node;
115114
using pointer = typename std::iterator_traits<volume_iter>::pointer;
116-
using reference =
117-
typename std::iterator_traits<volume_iter>::reference;
115+
using reference = std::iter_reference_t<volume_iter>;
118116
using iterator_category =
119117
typename std::iterator_traits<volume_iter>::iterator_category;
120118

core/include/detray/utils/find_bound.hpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ DETRAY_HOST_DEVICE constexpr iterator_t upper_bound(iterator_t first,
2424
iterator_t last,
2525
const T& value) {
2626

27-
using difference_t =
28-
typename std::iterator_traits<iterator_t>::difference_type;
27+
using difference_t = std::iter_difference_t<iterator_t>;
2928

3029
difference_t len{detray::ranges::distance(first, last)};
3130

@@ -53,8 +52,7 @@ DETRAY_HOST_DEVICE constexpr iterator_t lower_bound(iterator_t first,
5352
iterator_t last,
5453
const T& value) {
5554

56-
using difference_t =
57-
typename std::iterator_traits<iterator_t>::difference_type;
55+
using difference_t = std::iter_difference_t<iterator_t>;
5856

5957
difference_t len{detray::ranges::distance(first, last)};
6058

core/include/detray/utils/grid/detail/axis_binning.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ struct irregular {
193193
using container_types = dcontainers;
194194
template <typename T>
195195
using vector_type = typename dcontainers::template vector_type<T>;
196-
using index_type = typename std::iterator_traits<
197-
typename vector_type<scalar_type>::iterator>::difference_type;
196+
using index_type =
197+
std::iter_difference_t<typename vector_type<scalar_type>::iterator>;
198198

199199
static constexpr binning type = binning::e_irregular;
200200

core/include/detray/utils/grid/detail/bin_storage.hpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,7 @@ class bin_storage<is_owning, detray::bins::dynamic_array<entry_t>, containers>
242242
/// initialized bin instance
243243
template <typename bin_itr_t>
244244
struct iterator_adapter {
245-
using difference_type =
246-
typename std::iterator_traits<bin_itr_t>::difference_type;
245+
using difference_type = std::iter_difference_t<bin_itr_t>;
247246
using value_type = bin_t;
248247
using pointer = bin_t*;
249248
using reference = bin_t;

core/include/detray/utils/grid/detail/bin_view.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ struct bin_view : public detray::ranges::view_interface<bin_view<grid_t>> {
4444

4545
using iterator_t =
4646
bin_iterator<grid_t, detray::ranges::iterator_t<bin_indexer_t>>;
47-
using value_t = typename std::iterator_traits<iterator_t>::value_type;
47+
using value_t = std::iter_value_t<iterator_t>;
4848

4949
/// Default constructor
5050
constexpr bin_view() = default;

core/include/detray/utils/ranges/cartesian_product.hpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ struct cartesian_product_view : public detray::ranges::view_interface<
3838
detray::tuple<detray::ranges::iterator_t<range_ts>...>;
3939
using iterator_t = detray::ranges::detail::cartesian_product_iterator<
4040
detray::ranges::iterator_t<range_ts>...>;
41-
using value_type = detray::tuple<typename std::iterator_traits<
42-
detray::ranges::iterator_t<range_ts>>::reference...>;
41+
using value_type = detray::tuple<
42+
std::iter_reference_t<detray::ranges::iterator_t<range_ts>>...>;
4343

4444
/// Default constructor
4545
constexpr cartesian_product_view() = default;
@@ -120,8 +120,7 @@ template <std::input_iterator... iterator_ts>
120120
struct cartesian_product_iterator {
121121

122122
using difference_type = std::ptrdiff_t;
123-
using value_type =
124-
std::tuple<typename std::iterator_traits<iterator_ts>::reference...>;
123+
using value_type = std::tuple<std::iter_reference_t<iterator_ts>...>;
125124
using pointer = value_type *;
126125
using reference = value_type;
127126
// TODO: Adapt to the weakest iterator category in pack
@@ -220,8 +219,7 @@ struct cartesian_product_iterator {
220219
template <std::size_t... I>
221220
DETRAY_HOST_DEVICE constexpr auto unroll_values(
222221
std::index_sequence<I...>) const {
223-
return std::tuple<
224-
typename std::iterator_traits<iterator_ts>::reference...>(
222+
return std::tuple<std::iter_reference_t<iterator_ts>...>(
225223
*detray::get<I>(m_itrs)...);
226224
}
227225

core/include/detray/utils/ranges/detail/iterator_functions.hpp

+10-16
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,9 @@ using std::empty;
8585
/// @{
8686
// used by every iterator up to and including bidirectional iterators
8787
template <std::input_iterator iterator_t>
88-
DETRAY_HOST_DEVICE constexpr
89-
typename std::iterator_traits<iterator_t>::difference_type
90-
distance_impl(iterator_t first, iterator_t last,
91-
detray::ranges::input_iterator_tag) {
92-
typename std::iterator_traits<iterator_t>::difference_type d{0};
88+
DETRAY_HOST_DEVICE constexpr std::iter_difference_t<iterator_t> distance_impl(
89+
iterator_t first, iterator_t last, detray::ranges::input_iterator_tag) {
90+
std::iter_difference_t<iterator_t> d{0};
9391
// simply count
9492
while (first != last) {
9593
++first;
@@ -100,18 +98,16 @@ DETRAY_HOST_DEVICE constexpr
10098

10199
// random access iterators specialization
102100
template <std::random_access_iterator iterator_t>
103-
DETRAY_HOST_DEVICE constexpr
104-
typename std::iterator_traits<iterator_t>::difference_type
105-
distance_impl(iterator_t first, iterator_t last,
106-
detray::ranges::random_access_iterator_tag) {
101+
DETRAY_HOST_DEVICE constexpr std::iter_difference_t<iterator_t> distance_impl(
102+
iterator_t first, iterator_t last,
103+
detray::ranges::random_access_iterator_tag) {
107104
// use operator-
108105
return last - first;
109106
}
110107

111108
template <std::input_iterator iterator_t>
112-
DETRAY_HOST_DEVICE constexpr
113-
typename std::iterator_traits<iterator_t>::difference_type
114-
distance(iterator_t first, iterator_t last) {
109+
DETRAY_HOST_DEVICE constexpr std::iter_difference_t<iterator_t> distance(
110+
iterator_t first, iterator_t last) {
115111
return distance_impl(
116112
first, last,
117113
typename std::iterator_traits<iterator_t>::iterator_category{});
@@ -166,16 +162,14 @@ DETRAY_HOST_DEVICE constexpr void advance(iterator_t& itr, dist_t d) {
166162
/// @{
167163
template <std::input_iterator iterator_t>
168164
DETRAY_HOST_DEVICE constexpr iterator_t next(
169-
iterator_t itr,
170-
typename std::iterator_traits<iterator_t>::difference_type d = 1) {
165+
iterator_t itr, std::iter_difference_t<iterator_t> d = 1) {
171166
detray::ranges::detail::advance(itr, d);
172167
return itr;
173168
}
174169

175170
template <std::bidirectional_iterator iterator_t>
176171
DETRAY_HOST_DEVICE constexpr iterator_t prev(
177-
iterator_t itr,
178-
typename std::iterator_traits<iterator_t>::difference_type d = 1) {
172+
iterator_t itr, std::iter_difference_t<iterator_t> d = 1) {
179173
detray::ranges::detail::advance(itr, -d);
180174
return itr;
181175
}

core/include/detray/utils/ranges/enumerate.hpp

+6-8
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,11 @@ class enumerate_view : public detray::ranges::view_interface<
4141
/// returned using structured binding.
4242
struct iterator {
4343

44-
using itr_value_t =
45-
typename std::iterator_traits<range_itr_t>::value_type;
46-
using itr_ref_t = typename std::iterator_traits<range_itr_t>::reference;
44+
using itr_value_t = std::iter_value_t<range_itr_t>;
45+
using itr_ref_t = std::iter_reference_t<range_itr_t>;
4746
using itr_ptr_t = typename std::iterator_traits<range_itr_t>::pointer;
4847

49-
using difference_type =
50-
typename std::iterator_traits<range_itr_t>::difference_type;
48+
using difference_type = std::iter_difference_t<range_itr_t>;
5149
using value_type = std::pair<incr_t, itr_ref_t>;
5250
using pointer = value_type *;
5351
using reference = value_type;
@@ -233,9 +231,9 @@ class enumerate_view : public detray::ranges::view_interface<
233231
namespace views {
234232

235233
template <std::input_iterator range_itr_t, std::incrementable incr_t = dindex>
236-
requires std::convertible_to<
237-
typename std::iterator_traits<range_itr_t>::difference_type,
238-
incr_t> struct enumerate : public enumerate_view<range_itr_t, incr_t> {
234+
requires std::convertible_to<std::iter_difference_t<range_itr_t>,
235+
incr_t> struct enumerate
236+
: public enumerate_view<range_itr_t, incr_t> {
239237

240238
using base_type = enumerate_view<range_itr_t, incr_t>;
241239

core/include/detray/utils/ranges/join.hpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ struct join_view : public detray::ranges::view_interface<join_view<range_t>> {
5050
using inner_iterator_t = detray::ranges::iterator_t<outer_value_t>;
5151

5252
using iterator_t = detray::ranges::detail::join_iterator<range_t>;
53-
using value_t = typename std::iterator_traits<iterator_t>::value_type;
53+
using value_t = std::iter_value_t<iterator_t>;
5454

5555
/// Default constructor
5656
constexpr join_view() = default;
@@ -149,11 +149,10 @@ struct join_iterator {
149149
detray::ranges::iterator_t<outer_value_t>>;
150150

151151
using iterator_t = inner_iterator_t;
152-
using difference_type =
153-
typename std::iterator_traits<iterator_t>::difference_type;
154-
using value_type = typename std::iterator_traits<iterator_t>::value_type;
152+
using difference_type = std::iter_difference_t<iterator_t>;
153+
using value_type = std::iter_value_t<iterator_t>;
155154
using pointer = typename std::iterator_traits<iterator_t>::pointer;
156-
using reference = typename std::iterator_traits<iterator_t>::reference;
155+
using reference = std::iter_reference_t<iterator_t>;
157156
using iterator_category =
158157
typename std::iterator_traits<iterator_t>::iterator_category;
159158

@@ -210,7 +209,7 @@ struct join_iterator {
210209
requires std::bidirectional_iterator<inner_iterator_t>
211210
&&std::bidirectional_iterator<outer_iterator_t> {
212211
auto tmp(*this);
213-
++(*this);
212+
--(*this);
214213
return tmp;
215214
}
216215
/// @}

core/include/detray/utils/ranges/pick.hpp

+7-11
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,9 @@ class pick_view : public detray::ranges::view_interface<
3535
pick_view<range_itr_t, sequence_itr_t>> {
3636

3737
private:
38-
using index_t = typename std::iterator_traits<sequence_itr_t>::value_type;
39-
using value_t = typename std::iterator_traits<range_itr_t>::value_type;
40-
using difference_t =
41-
typename std::iterator_traits<range_itr_t>::difference_type;
38+
using index_t = std::iter_value_t<sequence_itr_t>;
39+
using value_t = std::iter_value_t<range_itr_t>;
40+
using difference_t = std::iter_difference_t<range_itr_t>;
4241

4342
/// @brief Nested iterator to randomly index the elements of a range.
4443
///
@@ -49,16 +48,13 @@ class pick_view : public detray::ranges::view_interface<
4948
/// needed.
5049
struct iterator {
5150

52-
using itr_value_t =
53-
typename std::iterator_traits<range_itr_t>::value_type;
54-
using itr_ref_t = typename std::iterator_traits<range_itr_t>::reference;
51+
using itr_value_t = std::iter_value_t<range_itr_t>;
52+
using itr_ref_t = std::iter_reference_t<range_itr_t>;
5553
using itr_ptr_t = typename std::iterator_traits<range_itr_t>::pointer;
5654

57-
using difference_type =
58-
typename std::iterator_traits<range_itr_t>::difference_type;
55+
using difference_type = std::iter_difference_t<range_itr_t>;
5956
using value_type =
60-
std::pair<typename std::iterator_traits<sequence_itr_t>::value_type,
61-
itr_ref_t>;
57+
std::pair<std::iter_value_t<sequence_itr_t>, itr_ref_t>;
6258
using pointer = value_type *;
6359
using reference = value_type;
6460
using iterator_category =

core/include/detray/utils/ranges/ranges.hpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,16 @@ template <class R>
7373
using range_size_t = decltype(detray::ranges::size(std::declval<R&>()));
7474

7575
template <class R>
76-
using range_difference_t = typename std::iterator_traits<
77-
detray::ranges::iterator_t<std::remove_cvref_t<R>>>::difference_type;
76+
using range_difference_t =
77+
std::iter_difference_t<detray::ranges::iterator_t<std::remove_cvref_t<R>>>;
7878

7979
template <class R>
80-
using range_value_t = typename std::iterator_traits<
81-
detray::ranges::iterator_t<std::remove_cvref_t<R>>>::value_type;
80+
using range_value_t =
81+
std::iter_value_t<detray::ranges::iterator_t<std::remove_cvref_t<R>>>;
8282

8383
template <class R>
84-
using range_reference_t = typename std::iterator_traits<
85-
detray::ranges::iterator_t<std::remove_cvref_t<R>>>::reference;
84+
using range_reference_t =
85+
std::iter_reference_t<detray::ranges::iterator_t<std::remove_cvref_t<R>>>;
8686

8787
template <class R>
8888
using range_const_reference_t = const range_reference_t<R>;

core/include/detray/utils/ranges/static_join.hpp

+4-5
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ struct static_join_view
4747
using iterator_coll_t = darray<range_itr_t, I>;
4848
using iterator_t =
4949
detray::ranges::detail::static_join_iterator<iterator_coll_t>;
50-
using value_t = typename std::iterator_traits<iterator_t>::value_type;
50+
using value_t = std::iter_value_t<iterator_t>;
5151

5252
/// Default constructor
5353
constexpr static_join_view() = default;
@@ -163,11 +163,10 @@ requires std::input_iterator<
163163

164164
using iterator_t = detray::detail::get_value_t<iterator_coll_t>;
165165

166-
using difference_type =
167-
typename std::iterator_traits<iterator_t>::difference_type;
168-
using value_type = typename std::iterator_traits<iterator_t>::value_type;
166+
using difference_type = std::iter_difference_t<iterator_t>;
167+
using value_type = std::iter_value_t<iterator_t>;
169168
using pointer = typename std::iterator_traits<iterator_t>::pointer;
170-
using reference = typename std::iterator_traits<iterator_t>::reference;
169+
using reference = std::iter_reference_t<iterator_t>;
171170
using iterator_category =
172171
typename std::iterator_traits<iterator_t>::iterator_category;
173172

tests/include/detray/test/validation/detector_scan_utils.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ inline bool check_connectivity(
9191
// function it should be sorted, which is the stronger constraint
9292
using vector_t = decltype(trace);
9393
using records_iterator_t = typename vector_t::iterator;
94-
using index_t = typename vector_t::difference_type;
94+
using index_t = std::iter_difference_t<records_iterator_t>;
9595
std::function<records_iterator_t(index_t)> get_connected_record;
9696
if constexpr (check_sorted_trace) {
9797
// Get the next record

0 commit comments

Comments
 (0)