#include "dynamic_operation.h" #include "helper_tools.h" namespace MultiArrayTools { template T DynamicOperation::get(const DExtT& pos) const { return mOp.get(pos.expl()); } template DynamicOperationBase& DynamicOperation::set(const DExtT& pos) { mOp.set(pos.expl()); return *this; } template DExtT DynamicOperation::rootSteps(std::intptr_t iPtrNum) const { return DExtT(mkDExt(mkExtT(mOp.rootSteps(iPtrNum))),None(0)); } template DynamicExpression DynamicOperation::loop(const DynamicExpression& exp) const { return mOp.loop(exp); } template const T* DynamicOperation::data() const { return mOp.data(); } template std::shared_ptr> DynamicOperation::deepCopy() const { return std::make_shared>(*this); } template DynamicOuterOp::DynamicOuterOp(const Operation& op, const std::shared_ptr&... inds) : mOp(op), mMa(std::make_shared>(mkArray(inds->range()...))), mProto(OperationRoot(*mMa,inds...)), mL(std::make_tuple(mProto.mOp,mOp), std::make_tuple(inds...), std::make_tuple(mMa), std::make_tuple(mProto.mOp.assign( mOp )), std::array({0}), std::array({0})) { VCHECK(reinterpret_cast(mProto.mOp.data())); VCHECK(reinterpret_cast(mMa->data())); } template OpH> DynamicOuterOp::get(const DExtT& pos) const { CHECK; //mOp.get(pos.expl()); //mL(0,pos.expl()); // execute assignment... care about threads!!! return mProto.mOp; // empty } template DynamicOperationBase>>& DynamicOuterOp::set(const DExtT& pos) { CHECK; mOp.set(pos.expl()); return *this; } template DExtT DynamicOuterOp::rootSteps(std::intptr_t iPtrNum) const { CHECK; return DExtT(mkDExt(mkExtT(mL.rootSteps(iPtrNum))),None(0)); } template DynamicExpression DynamicOuterOp::loop(const DynamicExpression& exp) const { CHECK; return mOp.loop(exp); // ???!! } template const OpH>* DynamicOuterOp::data() const { CHECK; return &mProto; } template std::shared_ptr>>> DynamicOuterOp::deepCopy() const { CHECK; return std::make_shared>(*this); } template DynamicOuterOp mkDynOutOp(const Operation& op, const std::shared_ptr&... inds) { return DynamicOuterOp(op, inds...); } } // namespace MultiArrayTools