9#define TEMPL template <typename T, typename R, typename RSquare>
10#define ME tucontainable<T, R, RSquare>::iter
13 ME::iter(): me(nullptr) {}
16 ME::iter(
iteration* newStep): _iteration(newStep) { _nextToMatchParamType(iterable::NEXT); }
19 ME::iter(
const me& rhs) { _assign(rhs); }
22 typename ME ME::operator+(ncnt step) {
28 typename ME& ME::operator++() {
34 typename ME ME::operator++(
int) {
41 typename ME& ME::operator+=(ncnt step) {
47 RSquare ME::operator*() {
return (RSquare) _iteration->operator*(); }
50 typename std::remove_reference<R>::type ME::operator->() {
return get(); }
53 typename ME& ME::operator=(
const me& rhs) {
59 ME::operator nbool()
const {
return !isEnd(); }
62 nbool ME::isReversed()
const {
return _iteration ? _iteration->isReversed() :
false; }
65 void ME::rel() { _iteration TO(rel()); }
68 nbool ME::isFrom(
const tucontainable& it)
const {
return _iteration ? _iteration->isFrom(it) :
false; }
71 nbool ME::isEnd()
const {
return _iteration ? _iteration->isEnd() :
true; }
74 ncnt ME::_step(
typename iterable::iterationType type, ncnt step) {
75 WHEN_NUL(_iteration).ret(0);
77 for(
int n = 0; n < step; n++) {
78 if(_iterate(type, step) <= 0)
return n;
79 _nextToMatchParamType(type);
86 ncnt ME::next(ncnt step) {
return _step(iterable::NEXT, step); }
89 ncnt ME::prev(ncnt step) {
return _step(iterable::PREV, step); }
92 ncnt ME::stepForward(ncnt step) {
return _step(iterable::FORWARD, step); }
95 ncnt ME::stepBackward(ncnt step) {
return _step(iterable::BACKWARD, step); }
98 R ME::get() {
return _iteration ? (R) _iteration->get() : R{}; }
101 tucontainable<T, R, RSquare>* ME::getContainer() {
return _iteration ? _iteration->getContainer() :
nullptr; }
104 typename ME& ME::_assign(
const me& rhs) {
105 _iteration.bind(rhs._iteration ? (
iteration*) rhs._iteration->clone() : nullptr);
110 nbool ME::_onSame(
const typeProvidable& rhs)
const {
111 const me& cast = (
const me&) rhs;
112 return _iteration == cast._iteration;
116 void ME::_nextToMatchParamType(
typename iterable::iterationType type) {
118 WHEN(!typeTrait<R>::isNul(get())) .ret();
124 ncnt ME::_iterate(
typename iterable::iterationType type, ncnt step) {
126 case iterable::FORWARD:
return _iteration->stepForward(1);
127 case iterable::BACKWARD:
return _iteration->stepBackward(1);
128 case iterable::PREV:
return _iteration->prev(1);
130 case iterable::NEXT:
return _iteration->next(1);
Definition biteration.hpp:5