Skip to content

Commit 163aa4b

Browse files
authored
Merge pull request #935 from niermann999/fix-cartesian-product-type
fix: Use explicit types in cartesian product dereferencing
2 parents 59b52c3 + e884177 commit 163aa4b

File tree

6 files changed

+12
-9
lines changed

6 files changed

+12
-9
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ class bin_storage<is_owning, detray::bins::dynamic_array<entry_t>, containers>
246246
typename std::iterator_traits<bin_itr_t>::difference_type;
247247
using value_type = bin_t;
248248
using pointer = bin_t*;
249-
using reference = bin_t&;
249+
using reference = bin_t;
250250
using iterator_category =
251251
typename std::iterator_traits<bin_itr_t>::iterator_category;
252252

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ struct bin_iterator {
106106
using difference_type = std::ptrdiff_t;
107107
using value_type = typename grid_t::bin_type;
108108
using pointer = value_type *;
109-
using reference = const value_type &;
109+
using reference = value_type;
110110
using iterator_category = detray::ranges::bidirectional_iterator_tag;
111111

112112
/// Default constructor required by LegacyIterator trait

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

+7-4
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ struct cartesian_product_view : public detray::ranges::view_interface<
3939
using iterator_t = detray::ranges::detail::cartesian_product_iterator<
4040
detray::ranges::iterator_t<range_ts>...>;
4141
using value_type = detray::tuple<typename std::iterator_traits<
42-
detray::ranges::iterator_t<range_ts>>::value_type &...>;
42+
detray::ranges::iterator_t<range_ts>>::reference...>;
4343

4444
/// Default constructor
4545
constexpr cartesian_product_view() = default;
@@ -121,9 +121,10 @@ struct cartesian_product_iterator {
121121

122122
using difference_type = std::ptrdiff_t;
123123
using value_type =
124-
std::tuple<typename std::iterator_traits<iterator_ts>::value_type...>;
124+
std::tuple<typename std::iterator_traits<iterator_ts>::reference...>;
125125
using pointer = value_type *;
126-
using reference = value_type &;
126+
using reference = value_type;
127+
// TODO: Adapt to the weakest iterator category in pack
127128
using iterator_category = detray::ranges::bidirectional_iterator_tag;
128129

129130
/// Default constructor required by LegacyIterator trait
@@ -219,7 +220,9 @@ struct cartesian_product_iterator {
219220
template <std::size_t... I>
220221
DETRAY_HOST_DEVICE constexpr auto unroll_values(
221222
std::index_sequence<I...>) const {
222-
return std::tuple(*detray::get<I>(m_itrs)...);
223+
return std::tuple<
224+
typename std::iterator_traits<iterator_ts>::reference...>(
225+
*detray::get<I>(m_itrs)...);
223226
}
224227

225228
/// Global range collection of begin and end iterators

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class enumerate_view : public detray::ranges::view_interface<
5050
typename std::iterator_traits<range_itr_t>::difference_type;
5151
using value_type = std::pair<incr_t, itr_ref_t>;
5252
using pointer = value_type *;
53-
using reference = const value_type &;
53+
using reference = value_type;
5454
using iterator_category =
5555
typename std::iterator_traits<range_itr_t>::iterator_category;
5656

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class iota_view : public detray::ranges::view_interface<iota_view<incr_t>> {
3838
using difference_type = std::ptrdiff_t;
3939
using value_type = incr_t;
4040
using pointer = incr_t *;
41-
using reference = incr_t &;
41+
using reference = incr_t;
4242
using iterator_category = detray::ranges::bidirectional_iterator_tag;
4343

4444
constexpr iterator() requires std::default_initializable<incr_t> =

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class pick_view : public detray::ranges::view_interface<
6060
std::pair<typename std::iterator_traits<sequence_itr_t>::value_type,
6161
itr_ref_t>;
6262
using pointer = value_type *;
63-
using reference = const value_type &;
63+
using reference = value_type;
6464
using iterator_category =
6565
typename std::iterator_traits<sequence_itr_t>::iterator_category;
6666

0 commit comments

Comments
 (0)