1 /// 2 /// Parsnip serialization. 3 /// @file parsnip_iterator.cpp- Iterators for serialization data type. 4 /// @author Perette Barella 5 /// @date 2020-02-29 6 /// @copyright Copyright 2020 Devious Fish. All rights reserved. 7 /// 8 9 #include <cassert> 10 11 #include "parsnip.h" 12 13 namespace Parsnip { 14 SerialData::iterator::iterator (const SerialData *l) : list (l->data.list) { 15 if (l->datatype != Type::List) { 16 throw IncorrectDataType (Type::List, l->datatype); 17 } 18 }; 19 20 SerialData::iterator::iterator (const SerialData *l, size_type pos) : list (l->data.list), position (pos) { 21 if (l->datatype != Type::List) { 22 throw IncorrectDataType (Type::List, l->datatype); 23 } 24 assert (pos == list->size()); 25 }; 26 27 const SerialData &SerialData::iterator::operator*() const noexcept { 28 assert (list); 29 assert (position >= 0 && position < list->size()); 30 return (*list)[position]; 31 } 32 33 SerialData::iterator &SerialData::iterator::operator++() noexcept { 34 assert (position >= 0 && position < list->size()); 35 position++; 36 return *this; 37 } 38 SerialData::iterator SerialData::iterator::operator++ (int) noexcept { 39 assert (position >= 0 && position < list->size()); 40 iterator prior = *this; 41 position++; 42 return prior; 43 } 44 45 bool SerialData::iterator::operator!= (const iterator &compare) const noexcept { 46 assert (list == compare.list); 47 return position != compare.position; 48 } 49 } // namespace Parsnip 50