From df74c873bc11ad90fb26e582c7be0ed092228661 Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev Date: Fri, 25 Oct 2024 18:04:36 -0400 Subject: Add sem03 --- Seminar03/src/dynamic-array/iterator/iterator.hpp | 205 ++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 Seminar03/src/dynamic-array/iterator/iterator.hpp (limited to 'Seminar03/src/dynamic-array/iterator') diff --git a/Seminar03/src/dynamic-array/iterator/iterator.hpp b/Seminar03/src/dynamic-array/iterator/iterator.hpp new file mode 100644 index 0000000..4086bf7 --- /dev/null +++ b/Seminar03/src/dynamic-array/iterator/iterator.hpp @@ -0,0 +1,205 @@ +#pragma once +#include + +template +class const_vector_iterator +{ + public: + const_vector_iterator(T* passedVal) + : memPointer{passedVal} + {} + const_vector_iterator(T* passedVal, size_t _push) + : memPointer{passedVal + _push} + {} + + const_vector_iterator operator+(int off) const + { + return {memPointer + off}; + } + + const_vector_iterator operator-(int off) const + { + return {memPointer - off}; + } + + int operator-(const_vector_iterator other) const + { + return memPointer - other.memPointer; + } + + const T* operator->() const noexcept + { + return memPointer; + } + + T& operator*() const noexcept + { + return *(memPointer); + } + + bool operator==(const const_vector_iterator& it) const + { + return (memPointer == it.memPointer); + } + + bool operator!=(const const_vector_iterator& it) const + { + return !(memPointer == it.memPointer); + } + + private: + T* memPointer; +}; + +template +class vector_iterator +{ + public: + vector_iterator(T* passedVal) + : memPointer{passedVal} {}; + vector_iterator(T* passedVal, size_t _push) + : memPointer{passedVal + _push} {}; + + vector_iterator& operator++() + { + memPointer++; + return *this; + } + + vector_iterator operator++(int) const + { + vector_iterator it = *this; + ++(*this); + return it; + } + + vector_iterator& operator--() + { + memPointer--; + return *this; + } + + vector_iterator operator--(int) const + { + vector_iterator it = *this; + --(*this); + return it; + } + + operator const_vector_iterator() const + { + return const_vector_iterator(memPointer); + } + + vector_iterator operator+(int off) const + { + return {memPointer + off}; + } + + vector_iterator operator-(int off) const + { + return {memPointer - off}; + } + + T* operator->() + { + return memPointer; + } + + const T* operator->() const + { + return memPointer; + } + + T& operator*() + { + return *(memPointer); + } + + bool operator==(const vector_iterator& it) const + { + return (memPointer == it.memPointer); + } + + bool operator!=(const vector_iterator& it) const + { + return !(memPointer == it.memPointer); + } + + private: + T* memPointer; +}; + +template +class reverse_vector_iterator +{ + public: + reverse_vector_iterator(T* passedVal) + : memPointer{passedVal} {}; + reverse_vector_iterator(T* passedVal, size_t _push) + : memPointer{passedVal + _push} {}; + + reverse_vector_iterator& operator++() + { + memPointer--; + return *this; + } + + reverse_vector_iterator operator++(int) const + { + reverse_vector_iterator it = *this; + ++(*this); + return it; + } + + reverse_vector_iterator& operator--() + { + memPointer++; + return *this; + } + + reverse_vector_iterator operator--(int) const + { + reverse_vector_iterator it = *this; + --(*this); + return it; + } + + reverse_vector_iterator operator+(int off) const + { + return {memPointer - off}; + } + + reverse_vector_iterator operator-(int off) const + { + return {memPointer + off}; + } + + T* operator->() + { + return memPointer; + } + + const T* operator->() const + { + return memPointer; + } + + T& operator*() + { + return *(memPointer); + } + + bool operator==(const reverse_vector_iterator& it) const + { + return (memPointer == it.memPointer); + } + + bool operator!=(const reverse_vector_iterator& it) const + { + return !(memPointer == it.memPointer); + } + + private: + T* memPointer; +}; \ No newline at end of file -- cgit v1.3.1-23-gd82d