a lot of code but not sure about state iterator needs for in order traversal

This commit is contained in:
Pagwin 2024-11-18 17:51:04 -05:00
parent ee7aad38f0
commit c81eaa40cc
No known key found for this signature in database
GPG key ID: 81137023740CA260

81
Map.hpp
View file

@ -18,6 +18,9 @@ private:
std::vector<std::optional<ValueType>> store; std::vector<std::optional<ValueType>> store;
public: public:
class Iterator;
class ConstIterator;
class ReverseIterator;
// TODO: Iterator functionality // TODO: Iterator functionality
class Iterator { class Iterator {
public: public:
@ -29,11 +32,43 @@ public:
public: public:
Iterator() = delete; Iterator() = delete;
Iterator(underlying iter) : store_iter{iter} {} Iterator(underlying iter) : store_iter{iter} {}
ConstIterator to_const() const { return ConstIterator(this); }
Iterator &operator++() { return *this; }
Iterator operator++(int) {
Iterator tmp = *this;
++(*this);
return tmp;
}
Iterator &operator--() {}
Iterator operator--(int) {
Iterator tmp = *this;
--(*this);
return tmp;
}
ValueType &operator*() const { return this->store_iter->value(); }
ValueType *operator->() const { return &this->store_iter->value(); }
friend bool operator==(Iterator const &lhs, Iterator const &rhs) {
return lhs.store_iter == rhs.store_iter;
}
friend bool operator!=(Iterator const &lhs, Iterator const &rhs) {
return lhs.store_iter != rhs.store_iter;
}
friend bool operator==(ConstIterator const &lhs, Iterator const &rhs) {
return lhs == rhs.to_const();
}
friend bool operator!=(ConstIterator const &lhs, Iterator const &rhs) {
return lhs != rhs.to_const();
}
friend bool operator==(Iterator const &lhs, ConstIterator const &rhs) {
return lhs.to_const() == rhs;
}
friend bool operator!=(Iterator const &lhs, ConstIterator const &rhs) {
return lhs.to_const() != rhs;
}
}; };
class ConstIterator { class ConstIterator {
public: public:
using underlying = using underlying = Iterator;
typename std::vector<std::optional<ValueType>>::const_iterator;
private: private:
underlying store_iter; underlying store_iter;
@ -41,6 +76,35 @@ public:
public: public:
ConstIterator() = delete; ConstIterator() = delete;
ConstIterator(underlying iter) : store_iter{iter} {} ConstIterator(underlying iter) : store_iter{iter} {}
friend bool operator==(ConstIterator const &lhs, ConstIterator const &rhs) {
return lhs.store_iter == rhs.store_iter;
}
ConstIterator &operator++() {
++this->store_iter;
return *this;
}
ConstIterator operator++(int) {
ConstIterator tmp = *this;
this->store_iter++;
return tmp;
}
ConstIterator &operator--() {
--this->store_iter;
return *this;
}
ConstIterator operator--(int) {
ConstIterator tmp = *this;
this->store_iter--;
return tmp;
}
const ValueType &operator*() const { return *this->store_iter; }
const ValueType *operator->() const {
// I find this rather funny
return this->store_iter.operator->();
}
friend bool operator!=(ConstIterator const &lhs, ConstIterator const &rhs) {
return lhs.store_iter != rhs.store_iter;
}
}; };
class ReverseIterator { class ReverseIterator {
public: public:
@ -52,6 +116,19 @@ public:
public: public:
ReverseIterator() = delete; ReverseIterator() = delete;
ReverseIterator(underlying store_iter) : store_iter{store_iter} {} ReverseIterator(underlying store_iter) : store_iter{store_iter} {}
ReverseIterator &operator++() {}
ReverseIterator operator++(int) {}
ReverseIterator &operator--() {}
ReverseIterator operator--(int) {}
ValueType &operator*() const {}
ValueType *operator->() const {}
friend bool operator==(ReverseIterator const &lhs,
ReverseIterator const &rhs) {
return lhs.store_iter == rhs.store_iter;
}
friend bool operator!=(ConstIterator const &lhs, ConstIterator const &rhs) {
return lhs.store_iter != rhs.store_iter;
}
}; };
Map() : store{} {} Map() : store{} {}
Map(const Map &rhs) : store{rhs.store} {} Map(const Map &rhs) : store{rhs.store} {}