diff --git a/libs/util/include/psemek/util/span.hpp b/libs/util/include/psemek/util/span.hpp index 93cf5af3..b710180e 100644 --- a/libs/util/include/psemek/util/span.hpp +++ b/libs/util/include/psemek/util/span.hpp @@ -35,6 +35,11 @@ namespace psemek::util , p_end{end} {} + span(T * begin, std::size_t size) + : p_begin{begin} + , p_end{begin + size} + {} + template span(T (&a)[N]) : p_begin{a} @@ -64,7 +69,7 @@ namespace psemek::util T * begin() const { return p_begin; } T * end() const { return p_end; } - difference_type size() const { return p_end - p_begin; } + size_type size() const { return p_end - p_begin; } bool empty() const { return p_begin == p_end; } @@ -74,6 +79,27 @@ namespace psemek::util T & front() const { return *p_begin; } T & back() const { return *(p_end - 1); } + span subspan(std::size_t start, std::size_t end) const + { + return span{p_begin + start, p_begin + end}; + } + + span prefix(std::size_t size) const + { + return subspan(0, size); + } + + span suffix(std::size_t size) const + { + return span{p_end - size, p_end}; + } + + span & consume(std::size_t count) + { + p_begin += count; + return *this; + } + void reset() { p_begin = nullptr;