diff --git a/src/util/span.hpp b/src/util/span.hpp new file mode 100644 index 00000000..a9ab79b2 --- /dev/null +++ b/src/util/span.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include + +namespace util { + template + class span { + public: + constexpr span(const T* ptr, size_t length) + : ptr(ptr), length(length) {} + + const T& operator[](size_t index) const { + return ptr[index]; + } + + const T& at(size_t index) const { + if (index >= length) { + throw std::out_of_range(); + } + return ptr[index]; + } + + auto begin() const { + return ptr; + } + + auto end() const { + return ptr + length; + } + + const T* data() const { + return ptr; + } + + size_t size() const { + return length; + } + private: + const T* ptr; + size_t length; + }; +}