21 #include <type_traits>
54 constexpr
SafeSpan() noexcept : data_(
nullptr), size_(0) {}
58 template <
typename Container>
59 constexpr
SafeSpan(Container& container) noexcept : data_(container.data()), size_(container.size()) {}
61 template <
typename Container>
62 constexpr
SafeSpan(
const Container& container) noexcept
63 : data_(
const_cast<pointer>(container.data())), size_(container.size()) {}
70 throw std::out_of_range(
"SafeSpan index out of range");
85 constexpr
bool empty() const noexcept {
return size_ == 0; }
90 constexpr
iterator end() const noexcept {
return data_ + size_; }
106 if (offset > size_) {
107 throw std::out_of_range(
"SafeSpan subspan offset out of range");
109 size_type actual_count = (count == SIZE_MAX) ? (size_ - offset) : count;
110 if (offset + actual_count > size_) {
111 throw std::out_of_range(
"SafeSpan subspan count out of range");
A C++17 compatible span-like class for safe array access.
constexpr size_type size_bytes() const noexcept
constexpr size_type size() const noexcept
constexpr const_reverse_iterator crbegin() const noexcept
constexpr pointer data() const noexcept
constexpr const_iterator cbegin() const noexcept
constexpr reference front() const
constexpr SafeSpan< T > first(size_type count) const
constexpr iterator begin() const noexcept
constexpr reference back() const
constexpr SafeSpan< T > last(size_type count) const
constexpr iterator end() const noexcept
constexpr const_reverse_iterator crend() const noexcept
constexpr const_iterator cend() const noexcept
constexpr SafeSpan() noexcept
std::ptrdiff_t difference_type
constexpr SafeSpan< T > subspan(size_type offset, size_type count=SIZE_MAX) const
const T & const_reference
constexpr bool empty() const noexcept
constexpr reference at(size_type index) const
std::remove_cv_t< T > value_type
std::reverse_iterator< const_iterator > const_reverse_iterator
std::reverse_iterator< iterator > reverse_iterator
constexpr SafeSpan(const Container &container) noexcept
constexpr reference operator[](size_type index) const
constexpr reverse_iterator rbegin() const noexcept
constexpr SafeSpan(Container &container) noexcept
constexpr reverse_iterator rend() const noexcept
constexpr SafeSpan(pointer data, size_type size) noexcept