cppqed-multidiagonal 0.4.0
Multidiagonal sparse operator algebra for C++QED
Loading...
Searching...
No Matches
cppqedutils::MultiArray< T, RANK > Class Template Reference

Owning, move-only, rank-RANK array. Non-copyable; follows value semantics regarding constness. More...

#include <multidiagonal/MultiArray.h>

Inheritance diagram for cppqedutils::MultiArray< T, RANK >:
Collaboration diagram for cppqedutils::MultiArray< T, RANK >:

Public Types

using StorageType = multiarray::StorageType< T >
 

Public Member Functions

 MultiArray (const MultiArray &)=delete
 
MultiArray & operator= (const MultiArray &)=delete
 
 MultiArray (MultiArray &&)=default
 
MultiArray & operator= (MultiArray &&)=default
 
 MultiArray (Extents< RANK > extents, auto initializer)
 Primary constructor. initializer is a callable (size_t totalElements) -> StorageType.
 
 MultiArray (Extents< RANK > extents)
 Constructs an array with given extents and unspecified contents (see multiarray::noInit).
 
template<typename TT >
void assignTo (MultiArrayConstView< TT, RANK > macv)
 Element-by-element assignment from a const view of compatible type.
 
MultiArrayConstView< T, RANK > constView () const
 Explicit const view, useful where implicit conversion is suppressed.
 
auto mutableView ()
 Explicit mutable view.
 
 operator MultiArrayView< T, RANK > ()
 Implicit conversion to a mutable view.
 
T & operator() (auto &&... i)
 Non-const element access, forwarding to the base const overload via const_cast.
 
const T & operator() (auto &&... i) const
 Const element access. This overload is needed to prevent the non-const overload from shadowing the base.
 
StorageType & dataStorage ()
 Direct access to the underlying storage vector.
 
const StorageType & dataStorage () const
 
- Public Member Functions inherited from cppqedutils::MultiArrayView< T, RANK >
 MultiArrayView (const MultiArrayView &)=default
 
 MultiArrayView (MultiArrayView &&)=default
 
 MultiArrayView ()=default
 
MultiArrayView & operator= (const MultiArrayView &)=default
 
MultiArrayView & operator= (MultiArrayView &&)=default
 
 MultiArrayView (Extents< RANK > extents, Extents< RANK > strides, size_t offset, auto &&... dataView)
 Constructs a view with explicit extents, strides, offset, and data span. The offset accumulates from prior slicing operations.
 
 operator MultiArrayView< const T, RANK > () const
 Implicit conversion to a const view (MultiArrayView<const T, RANK>).
 
void checkBounds (std::convertible_to< size_t > auto ... i) const
 Bounds-check all indices against extents. Active only in debug builds (NDEBUG not defined).
 
T & operator() (Extents< RANK > idx) const
 Subscript by Extents<RANK> multi-index. Always const — does not modify the view, only potentially the underlying data.
 
T & operator() (std::convertible_to< size_t > auto ... i) const
 Subscript by individual indices, one per rank. Requires sizeof...(i) == RANK.
 
T & operator() (std::convertible_to< size_t > auto i) const
 Rank-1 specialization: single-index subscript.
 
T & operator() (std::convertible_to< size_t > auto i, std::convertible_to< size_t > auto j) const
 Rank-2 specialization: two-index subscript.
 
auto operator() (std::convertible_to< size_t > auto i, multiarray::Placeholder) const
 Rank-2 row slice: mav(i, _) returns a rank-1 view of row i.
 
auto operator() (multiarray::Placeholder, std::convertible_to< size_t > auto j) const
 Rank-2 column slice: mav(_, j) returns a rank-1 view of column j.
 

Friends

class boost::serialization::access
 
MultiArray copy (const MultiArray &ma)
 Named copy: constructs a new owning array with a deep copy of ma's data.
 
void tag_invoke (const json::value_from_tag &, json::value &jv, const MultiArray &ma)
 Boost.JSON serialization: emits {"extents": [...], "data": [...]}.
 
MultiArray tag_invoke (const json::value_to_tag< MultiArray > &, const json::value &jv)
 Boost.JSON deserialization: reconstructs from {"extents": [...], "data": [...]}.
 

Additional Inherited Members

- Public Attributes inherited from cppqedutils::MultiArrayView< T, RANK >
Extents< RANK > extents
 
Extents< RANK > strides
 
size_t offset
 
std::span< T > dataView
 

Detailed Description

template<typename T, size_t RANK>
requires ( !std::is_const_v<T> )
class cppqedutils::MultiArray< T, RANK >

