util::span interface improvements

This commit is contained in:
Nikita Lisitsa 2023-01-10 03:35:21 +03:00
parent 148efb02cc
commit 7376109e96

View file

@ -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 <std::size_t N>
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;