#ifndef PORYGONLANG_SIMPLEKEYITERATOR_HPP #define PORYGONLANG_SIMPLEKEYITERATOR_HPP #include "Iterator.hpp" #include "../EvalValues/TableEvalValue.hpp" #include "../EvalValues/StringEvalValue.hpp" namespace Porygon::Evaluation{ class TableKeyIterator : public Iterator{ _Rb_tree_const_iterator>> _iterator; _Rb_tree_const_iterator>> _end; bool _hasStarted = false; public: explicit TableKeyIterator(const TableEvalValue* table) : _iterator(table->GetTableIterator()), _end(table->GetTableIteratorEnd()){} shared_ptr GetCurrent() final{ return make_shared(*_iterator->first.GetString()); } bool MoveNext() final{ if (_hasStarted){ std::advance(_iterator, 1); } else{ _hasStarted = true; } return _iterator != _end; } void Reset(){ throw EvaluationException("Can't reset table key iterator"); } }; } #endif //PORYGONLANG_SIMPLEKEYITERATOR_HPP