Owning, move-only, rank-RANK array. Non-copyable; follows value semantics regarding constness.

Derives from MultiArrayConstView<T,RANK> to expose the full view interface. The dataView span in the base is re-seated to data_ after each construction or move.

Note
The storage type std::vector<T> may eventually be replaced by kokkos::View or std::valarray for better HPC integration.

Member Typedef Documentation

◆ StorageType

Constructor & Destructor Documentation

◆ MultiArray() [1/4]

template<typename T , size_t RANK>
cppqedutils::MultiArray< T, RANK >::MultiArray ( const MultiArray< T, RANK > &  )
delete

◆ MultiArray() [2/4]

template<typename T , size_t RANK>
cppqedutils::MultiArray< T, RANK >::MultiArray ( MultiArray< T, RANK > &&  )
default

◆ MultiArray() [3/4]

template<typename T , size_t RANK>
cppqedutils::MultiArray< T, RANK >::MultiArray ( Extents< RANK >  extents,
auto  initializer 
)
inline

Primary constructor. initializer is a callable (size_t totalElements) -> StorageType.

◆ MultiArray() [4/4]

template<typename T , size_t RANK>
cppqedutils::MultiArray< T, RANK >::MultiArray ( Extents< RANK >  extents)
inlineexplicit

Constructs an array with given extents and unspecified contents (see multiarray::noInit).

Member Function Documentation

◆ assignTo()

template<typename T , size_t RANK>
template<typename TT >
void cppqedutils::MultiArray< T, RANK >::assignTo ( MultiArrayConstView< TT, RANK >  macv)
inline

Element-by-element assignment from a const view of compatible type.

Note
Not operator= — this is an expensive operation.
assignTo copies the source into *this (the name is counterintuitive).

◆ constView()

template<typename T , size_t RANK>
MultiArrayConstView< T, RANK > cppqedutils::MultiArray< T, RANK >::constView ( ) const
inline

Explicit const view, useful where implicit conversion is suppressed.

◆ dataStorage() [1/2]

template<typename T , size_t RANK>
StorageType & cppqedutils::MultiArray< T, RANK >::dataStorage ( )
inline

Direct access to the underlying storage vector.

◆ dataStorage() [2/2]

template<typename T , size_t RANK>
const StorageType & cppqedutils::MultiArray< T, RANK >::dataStorage ( ) const
inline

◆ mutableView()

template<typename T , size_t RANK>
auto cppqedutils::MultiArray< T, RANK >::mutableView ( )
inline

Explicit mutable view.

◆ operator MultiArrayView< T, RANK >()

template<typename T , size_t RANK>
cppqedutils::MultiArray< T, RANK >::operator MultiArrayView< T, RANK > ( )
inline

Implicit conversion to a mutable view.

◆ operator()() [1/2]

template<typename T , size_t RANK>
T & cppqedutils::MultiArray< T, RANK >::operator() ( auto &&...  i)
inline

Non-const element access, forwarding to the base const overload via const_cast.

◆ operator()() [2/2]

template<typename T , size_t RANK>
const T & cppqedutils::MultiArray< T, RANK >::operator() ( auto &&...  i) const
inline

Const element access. This overload is needed to prevent the non-const overload from shadowing the base.

◆ operator=() [1/2]

template<typename T , size_t RANK>
MultiArray & cppqedutils::MultiArray< T, RANK >::operator= ( const MultiArray< T, RANK > &  )
delete

◆ operator=() [2/2]

template<typename T , size_t RANK>
MultiArray & cppqedutils::MultiArray< T, RANK >::operator= ( MultiArray< T, RANK > &&  )
default

Friends And Related Symbol Documentation

◆ boost::serialization::access

template<typename T , size_t RANK>
friend class boost::serialization::access
friend

◆ copy

template<typename T , size_t RANK>
MultiArray copy ( const MultiArray< T, RANK > &  ma)
friend

Named copy: constructs a new owning array with a deep copy of ma's data.

◆ tag_invoke [1/2]

template<typename T , size_t RANK>
void tag_invoke ( const json::value_from_tag &  ,
json::value &  jv,
const MultiArray< T, RANK > &  ma 
)
friend

Boost.JSON serialization: emits {"extents": [...], "data": [...]}.

◆ tag_invoke [2/2]

template<typename T , size_t RANK>
MultiArray tag_invoke ( const json::value_to_tag< MultiArray< T, RANK > > &  ,
const json::value &  jv 
)
friend

Boost.JSON deserialization: reconstructs from {"extents": [...], "data": [...]}.


The documentation for this class was generated from the following file: