File indexing completed on 2026-05-27 07:24:05
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011
0012 #include "detray/definitions/detail/qualifiers.hpp"
0013 #include "detray/utils/ranges/ranges.hpp"
0014
0015 namespace detray::ranges {
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 template <typename value_t>
0026 class pointer_view
0027 : public detray::ranges::view_interface<pointer_view<value_t>> {
0028 public:
0029 using iterator_t = value_t*;
0030
0031
0032 pointer_view() = default;
0033
0034
0035 DETRAY_HOST_DEVICE constexpr explicit pointer_view(value_t& value)
0036 : m_value{&value} {}
0037
0038
0039 DETRAY_HOST_DEVICE
0040 constexpr auto operator*() const -> const value_t& { return *m_value; }
0041
0042
0043 DETRAY_HOST_DEVICE
0044 constexpr auto operator*() -> value_t& { return *m_value; }
0045
0046
0047 DETRAY_HOST_DEVICE
0048 constexpr auto begin() noexcept -> value_t* { return m_value; }
0049
0050
0051 DETRAY_HOST_DEVICE
0052 constexpr auto begin() const noexcept -> const value_t* { return m_value; }
0053
0054
0055 DETRAY_HOST_DEVICE
0056 constexpr auto end() noexcept -> value_t* { return m_value + 1; }
0057
0058
0059 DETRAY_HOST_DEVICE
0060 constexpr auto end() const noexcept -> const value_t* { return m_value + 1; }
0061
0062
0063 DETRAY_HOST_DEVICE
0064 constexpr auto data() noexcept -> value_t* { return m_value; }
0065
0066
0067 DETRAY_HOST_DEVICE
0068 constexpr auto data() const noexcept -> const value_t* { return m_value; }
0069
0070
0071 DETRAY_HOST_DEVICE
0072 static constexpr auto size() noexcept -> std::size_t { return 1; }
0073
0074
0075 DETRAY_HOST_DEVICE
0076 constexpr auto front() noexcept -> value_t { return *m_value; }
0077
0078
0079 DETRAY_HOST_DEVICE
0080 constexpr auto back() noexcept -> value_t { return *m_value; }
0081
0082
0083 DETRAY_HOST_DEVICE constexpr auto operator[](const dindex ) const
0084 -> value_t {
0085 return *m_value;
0086 }
0087
0088 private:
0089 value_t* m_value{};
0090 };
0091
0092 namespace views {
0093
0094
0095 template <typename value_t>
0096 struct pointer : public detray::ranges::pointer_view<const value_t> {
0097 using base_type = detray::ranges::pointer_view<const value_t>;
0098
0099 constexpr pointer() = default;
0100
0101 template <typename deduced_value_t>
0102 DETRAY_HOST_DEVICE constexpr explicit pointer(deduced_value_t& value)
0103 : base_type(value) {}
0104 };
0105
0106
0107
0108 template <typename deduced_value_t>
0109 DETRAY_HOST_DEVICE pointer(deduced_value_t&) -> pointer<deduced_value_t>;
0110
0111 }
0112
0113 }