From 35424dd248320466cc4db1603b3eba4ac00196ee Mon Sep 17 00:00:00 2001 From: q66 Date: Sat, 18 Apr 2015 20:31:07 +0100 Subject: [PATCH] assignment op overloads for reverserange/moverange (c++ deletes them because of move ctor) --- octa/range.h | 34 ++++++++++++++++++++++++++++++++++ octa/vector.h | 3 --- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/octa/range.h b/octa/range.h index 1ec3e3f..44d46a7 100644 --- a/octa/range.h +++ b/octa/range.h @@ -82,6 +82,23 @@ namespace octa { ReverseRange(const ReverseRange &it): p_range(it.p_range) {} ReverseRange(ReverseRange &&it): p_range(move(it.p_range)) {} + ReverseRange &operator=(const ReverseRange &v) { + p_range = v.p_range; + return *this; + } + ReverseRange &operator=(ReverseRange &&v) { + p_range = move(v.p_range); + return *this; + } + ReverseRange &operator=(const T &v) { + p_range = v; + return *this; + } + ReverseRange &operator=(T &&v) { + p_range = forward(v); + return *this; + } + bool empty () const { return p_range.empty (); } size_t length() const { return p_range.length(); } @@ -128,6 +145,23 @@ namespace octa { MoveRange(const MoveRange &it): p_range(it.p_range) {} MoveRange(MoveRange &&it): p_range(move(it.p_range)) {} + MoveRange &operator=(const MoveRange &v) { + p_range = v.p_range; + return *this; + } + MoveRange &operator=(MoveRange &&v) { + p_range = move(v.p_range); + return *this; + } + MoveRange &operator=(const T &v) { + p_range = v; + return *this; + } + MoveRange &operator=(T &&v) { + p_range = forward(v); + return *this; + } + bool empty () const { return p_range.empty (); } size_t length() const { return p_range.length(); } diff --git a/octa/vector.h b/octa/vector.h index e983e18..d3ddc2c 100644 --- a/octa/vector.h +++ b/octa/vector.h @@ -23,9 +23,6 @@ namespace octa { struct VectorRange: InputRangeBase, RandomAccessRange, T> { VectorRange(): p_beg(nullptr), p_end(nullptr) {} VectorRange(const VectorRange &v): p_beg(v.p_beg), p_end(v.p_end) {} - VectorRange(VectorRange &&v): p_beg(v.p_beg), p_end(v.p_end) { - v.p_beg = v.p_end = nullptr; - } VectorRange(T *beg, T *end): p_beg(beg), p_end(end) {} bool operator==(const VectorRange &v) const {