1#ifndef RANDOMACCESSITERATOR_H
2#define RANDOMACCESSITERATOR_H
10 template<
typename TYPE>
20 randomAccessIterator(
const randomAccessIterator& other);
21 randomAccessIterator& operator=(
const randomAccessIterator& other);
22 randomAccessIterator* clone()
const override;
23 [[nodiscard]]
bool hasNext()
const override;
24 [[nodiscard]]
bool hasPrev()
const override;
27 void next()
const override;
28 void prev()
const override;
29 void operator+=(int64_t steps)
const override;
30 void operator-=(int64_t steps)
const override;
32 randomAccessIterator* getNext()
const override;
33 randomAccessIterator* getPrev()
const override;
35 TYPE get()
const override;
36 void set(
const TYPE& data)
override;
37 [[nodiscard]]
bool isValid()
const override;
38 [[nodiscard]] std::string className()
const override;
42 template<
typename TYPE>
43 original::randomAccessIterator<TYPE>::randomAccessIterator(TYPE* ptr,
const container<TYPE>* container,
45 : _ptr{ptr}, _container{container}, _pos(pos) {}
47 template<
typename TYPE>
48 auto original::randomAccessIterator<TYPE>::equalPtr(
const iterator<TYPE> *other)
const ->
bool {
50 return other_it !=
nullptr && _ptr == other_it->_ptr;
53 template<
typename TYPE>
54 original::randomAccessIterator<TYPE>::randomAccessIterator(
const randomAccessIterator &other) : _pos(0) {
55 this->operator=(other);
58 template<
typename TYPE>
59 auto original::randomAccessIterator<TYPE>::operator=(
64 this->_ptr = other._ptr;
65 this->_container = other._container;
66 this->_pos = other._pos;
70 template<
typename TYPE>
75 template<
typename TYPE>
76 auto original::randomAccessIterator<TYPE>::hasNext() const ->
bool {
77 return this->isValid() && this->_pos <= this->_container->size() - 1;
80 template<
typename TYPE>
81 auto original::randomAccessIterator<TYPE>::hasPrev() const ->
bool {
82 return this->isValid() && this->_pos >= 1;
85 template<
typename TYPE>
86 auto original::randomAccessIterator<TYPE>::atPrev(
const iterator<TYPE> *other)
const ->
bool {
90 template<
typename TYPE>
91 auto original::randomAccessIterator<TYPE>::atNext(
const iterator<TYPE> *other)
const ->
bool {
95 template<
typename TYPE>
96 auto original::randomAccessIterator<TYPE>::next() const ->
void {
101 template<
typename TYPE>
102 auto original::randomAccessIterator<TYPE>::prev() const ->
void {
107 template<
typename TYPE>
108 auto original::randomAccessIterator<TYPE>::operator+=(int64_t steps)
const ->
void {
113 template<
typename TYPE>
114 auto original::randomAccessIterator<TYPE>::operator-=(int64_t steps)
const ->
void {
119 template <
typename TYPE>
120 auto original::randomAccessIterator<TYPE>::operator-(
const iterator<TYPE>& other)
const -> int64_t
123 if (other_it ==
nullptr)
124 return this > &other ?
125 std::numeric_limits<int64_t>::max() :
126 std::numeric_limits<int64_t>::min();
127 if (this->_container != other_it->_container)
128 return this->_container > other_it->_container ?
129 std::numeric_limits<int64_t>::max() :
130 std::numeric_limits<int64_t>::min();
131 return this->_ptr - other_it->_ptr;
134 template<
typename TYPE>
137 auto it = this->clone();
142 template<
typename TYPE>
145 auto it = this->clone();
150 template<
typename TYPE>
151 auto original::randomAccessIterator<TYPE>::get() -> TYPE& {
156 template<
typename TYPE>
157 auto original::randomAccessIterator<TYPE>::set(
const TYPE& data) ->
void {
162 template<
typename TYPE>
163 auto original::randomAccessIterator<TYPE>::get() const -> TYPE
169 template<
typename TYPE>
170 auto original::randomAccessIterator<TYPE>::isValid() const ->
bool {
171 return this->_pos >= 0 && this->_pos < this->_container->size();
174 template<
typename TYPE>
175 auto original::randomAccessIterator<TYPE>::className() const -> std::
string {
176 return "RandomAccessIterator";
Definition container.h:10
Definition randomAccessIterator.h:11