uiter.hpp
Go to the documentation of this file.
1
2#include <type_traits>
3
5
11class iter: public iterable, public clonable, public typeProvidable {
12 BY(CLASS(iter))
13 friend class iteration;
14 template <typename E, typename TACTIC> friend class tnarr;
15 template <typename K, typename V, typename defaultContainer> friend class tnchain;
16
17public:
18 explicit iter();
19 explicit iter(iteration* newStep);
20 iter(const me& rhs);
21
22public:
23 me operator+(ncnt step);
24 me& operator++();
25 me operator++(int);
26 me& operator+=(ncnt step);
27
28 using iterable::operator*;
29 RSquare operator*() override;
30
31 typename std::remove_reference<R>::type operator->();
32 const typename std::remove_reference<R>::type operator->() const BY_CONST_FUNC(operator->())
33 me& operator=(const me& rhs);
34 explicit operator nbool() const;
35
36public:
37 nbool isReversed() const override;
38
40 void rel() override;
41
42 using iterable::isFrom;
43 nbool isFrom(const tucontainable& it) const override;
44
45 nbool isEnd() const override;
46 ncnt next(ncnt step) override;
47 ncnt prev(ncnt step) override;
48 ncnt stepForward(ncnt step) override;
49 ncnt stepBackward(ncnt step) override;
50
51 using iterable::get;
52 R get() override;
53
54 template <typename E> E* get() { return get() TO(template cast<E>()); }
55
56 tucontainable<T, R, RSquare>* getContainer() override;
57 const tucontainable<T, R, RSquare>* getContainer() const BY_CONST_FUNC(getContainer())
58
59private:
60 me& _assign(const me& rhs);
61 nbool _onSame(const typeProvidable& rhs) const override;
62
65 void _nextToMatchParamType(typename iterable::iterationType type);
66 ncnt _step(typename iterable::iterationType type, ncnt step);
67 ncnt _iterate(typename iterable::iterationType type, ncnt step);
68
69protected:
70 tstr<iteration> _iteration;
71};
Bidirectional iterator for key-value containers.
Definition: biter.hpp:9
ncnt next(ncnt step) override
void rel() override
once rel(), an iterator enters a state where it can never be reused again.
Definition: biterable.hpp:3
Definition: biteration.hpp:5
#define TO(fn)
Definition: to.hpp:171