blob: 128cbc6ec7e7a4bb91d902870a215aa5c7d6d307 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#pragma once
template <typename T>
class IOpaqueIterator {
public:
virtual ~IOpaqueIterator() = default;
virtual bool HasNext() const = 0;
virtual T Next() = 0;
};
template <typename TContainer>
class ContainerOpaqueIterator : public IOpaqueIterator<typename TContainer::reference_type> {
private:
typename TContainer::iterator mIter;
typename TContainer::const_iterator mEnd;
public:
ContainerOpaqueIterator(TContainer& container)
: mIter{ container.begin() }
, mEnd{ container.end() } {}
virtual bool HasNext() const override {
return mIter != mEnd;
}
virtual typename TContainer::reference_type Next() override {
auto result = *mIter;
++mIter;
return result;
}
};
|