PIVector iterator operators

This commit is contained in:
2022-04-06 08:40:25 +03:00
parent fb282d405d
commit c90d06871e
3 changed files with 55 additions and 17 deletions

View File

@@ -227,12 +227,31 @@ public:
inline iterator(): parent(0), pos(0) {}
inline T & operator *() {return (*parent)[pos];}
inline const T & operator *() const {return (*parent)[pos];}
inline void operator ++() {++pos;}
inline void operator ++(int) {++pos;}
inline void operator --() {--pos;}
inline void operator --(int) {--pos;}
inline T & operator->() {return (*parent)[pos];}
inline iterator & operator ++() {++pos; return *this;}
inline iterator & operator ++(int) {const auto tmp = *this; ++*this; return tmp;}
inline iterator & operator --() {--pos; return *this;}
inline iterator & operator --(int) {const auto tmp = *this; --*this; return tmp;}
inline iterator & operator +=(const iterator & it) {pos += it.pos; return *this;}
inline iterator & operator +=(size_t p) {pos += p; return *this;}
inline iterator & operator -=(const iterator & it) {pos -= it.pos; return *this;}
inline iterator & operator -=(size_t p) {pos -= p; return *this;}
friend inline iterator operator-(const iterator & it, size_t p) {auto tmp = it; tmp -= p; return tmp;}
friend inline iterator operator-(size_t p, const iterator & it) {return it - p;}
friend inline size_t operator-(const iterator & it1, const iterator & it2) {return it1.pos - it2.pos;}
friend inline iterator operator+(const iterator & it, size_t p) {auto tmp = it; tmp += p; return tmp;}
friend inline iterator operator+(size_t p, const iterator & it) {return it + p;}
inline bool operator ==(const iterator & it) const {return (pos == it.pos);}
inline bool operator !=(const iterator & it) const {return (pos != it.pos);}
friend inline bool operator <(const iterator & it1, const iterator & it2) {return it1.pos < it2.pos;}
friend inline bool operator <=(const iterator & it1, const iterator & it2) {return it1.pos <= it2.pos;}
friend inline bool operator >(const iterator & it1, const iterator & it2) {return it1.pos > it2.pos;}
friend inline bool operator >=(const iterator & it1, const iterator & it2) {return it1.pos >= it2.pos;}
};
class const_iterator {
@@ -244,12 +263,31 @@ public:
public:
inline const_iterator(): parent(0), pos(0) {}
inline const T & operator *() const {return (*parent)[pos];}
inline void operator ++() {++pos;}
inline void operator ++(int) {++pos;}
inline void operator --() {--pos;}
inline void operator --(int) {--pos;}
inline const T & operator->() {return (*parent)[pos];}
inline const_iterator & operator ++() {++pos; return *this;}
inline const_iterator & operator ++(int) {const auto tmp = *this; ++*this; return tmp;}
inline const_iterator & operator --() {--pos; return *this;}
inline const_iterator & operator --(int) {const auto tmp = *this; --*this; return tmp;}
inline const_iterator & operator +=(const const_iterator & it) {pos += it.pos; return *this;}
inline const_iterator & operator +=(size_t p) {pos += p; return *this;}
inline const_iterator & operator -=(const const_iterator & it) {pos -= it.pos; return *this;}
inline const_iterator & operator -=(size_t p) {pos -= p; return *this;}
friend inline const_iterator operator-(const const_iterator & it, size_t p) {auto tmp = it; tmp -= p; return tmp;}
friend inline const_iterator operator-(size_t p, const const_iterator & it) {return it - p;}
friend inline size_t operator-(const const_iterator & it1, const const_iterator & it2) {return it1.pos - it2.pos;}
friend inline const_iterator operator+(const const_iterator & it, size_t p) {auto tmp = it; tmp += p; return tmp;}
friend inline const_iterator operator+(size_t p, const const_iterator & it) {return it + p;}
inline bool operator ==(const const_iterator & it) const {return (pos == it.pos);}
inline bool operator !=(const const_iterator & it) const {return (pos != it.pos);}
friend inline bool operator <(const const_iterator & it1, const const_iterator & it2) {return it1.pos < it2.pos;}
friend inline bool operator <=(const const_iterator & it1, const const_iterator & it2) {return it1.pos <= it2.pos;}
friend inline bool operator >(const const_iterator & it1, const const_iterator & it2) {return it1.pos > it2.pos;}
friend inline bool operator >=(const const_iterator & it1, const const_iterator & it2) {return it1.pos >= it2.pos;}
};
class reverse_iterator {