// -*- C++ -*- #include #include #include #include namespace MultiArrayHelper { template struct PackNum { template static IndexBase& getIndex(IndexType& in, size_t n) { if(n == N){ return in.getIndex(); } else { return PackNum::getIndex(in, n); } } template static const IndexBase& getIndex(const IndexType& in, size_t n) { if(n == N){ return in.getIndex(); } else { return PackNum::getIndex(in, n); } } template static inline void pp(std::tuple...>& ip) { auto& si = *std::get(ip); if(si.pos() == si.last()){ si = 0; PackNum::pp(index); } else { ++si; } } template static inline void mm(std::tuple...>& ip) { auto& si = *std::get(ip); if(si.pos() == si.atEdge()){ si = si.max(); PackNum::mm(index); } else { --si; } } template static size_t getSize(const RangeTuple& rt) { return std::get(rt).size() * PackNum::getSize(rt); } template