12#include "detray/definitions/detail/qualifiers.hpp"
13#include "detray/definitions/indexing.hpp"
14#include "detray/utils/concepts.hpp"
15#include "detray/utils/ranges/empty.hpp"
16#include "detray/utils/ranges/ranges.hpp"
21namespace detray::ranges {
30template <detray::ranges::range range_t>
35 using iterator_t =
typename detray::ranges::iterator_t<range_t>;
39 using difference_t =
typename detray::ranges::range_difference_t<range_t>;
48 : m_begin{start}, m_end{
end} {}
77 return m_begin == rhs.m_begin && m_end == rhs.m_end;
89template <detray::ranges::range range_t,
typename index_range_t = dindex_range>
95 using iterator_t =
typename detray::ranges::iterator_t<range_t>;
97 using difference_t =
typename detray::ranges::range_difference_t<range_t>;
105 template <concepts::index index_t>
107 : m_pos{start,
end} {}
117 template <detray::ranges::range deduced_range_t>
118 requires(!std::same_as<subrange, deduced_range_t>)
126 template <detray::ranges::range deduced_range_t, concepts::index index_t>
127 requires std::is_convertible_v<
128 index_t, detray::ranges::range_difference_t<deduced_range_t>>
142 const deduced_index_range_t &pos)
148 template <detray::ranges::range deduced_range_t>
151 get_itr<1>(
range, m_pos)};
162 DETRAY_HOST_DEVICE
constexpr auto get_itr(deduced_range_t &&
range,
163 const deduced_index_range_t &pos) {
164 return detray::ranges::next(
165 detray::ranges::begin(std::forward<deduced_range_t>(
range)),
166 static_cast<difference_t>(detray::detail::get<I>(pos)));
170 index_range_t m_pos{};
174DETRAY_HOST_DEVICE_DEDUCTION_GUIDE
subrange()
177template <concepts::index index_t>
178DETRAY_HOST_DEVICE_DEDUCTION_GUIDE
subrange(index_t start, index_t end)
181template <detray::ranges::range deduced_range_t>
182DETRAY_HOST_DEVICE_DEDUCTION_GUIDE
subrange(deduced_range_t &&
range)
185template <detray::ranges::range deduced_range_t, concepts::index index_t>
186 requires std::convertible_to<
187 index_t, detray::ranges::range_difference_t<deduced_range_t>>
188DETRAY_HOST_DEVICE_DEDUCTION_GUIDE
subrange(deduced_range_t &&
range,
192template <detray::ranges::range deduced_range_t,
193 concepts::interval index_range_t>
194DETRAY_HOST_DEVICE_DEDUCTION_GUIDE
subrange(deduced_range_t &&
range,
197 std::remove_cvref_t<index_range_t>>;
200template <detray::ranges::range R, concepts::
interval I>
201using borrowed_subrange_t =
202 std::conditional_t<borrowed_range<R>, detray::ranges::subrange<R, I>,
Implements a subrange by providing start and end iterators on another range.
Definition subrange.hpp:32
typename detray::ranges::iterator_t< range_t > iterator_t
Iterator type used to delimit the range.
Definition subrange.hpp:35
constexpr auto operator==(const subrange_view &rhs) const -> bool
Equality operator.
Definition subrange.hpp:76
typename detray::ranges::range_difference_t< range_t > difference_t
Difference type used for range positions.
Definition subrange.hpp:39
constexpr auto begin() -> iterator_t
Return the first iterator.
Definition subrange.hpp:53
typename detray::ranges::const_iterator_t< range_t > const_iterator_t
Iterator type used when accessing a const view.
Definition subrange.hpp:37
constexpr auto end() const -> const_iterator_t
Return the end iterator of a const view.
Definition subrange.hpp:68
constexpr auto end() -> iterator_t
Return the end iterator.
Definition subrange.hpp:58
constexpr subrange_view(iterator_t start, iterator_t end)
Construct from an start and end iterator pair.
Definition subrange.hpp:47
constexpr auto begin() const -> const_iterator_t
Return the first iterator of a const view.
Definition subrange.hpp:63
constexpr subrange_view()=default
Default constructor.
Defines a detray 'view'.
Definition ranges.hpp:190
Concept that checks if a type models an interval of some value that can be obtained with 'get'.
Definition concepts.hpp:41
Range concept.
Definition ranges.hpp:97
Detray include(s).
Definition array_operators.hpp:18
detail::index_range< dindex > dindex_range
Index ranges and sequences.
Definition indexing.hpp:24
std::array< value_t, kDIM > darray
Fixed-size array container.
Definition containers.hpp:30
models a dangling iterator
Definition ranges.hpp:158
interface type to construct a subrange_view with CTAD
Definition subrange.hpp:90
constexpr subrange(deduced_range_t &&range, const deduced_index_range_t &pos)
Construct from a range and an index range pos.
Definition subrange.hpp:141
typename detray::ranges::iterator_t< range_t > iterator_t
Definition subrange.hpp:95
constexpr subrange(iterator_t start, iterator_t end)
Construct from an start and end iterator pair.
Definition subrange.hpp:112
typename detray::ranges::range_difference_t< range_t > difference_t
Definition subrange.hpp:97
constexpr subrange()=default
Default constructor.
constexpr auto operator()(deduced_range_t &&range)
Call operator for range composition.
Definition subrange.hpp:149
detray::ranges::detail::subrange_view< range_t > base_type
Definition subrange.hpp:92
constexpr subrange(index_t start, index_t end)
Construct from two indices, storing them for later range composition.
Definition subrange.hpp:106
constexpr subrange(deduced_range_t &&range)
Construct from a range.
Definition subrange.hpp:119
constexpr subrange(deduced_range_t &&range, index_t pos)
Construct from a range and starting position pos.
Definition subrange.hpp:129