로딩중...
검색중...
일치하는것 없음
narrIteration.hpp
이 파일의 문서화 페이지로 가기
1
8class narrIteration: public iteration {
9 BY(CLASS(narrIteration, iteration))
10 friend class tnarr;
11
12public:
13 narrIteration(tnarr& own, nidx n, nbool isReversed):
14 super(isReversed), _n(isReversed ? own.len() - 1 - n : n), _own(own) {}
15
16 using super::operator*;
17
18 T& operator*() override { return *get(); }
19
20public:
21 nbool isEnd() const override { return !_own.in(_n); }
22
23 void rel() override { _n = this->isReversed() ? -1 : _own.len(); }
24
30 ncnt stepForward(ncnt step) override {
31 WHEN(step <= 0) .ret(0);
32 WHEN(isEnd()) .ret(0);
33 int len = _own.len();
34 int toLast = len - 1 - _n;
35
36 _n += step;
37 if(_n >= len) {
38 _n = len;
39 step = toLast;
40 }
41 return step;
42 }
43
44 ncnt stepBackward(ncnt step) override {
45 WHEN(step <= 0) .ret(0);
46 WHEN(isEnd()) .ret(0);
47 int toLast = _n;
48
49 _n -= step;
50 if(_n < 0) {
51 _n = -1;
52 step = toLast;
53 }
54 return step;
55 }
56
57 using super::get;
58
59 T* get() override {
60 WHEN(isEnd()) .ret(nullptr);
61 return _own.get(_n);
62 }
63
64 using super::getContainer;
65
66 tucontainable<T>* getContainer() override { return &_own; }
67
68protected:
69 nbool _onSame(const typeProvidable& rhs) const override {
70 const me& cast = (const me&) rhs;
71 return this->isFrom(cast.getContainer()) && _n == cast._n;
72 }
73
74private:
75 nidx _n;
76 tnarr& _own;
77};
Definition biteration.hpp:5
Definition narrIteration.hpp:8
ncnt stepForward(ncnt step) override
Definition narrIteration.hpp:30
to Top