TDME2 1.9.121
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
VectorIteratorMultiple.h
Go to the documentation of this file.
1#pragma once
2
3#include <algorithm>
4#include <vector>
5
6#include <tdme/tdme.h>
8
9using std::find;
10using std::vector;
11
12namespace tdme {
13namespace utilities {
14
15/**
16 * Vector iterator template to be used to iterate multiple vectors at a single invocation
17 * @author Andreas Drewke
18 * @version $Id$
19 */
20template<typename T>
22{
23private:
24 int32_t vectorIdx { 0 };
25 int32_t elementIdx { 0 };
26 vector<vector<T>*> vectorList;
27
28public:
29 /**
30 * Public constructor
31 */
33 reset();
34 }
35
36 /**
37 * Public constructor
38 * @param vectorList vector list
39 */
40 VectorIteratorMultiple(vector<vector<T>*>& vectorList) {
41 this->vectorList = vectorList;
42 reset();
43 }
44
45 /**
46 * Clears list of array lists to iterate
47 */
48 void clear() {
49 vectorList.clear();
50 }
51
52 /**
53 * Adds vector to iterator
54 * @param vector vector
55 */
56 void addVector(vector<T>* vector) {
57 if (find(vectorList.begin(), vectorList.end(), vector) != vectorList.end()) return;
58 vectorList.push_back(vector);
59 }
60
61 /**
62 * Resets vector iterator for iterating
63 * @return this vector iterator
64 */
66 this->vectorIdx = 0;
67 this->elementIdx = 0;
68 return this;
69 }
70
71 /**
72 * Determines if next element is available
73 * @return bool if next element available
74 */
75 bool hasNext() {
76 if (vectorList.size() == 0) return false;
77 while (true == true) {
78 if (vectorList[vectorIdx]->size() == 0 || elementIdx == vectorList[vectorIdx]->size()) {
79 vectorIdx++;
80 elementIdx = 0;
81 if (vectorIdx == vectorList.size()) return false;
82 } else {
83 return true;
84 }
85 }
86 }
87
88 /**
89 * Retrieves next element, hasNext must have been called before
90 */
91 T next() {
92 return (*vectorList[vectorIdx])[elementIdx++];
93 }
94
95 /**
96 * @return iterator
97 */
99 reset();
100 return this;
101 }
102
103 /**
104 * Clones this iterator
105 */
108 }
109
110};
111
112};
113};
Vector iterator template to be used to iterate multiple vectors at a single invocation.
VectorIteratorMultiple(vector< vector< T > * > &vectorList)
Public constructor.
bool hasNext()
Determines if next element is available.
VectorIteratorMultiple< T > * reset()
Resets vector iterator for iterating.
T next()
Retrieves next element, hasNext must have been called before.
void clear()
Clears list of array lists to iterate.
void addVector(vector< T > *vector)
Adds vector to iterator.
VectorIteratorMultiple< T > * clone()
Clones this iterator.
Definition: fwd-tdme.h:4