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