#include "List.hpp" #include BaseValue* ListValue::Iterator::operator*() const { return mIter->get(); } BaseValue* ListValue::Iterator::operator->() const { return mIter->get(); } ListValue::Iterator& ListValue::Iterator::operator++() { ++mIter; return *this; } ListValue::Iterator ListValue::Iterator::operator++(int) const { return Iterator(mIter + 1); } ListValue::Iterator& ListValue::Iterator::operator--() { --mIter; return *this; } ListValue::Iterator ListValue::Iterator::operator--(int) const { return Iterator(mIter - 1); } bool operator==(const ListValue::Iterator& a, const ListValue::Iterator& b) { return a.mIter == b.mIter; } ListValue::Iterator::Iterator(decltype(mIter) iter) : mIter{ iter } { } bool ListValue::IsInstance(const BaseValue* value) { return value->GetKind() == KD_List; } ListValue::ListValue() : BaseValue(KD_List) { } int ListValue::GetCount() const { return mElements.size(); } BaseValue* ListValue::GetElement(int i) const { return mElements[i].get(); } void ListValue::Append(std::unique_ptr element) { mElements.push_back(std::move(element)); } void ListValue::Insert(int i, std::unique_ptr element) { mElements.insert(mElements.begin() + i, std::move(element)); } void ListValue::Insert(Iterator iter, std::unique_ptr element) { mElements.insert(iter.mIter, std::move(element)); } void ListValue::Remove(int i) { mElements.erase(mElements.begin() + i); } void ListValue::Remove(Iterator iter) { mElements.erase(iter.mIter); } ListValue::Iterator ListValue::begin() { return Iterator(mElements.begin()); } ListValue::Iterator ListValue::end() { return Iterator(mElements.end()); }