Creating a simple 2D array with mdspan requires multiple steps because mdspan is non-owning.
// Create a mapping:
layout_left map(extents(N,M));
// Create an allocation
vector<int> data(map.required_span_size());
// Create mdspan:
mdspan a(data.data(), map);
mdarray is a multidimensional array with value-semantics and makes the above simpler
// default layout
mdarray a(N,M);
// other layout
mdarray b(layout_left(extents(N,M)));
What aspects of mdspan does mdarray have
mdarray has the
element_type,
extents and
layout policy aspects of mdspan
The accessor policy is replaced by a container type.
template<class ElementType, class Extents, class Layout, class Accessor>
class mdspan {
public:
...
template<class ... Indices>
reference operator [] (Indices ... idx) const { return acc_.access(ptr_, map_(idx...)); }
private:
typename Accessor::data_handle_type ptr_;
Layout::mapping<Extents> map_;
Accessor acc_;
};
template<class ElementType, class Extents, class Layout, class Container>
class mdarray {
public:
...
template<class ... Indices>
reference operator [] (Indices ... idx) { return ctr_[map_(idx...)]); }
private:
Layout::mapping<Extents> map_;
Container ctr_;
};
This means mdarray does not have the kind of access modality customization point functionality of mdspan, but that functionality is anyway intended for local specialization of accesses, and thus more suited for the view-like class.
Constructors
have constructors similar to mdspan
indicies
extents
mapping
Combine those with copy from container, and move from container
Combine all of those with add optional allocator
Move behavior
relies on containers move behavior
preconditions on problematic functions to check that container size is larger or equal to required_span_size()
Super Brief
mdarray
introductionWhy we want
mdarray
Creating a simple 2D array with
mdspan
requires multiple steps becausemdspan
is non-owning.mdarray
is a multidimensional array with value-semantics and makes the above simplerWhat aspects of
mdspan
doesmdarray
havemdarray
has theelement_type
,extents
andmdspan
The accessor policy is replaced by a container type.
This means
mdarray
does not have the kind of access modality customization point functionality ofmdspan
, but that functionality is anyway intended for local specialization of accesses, and thus more suited for the view-like class.Constructors
extents
Move behavior
required_span_size()