// SPDX-License-Identifier: Apache-2.0 // Copyright (c) 2024-2026 Quad4.io #ifndef RNS_SPAN_HPP #define RNS_SPAN_HPP #include #include namespace rns { // Minimal C++17 span (pointer + size). Not a full std::span replacement. template class span { public: using element_type = T; using value_type = typename std::remove_cv::type; using size_type = std::size_t; using pointer = T *; using reference = T &; using iterator = T *; using const_iterator = const T *; span() noexcept : data_(nullptr), size_(0) {} span(T *data, size_type size) noexcept : data_(data), size_(size) {} template span(T (&arr)[N]) noexcept : data_(arr), size_(N) {} template span(U (&arr)[N], typename std::enable_if::value>::type * = nullptr) noexcept : data_(arr), size_(N) {} T *data() const noexcept { return data_; } size_type size() const noexcept { return size_; } bool empty() const noexcept { return size_ == 0; } reference operator[](size_type i) const { return data_[i]; } iterator begin() const noexcept { return data_; } iterator end() const noexcept { return data_ + size_; } const_iterator cbegin() const noexcept { return data_; } const_iterator cend() const noexcept { return data_ + size_; } private: T *data_; size_type size_; }; } // namespace rns #endif