6#include "core/builtin/container/native/tnucontainer.inl"
13#define TEMPL template <typename T, typename TACTIC>
14#define ME tnarr<T, TACTIC>
20 ME::tnarr(
const me& rhs): super(rhs) { add(rhs); }
23 ncnt ME::len()
const {
return _vec.size(); };
26 nbool ME::in(nidx n)
const {
return 0 <= n && n < len(); }
30 WHEN(!in(n)) .exErr(OUT_OF_RANGE, n, len()).ret(
nullptr);
32 binder& ret = _vec[n];
33 return (T*) ret.get();
37 nbool ME::set(
const iter& at,
const T& new1) {
39 WHEN(cast.isEnd()) .ret(
false);
41 return set(cast._n, new1);
45 nbool ME::set(nidx n,
const T& new1) {
46 WHEN(!in(n)) .exErr(OUT_OF_RANGE, n, len()).ret(
false);
48 return _vec[n].bind(new1);
52 nbool ME::add(
const iter& e,
const T& new1) {
54 return add(cast._n, new1);
58 nbool ME::add(nidx n,
const T& new1) {
59 WHEN(n < 0 || n > len()) .exErr(OUT_OF_RANGE, n, len()).ret(
false);
61 _vec.insert(_vec.begin() + n, wrap(new1));
66 void ME::add(
const iter& here,
const iter& from,
const iter& to) {
67 WHEN(!from.isFrom(to.getContainer())) .exErr(ITERATOR_NOT_BELONG_TO_CONTAINER).ret();
72 WHEN(hereCast._n < 0 || hereCast._n > len())
75 auto fromBegin = ((me*) from.getContainer())->_vec.begin();
76 _vec.insert(_vec.begin() + hereCast._n, fromBegin + fromCast._n, fromBegin + toCast._n);
80 nbool ME::del(
const iter& at) {
82 WHEN(cast.isEnd()) .ret(
false);
88 nbool ME::del(nidx n) {
89 WHEN(!in(n)) .exErr(OUT_OF_RANGE, n, len()).ret(
false);
91 _vec.erase(_vec.begin() + n);
96 nbool ME::del(
const iter& from,
const iter& end) {
100 nidx fromN = fromIter.isEnd() ? len() - 1 : fromIter._n;
101 ncnt cnt = endIter._n - fromN;
102 WHEN(cnt <= 0) .ret(
false);
104 for(
int n = 0; n < cnt; n++)
105 _vec.erase(_vec.begin() + fromN);
110 void ME::rel() { _vec.clear(); }
113 void ME::onCloneDeep(
const clonable& from) {
114 const me& rhs = (
const me&) from;
116 for(
const auto& e: rhs)
117 add((T*) e.cloneDeep());
121 std::string ME::asStr()
const {
124 for(
const auto& e: *this) {
125 ret += (first ?
"" :
",") + e.getType().getName();
133 typename ME::iteration* ME::_onMakeIteration(ncnt step, nbool isReversed)
const {
134 me* unconst =
const_cast<me*
>(
this);
139 typename ME::narrIteration* ME::_getIteration(
const iter& it) {
140 WHEN(!it.isFrom(*
this)) .exErr(ITERATOR_NOT_BELONG_TO_CONTAINER).ret(
nullptr);
142 WHEN_NUL(ret).exErr(ITERATOR_IS_NUL).ret(
nullptr);
Bidirectional iterator for key-value containers
Definition biter.hpp:10
Definition narrIteration.hpp:8