narrIteration.hpp
Go to the documentation of this file.
1
7class narrIteration: public iteration {
8 BY(CLASS(narrIteration, iteration))
9 friend class tnarr;
10
11public:
12 narrIteration(tnarr& own, nidx n, nbool isReversed):
13 super(isReversed), _n(isReversed ? own.len() - 1 - n : n), _own(own) {}
14
15 using super::operator*;
16
17 T& operator*() override { return *get(); }
18
19public:
20 nbool isEnd() const override { return !_own.in(_n); }
21
22 void rel() override { _n = this->isReversed() ? -1 : _own.len(); }
23
27 ncnt stepForward(ncnt step) override {
28 WHEN(step <= 0) .ret(0);
29 WHEN(isEnd()) .ret(0);
30 int len = _own.len();
31 int toLast = len - 1 - _n;
32
33 _n += step;
34 if(_n >= len) {
35 _n = len;
36 step = toLast;
37 }
38 return step;
39 }
40
41 ncnt stepBackward(ncnt step) override {
42 WHEN(step <= 0) .ret(0);
43 WHEN(isEnd()) .ret(0);
44 int toLast = _n;
45
46 _n -= step;
47 if(_n < 0) {
48 _n = -1;
49 step = toLast;
50 }
51 return step;
52 }
53
54 using super::get;
55
56 T* get() override {
57 WHEN(isEnd()) .ret(nullptr);
58 return _own.get(_n);
59 }
60
61 using super::getContainer;
62
63 tucontainable<T>* getContainer() override { return &_own; }
64
65protected:
66 nbool _onSame(const typeProvidable& rhs) const override {
67 const me& cast = (const me&) rhs;
68 return this->isFrom(cast.getContainer()) && _n == cast._n;
69 }
70
71private:
72 nidx _n;
73 tnarr& _own;
74};
Definition: biteration.hpp:5
Definition: narrIteration.hpp:7
ncnt stepForward(ncnt step) override
Definition: narrIteration.hpp:27