#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((*mMa)(inds...)) { /* auto ll = mkILoop(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})); */ } template OpH> DynamicOuterOp::get(const DExtT& pos) const { mOp.get(pos.expl()); //mL(); // execute assignment... care about threads!!! return mProto.mOp; // empty } template DynamicOperationBase>>& DynamicOuterOp::set(const DExtT& pos) { mOp.set(pos.expl()); return *this; } template DExtT DynamicOuterOp::rootSteps(std::intptr_t iPtrNum) const { return DExtT(mkDExt(mkExtT(mOp.rootSteps(iPtrNum))),None(0)); } template DynamicExpression DynamicOuterOp::loop(const DynamicExpression& exp) const { return mOp.loop(exp); } template const OpH>* DynamicOuterOp::data() const { return &mProto; } template std::shared_ptr>>> DynamicOuterOp::deepCopy() const { return std::make_shared>(*this); } template DynamicOuterOp mkDynOutOp(const Operation& op, const std::shared_ptr&... inds) { return DynamicOuterOp(op, inds...); } } // namespace MultiArrayTools