#pragma once #include #include #include class ListValue : public BaseValue { public: class Iterator { private: std::vector>::iterator mIter; public: BaseValue* operator*() const; BaseValue* operator->() const; Iterator& operator++(); Iterator operator++(int) const; Iterator& operator--(); Iterator operator--(int) const; friend bool operator==(const Iterator& a, const Iterator& b); private: friend class ListValue; Iterator(decltype(mIter) iter); }; private: std::vector> mElements; public: static bool IsInstance(const BaseValue* value); ListValue(); int GetCount() const; BaseValue* GetElement(int i) const; void Append(std::unique_ptr element); void Insert(int i, std::unique_ptr element); void Insert(Iterator iter, std::unique_ptr element); void Remove(int i); void Remove(Iterator iter); Iterator begin(); Iterator end(); };