util::span interface improvements
This commit is contained in:
parent
148efb02cc
commit
7376109e96
1 changed files with 27 additions and 1 deletions
|
|
@ -35,6 +35,11 @@ namespace psemek::util
|
||||||
, p_end{end}
|
, p_end{end}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
span(T * begin, std::size_t size)
|
||||||
|
: p_begin{begin}
|
||||||
|
, p_end{begin + size}
|
||||||
|
{}
|
||||||
|
|
||||||
template <std::size_t N>
|
template <std::size_t N>
|
||||||
span(T (&a)[N])
|
span(T (&a)[N])
|
||||||
: p_begin{a}
|
: p_begin{a}
|
||||||
|
|
@ -64,7 +69,7 @@ namespace psemek::util
|
||||||
T * begin() const { return p_begin; }
|
T * begin() const { return p_begin; }
|
||||||
T * end() const { return p_end; }
|
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; }
|
bool empty() const { return p_begin == p_end; }
|
||||||
|
|
||||||
|
|
@ -74,6 +79,27 @@ namespace psemek::util
|
||||||
T & front() const { return *p_begin; }
|
T & front() const { return *p_begin; }
|
||||||
T & back() const { return *(p_end - 1); }
|
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()
|
void reset()
|
||||||
{
|
{
|
||||||
p_begin = nullptr;
|
p_begin = nullptr;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue