Support proper util::span move & copy assignment

This commit is contained in:
Nikita Lisitsa 2021-07-11 11:37:31 +03:00
parent b9ea07f0f4
commit e831eb8567

View file

@ -24,7 +24,12 @@ namespace psemek::util
span() = default;
span(span const &) = default;
span(span &&) = default;
span(span && other)
: p_begin{other.p_begin}
, p_end{other.p_end}
{
other.reset();
}
span(T * begin, T * end)
: p_begin{begin}
@ -43,6 +48,18 @@ namespace psemek::util
, p_end{a.data() + N}
{}
span & operator =(span const &) = default;
span & operator =(span && other)
{
if (this == &other)
return *this;
p_begin = other.p_begin;
p_end = other.p_end;
other.reset();
return *this;
}
T * data() const { return p_begin; }
T * begin() const { return p_begin; }
@ -53,6 +70,12 @@ namespace psemek::util
reverse_iterator rbegin() const { return reverse_iterator(p_end); }
reverse_iterator rend() const { return reverse_iterator(p_begin); }
void reset()
{
p_begin = nullptr;
p_end = nullptr;
}
T & operator[] (size_type i) const { return p_begin[i]; }
};