#ifndef PYTHONIC_INCLUDE_UTILS_ARRAY_HELPER_HPP #define PYTHONIC_INCLUDE_UTILS_ARRAY_HELPER_HPP #include "pythonic/include/types/tuple.hpp" PYTHONIC_NS_BEGIN /* recursively return the value at the position given by `indices' in * the `self' "array like". It may be a sub array instead of real value. * indices[0] is the coordinate for the first dimension && indices[M-1] * is for the last one. */ template struct nget { template auto operator()(A &&self, types::array const &indices) -> decltype(nget()(std::forward(self)[0], indices)); template auto fast(A &&self, types::array const &indices) -> decltype(nget().fast(std::forward(self).fast(0), indices)); }; template <> struct nget<0> { template auto operator()(A &&self, types::array const &indices) -> decltype(std::forward(self)[indices[M - 1]]); template auto fast(A &&self, types::array const &indices) -> decltype(std::forward(self).fast(indices[M - 1])); }; PYTHONIC_NS_END #endif