#ifndef __cxz_xindex_cc_h__ #define __cxz_xindex_cc_h__ #include "xindex.h" namespace CNORXZ { /************** * XIndex * **************/ template XIndex::XIndex(const IndexPtr& i) : XIndexBase(i->pos()), mI(i) {} template XIndex::XIndex(const IndexInterface& i) : XIndexBase(i.pos()), mI(std::make_shared(i.THIS())) {} template XIndex& XIndex::operator=(SizeT pos) { *mI = pos; IB::mPos = mI->pos(); return *this; } template XIndex& XIndex::operator++() { ++(*mI); IB::mPos = mI->pos(); return *this; } template XIndex& XIndex::operator--() { --(*mI); IB::mPos = mI->pos(); return *this; } template Sptr XIndex::operator+(Int n) const { return std::make_shared>(*mI + n); } template Sptr XIndex::operator-(Int n) const { return std::make_shared>(*mI - n); } template XIndex& XIndex::operator+=(Int n) { (*mI) += n; IB::mPos = mI->pos(); return *this; } template XIndex& XIndex::operator-=(Int n) { (*mI) -= n; IB::mPos = mI->pos(); return *this; } template DType XIndex::operator*() const { return DType(*(*mI)); } template DType XIndex::operator->() const { return DType(*(*mI)); } template Int XIndex::pp(PtrId idxPtrNum) { Int out = mI->pp(idxPtrNum); IB::mPos = mI->pos(); return out; } template Int XIndex::mm(PtrId idxPtrNum) { Int out = mI->mm(idxPtrNum); IB::mPos = mI->pos(); return out; } template SizeT XIndex::dim() const { return mI->dim(); } template RangePtr XIndex::range() const { return mI->range(); } template SizeT XIndex::getStepSize(SizeT n) const { return mI->getStepSize(n); } template String XIndex::stringMeta() const { return mI->stringMeta(); } template DType XIndex::meta() const { return DType(mI->meta()); } template XIndexBase& XIndex::at(const DType& meta) { // check!!! mI->at(std::any_cast(meta.get())); IB::mPos = mI->pos(); return *this; } /* template DExpr XIndex::ifor(SizeT step, DExpr ex) const { return mI->ifor(step, ex); } template DExpr XIndex::iforh(SizeT step, DExpr ex) const { return mI->iforh(step, ex); } */ } #endif