On Jan 8, 2022, at 9:46 PM, Helmut Zeisel via Boost <boost@lists.boost.org> wrote:
Von: "Ivan Matek" <libbooze@gmail.com> On Fri, Jan 7, 2022 at 8:16 AM Helmut Zeisel via Boost <boost@lists.boost.org[mailto:boost@lists.boost.org]> wrote:
1) boost::multi_array_ref does not own the memory (which creates at least the memory overhead of one pointer) AFAIK boost::multi_array (no _ref suffix) owns memory, but it still does 1 heap allocation.
Yes.
What I have in mind, however, (as I mentioned already ealier) is some general adapter class
template<typename T, typename Index, typename Policy> struct array_index_adapter { ... };
that can apply different types of indices (row major, column major, triangular ...) to different containers (stack allocated, heap allocated, mixed like boost::small_vector etc).
You should look at mdspan, then. It’s been in use at various national labs for many years, and is being proposed for a future standard. A reference implementation is here: https://github.com/kokkos/mdspan — Marshall