kDB: Knowledge DataBase
Loading...
Searching...
No Matches
Iterators.h
1#include "Interfaces/Iterable.h"
2
3#include <knowCore/Forward.h>
4
5namespace knowCore::Iterators
6{
7
12 template<typename _T_>
13 class Aggregator : public Interfaces::Iterable<_T_>
14 {
15 public:
16 Aggregator(QList<Interfaces::IterableSP<_T_>> _iterators) : m_iterators(_iterators)
17 {
18 skipToNext();
19 }
20 ~Aggregator() {}
21 public:
22 _T_ next() override
23 {
24 _T_ t = m_iterators[m_index]->next();
25 skipToNext();
26 return t;
27 }
28 bool hasNext() const override
29 {
30 return m_index < m_iterators.size() and m_iterators[m_index]->hasNext();
31 }
32 private:
33 void skipToNext()
34 {
35 while(m_index < m_iterators.size() and not m_iterators[m_index]->hasNext())
36 {
37 ++m_index;
38 }
39 }
40 private:
42 qsizetype m_index = 0;
43 };
44 template<typename _T_>
45 Interfaces::IterableSP<_T_> makeAggregator(const QList<Interfaces::IterableSP<_T_>>& _iterators)
46 {
47 return Interfaces::IterableSP<_T_>(new Aggregator<_T_>(_iterators));
48 }
49
50} // namespace knowCore::Iterators
Definition Revision.h:9
Definition Forward.h:6
Definition Iterable.h:7
Definition Iterators.h:14