1
This commit is contained in:
2022-07-24 22:42:12 +02:00
parent 5833c07ae2
commit 5470992d31

View File

@ -7,44 +7,48 @@
namespace bse { namespace bse {
// 0 is unchecked // 0 is unchecked
template<typename T, const std::size_t N = 0> template<typename T, std::size_t N = 0>
class span { class span {
public: public:
using iterator = ContinuousIterator<T>; using iterator = ContinuousIterator<T>;
private: private:
const T* ptr; T* ptr;
std::size_t sz = N; std::size_t sz = N;
public: public:
span() = default; span() = default;
span(const T* first) : ptr(first) {} span(T* first) : ptr(first) {}
span(const T* first, const T* last) : ptr(first), sz(last - first) {} span(T* first, T* last) : ptr(first), sz(last - first) {}
iterator begin() { return iterator(&ptr[0]); } iterator begin() { return iterator(ptr); }
iterator begin() const { return iterator(&ptr[0]); } iterator begin() const { return iterator(ptr); }
// If size is unchecked end() is equal to begin() // If size is unchecked end() is equal to begin()
iterator end() { return iterator(&ptr[N]); } iterator end() { return iterator(&ptr[N]); }
iterator end() const { return iterator(&ptr[N]); } iterator end() const { return iterator(&ptr[N]); }
constexpr T& operator[](std::size_t i) { T* operator[](std::size_t i) {
if constexpr (N != 0 && i >= N) { if constexpr (N != 0) {
return nullptr; if (i >= N) { return nullptr; }
} }
return ptr[i]; return &ptr[i];
} }
constexpr const T& operator[](std::size_t i) const { const T* operator[](std::size_t i) const {
if constexpr (N != 0 && i >= N) { if constexpr (N != 0) {
return nullptr; if (i >= N) { return nullptr; }
} }
return ptr[i]; return &ptr[i];
} }
T* data() { return &ptr[0]; } T* data() { return ptr; }
const T* data() const { return &ptr[0]; } const T* data() const { return ptr; }
explicit operator T*() {
return ptr;
}
// First is inclusive, last exclusive [first, last) // First is inclusive, last exclusive [first, last)
span& subspan(std::size_t first, std::size_t last = N) { span& subspan(std::size_t first, std::size_t last = N) {