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