#pragma once #include #include #include struct ArrayDescriptor { ArrayDescriptor(intptr_t ndim): ndim(ndim), shape(ndim, 1), strides(ndim, 0) { } intptr_t ndim; intptr_t element_size; std::vector shape, strides; }; template struct StridedView2D { std::array shape; std::array strides; T* data; T& operator()(intptr_t i, intptr_t j) { return data[i * strides[0] + j * strides[1]]; } };