#ifndef __cxz_xindex_cc_h__ #define __cxz_xindex_cc_h__ #include "xindex.h" namespace CNORXZ { /************** * XIndex * **************/ template XIndex::XIndex(const IndexPtr& i) : mI(i) {} template XIndex::XIndex(const IndexInterface& i) : mI(std::make_shared(i.THIS())) {} template XIndexPtr XIndex::copy() const { return std::make_shared>(mI->THIS()); } template SizeT XIndex::pos() const { return mI->pos(); } template XIndex& XIndex::operator=(SizeT pos) { *mI = pos; return *this; } template XIndex& XIndex::operator++() { ++(*mI); return *this; } template XIndex& XIndex::operator--() { --(*mI); 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; return *this; } template XIndex& XIndex::operator-=(Int n) { (*mI) -= n; return *this; } template SizeT XIndex::max() const { return mI->max(); } template IndexId<0> XIndex::id() const { return IndexId<0>(mI->id().id()); } 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); return out; } template Int XIndex::mm(PtrId idxPtrNum) { Int out = mI->mm(idxPtrNum); return out; } template SizeT XIndex::dim() const { return mI->dim(); } template RangePtr XIndex::range() const { return mI->range(); } template UPos XIndex::stepSize(const IndexId<0>& id) const { return mI->stepSize(id); } 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())); return *this; } template DXpr XIndex::ifor(const UPos& step, const DXpr& xpr) const { return DXpr(mI->ifor(step, xpr)); } } #endif