From e831eb8567fb1e13962fb3b702cb2a98449bd4b6 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sun, 11 Jul 2021 11:37:31 +0300 Subject: [PATCH] Support proper util::span move & copy assignment --- libs/util/include/psemek/util/span.hpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/libs/util/include/psemek/util/span.hpp b/libs/util/include/psemek/util/span.hpp index d38f21ad..42896ea1 100644 --- a/libs/util/include/psemek/util/span.hpp +++ b/libs/util/include/psemek/util/span.hpp @@ -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]; } };