Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
mundy::AMatrix< T, N, M, Accessor > Class Template Reference

Class for an NxM (num rows x num columns) matrix with arithmetic entries. More...

#include <Matrix.hpp>

Inheritance diagram for mundy::AMatrix< T, N, M, Accessor >:
[legend]

Public Member Functions

Constructors and destructor
constexpr AMatrix ()=default
 Default constructor. Assume elements are uninitialized.
constexpr AMatrix (const Accessor &accessor)
 Constructor from a given accessor.
template<typename... Args>
constexpr AMatrix (Args &&... args)
 Constructor to initialize all elements explicitly. Requires the number of arguments to be N and the type of each to be T. Only enabled if the Accessor has a N-argument constructor.
constexpr AMatrix (const std::initializer_list< T > &list)
 Constructor to initialize all elements via initializer list.
constexpr ~AMatrix ()=default
 Destructor.
constexpr AMatrix (const AMatrix< T, N, M, Accessor > &)=default
 Default copy constructor.
constexpr AMatrix (AMatrix< T, N, M, Accessor > &&)=default
 Default move constructor.
constexpr AMatrix< T, N, M, Accessor > & operator= (const AMatrix< T, N, M, Accessor > &)=default
 Default copy assignment operator.
constexpr AMatrix< T, N, M, Accessor > & operator= (AMatrix< T, N, M, Accessor > &&)=default
 Default move assignment operator.
template<ValidMatrixType OtherMatrixType>
constexpr AMatrix (const OtherMatrixType &other) &&(OtherMatrixType
 Deep copy constructor with different accessor or ownership.
template<ValidMatrixType OtherMatrixType>
constexpr AMatrix (OtherMatrixType &&other) &&(OtherMatrixType
 Deep move constructor with different accessor or ownership.
template<ValidMatrixType OtherMatrixType>
constexpr AMatrix< T, N, M, Accessor > & operator= (const OtherMatrixType &other)
 Deep copy assignment operator with different accessor or ownership.
template<ValidMatrixType OtherMatrixType>
constexpr AMatrix< T, N, M, Accessor > & operator= (OtherMatrixType &&other)
 Deep move assignment operator with different accessor or ownership.
constexpr AMatrix< T, N, M, Accessor > & operator= (const T value)
 Deep copy assignment operator from a single value.
Accessors
constexpr T & operator[] (size_t index)
 Element access operator via flat index.
constexpr const T & operator[] (size_t index) const
 Const element access operator via flat index.
constexpr T & operator() (size_t index)
 Element access operator via flat index.
constexpr const T & operator() (size_t index) const
 Const element access operator via flat index.
constexpr T & operator() (size_t row, size_t col)
 Element access operator via row and column indices.
constexpr const T & operator() (size_t row, size_t col) const
 Const element access operators.
constexpr decltype(auto) data ()
 Get the internal data accessor.
constexpr decltype(auto) data () const
 Get the internal data accessor.
constexpr deep_copy_t copy () const
 Get a deep copy of the matrix.
constexpr Vector< non_const_value_type, Ncopy_column (size_t col) const
 Get a copy of a certain column of the matrix.
constexpr Vector< non_const_value_type, Mcopy_row (size_t row) const
 Get a copy of a certain row of the matrix.
template<size_t col>
constexpr auto view_column ()
 Get a view into a certain column of the matrix.
template<size_t col>
constexpr auto view_column () const
 Get a view into a certain column of the matrix.
template<size_t row>
constexpr auto view_row ()
 Get a view into a certain row of the matrix.
template<size_t row>
constexpr auto view_row () const
 Get a view into a certain row of the matrix.
constexpr auto view_diagonal ()
 Get a view into the diagonal of the matrix.
constexpr auto view_diagonal () const
 Get a view into the diagonal of the matrix.
constexpr auto view_transpose ()
 Get a view into the transpose of the matrix.
constexpr auto view_transpose () const
 Get a view into the transpose of the matrix.
template<size_t row_to_exclude, size_t col_to_exclude>
constexpr auto view_minor ()
 Get a view into the matrix excluding a certain row and column This is known as the minor of the element at that row/column.
template<size_t row_to_exclude, size_t col_to_exclude>
constexpr auto view_minor () const
 Get a view into the matrix excluding a certain row and column This is known as the minor of the element at that row/column.
template<typename U>
constexpr auto cast () const
 Cast (and copy) the matrix to a different type.
Setters and modifiers
template<typename... Args>
constexpr void set (Args &&... args)
 Set all elements of the matrix.
template<ValidAccessor< T > OtherAccessor>
constexpr void set (const OtherAccessor &accessor)
 Set all elements of the matrix using an accessor.
template<typename... Args>
constexpr void set_row (const size_t &i, Args &&... args)
 Set a certain row of the matrix.
template<typename OtherAccessor>
constexpr void set_row (const size_t &i, const AVector< T, M, OtherAccessor > &row)
 Set a certain row of the matrix.
template<typename... Args>
constexpr void set_column (const size_t &j, Args &&... args)
 Set a certain column of the matrix.
template<typename OtherAccessor>
constexpr void set_column (const size_t &j, const AVector< T, N, OtherAccessor > &col)
 Set a certain column of the matrix.
constexpr void fill (const T &value)
 Fill all elements of the matrix with a single value.
Unary operators
constexpr AMatrix< T, N, Moperator+ () const
 Unary plus operator.
constexpr AMatrix< T, N, Moperator- () const
 Unary minus operator.
Addition and subtraction
template<typename U, ValidAccessor< U > OtherAccessor>
constexpr auto operator+ (const AMatrix< U, N, M, OtherAccessor > &other) const
 AMatrix-matrix addition.
template<typename U, ValidAccessor< U > OtherAccessor>
constexpr AMatrix< T, N, M, Accessor > & operator+= (const AMatrix< U, N, M, OtherAccessor > &other)
 Self-matrix addition.
template<typename U, ValidAccessor< U > OtherAccessor>
constexpr auto operator- (const AMatrix< U, N, M, OtherAccessor > &other) const
 AMatrix-matrix subtraction.
template<typename U, ValidAccessor< U > OtherAccessor>
constexpr AMatrix< T, N, M, Accessor > & operator-= (const AMatrix< U, N, M, OtherAccessor > &other)
 Self-matrix subtraction.
template<typename U>
constexpr auto operator+ (const U &scalar) const
 AMatrix-scalar addition.
template<typename U>
constexpr AMatrix< T, N, M, Accessor > & operator+= (const U &scalar)
 Self-scalar addition.
template<typename U>
constexpr auto operator- (const U &scalar) const
 AMatrix-scalar subtraction.
template<typename U>
constexpr AMatrix< T, N, M, Accessor > & operator-= (const U &scalar)
 Self-scalar subtraction.
Multiplication and division
template<typename U, typename OtherAccessor, size_t OtherN, size_t OtherM>
constexpr auto operator* (const AMatrix< U, OtherN, OtherM, OtherAccessor > &other) const
 AMatrix-matrix multiplication.
template<typename U, typename OtherAccessor, size_t OtherN, size_t OtherM>
constexpr AMatrix< T, N, M, Accessor > & operator*= (const AMatrix< U, OtherN, OtherM, OtherAccessor > &other)
 Self-matrix multiplication.
template<typename U, ValidAccessor< U > OtherAccessor>
constexpr auto operator* (const AVector< U, M, OtherAccessor > &other) const
 AMatrix-vector multiplication.
template<typename U>
constexpr auto operator* (const U &scalar) const
 AMatrix-scalar multiplication.
template<typename U>
constexpr AMatrix< T, N, M, Accessor > & operator*= (const U &scalar)
 Self-scalar multiplication.
template<typename U>
constexpr auto operator/ (const U &scalar) const
 AMatrix-scalar division.
template<typename U>
constexpr AMatrix< T, N, M, Accessor > & operator/= (const U &scalar)
 Self-scalar division.

Static Public Member Functions

Static methods
static constexpr AMatrix< T, N, Midentity ()
 Get the identity matrix.
static constexpr AMatrix< T, N, Mones ()
 Get the ones matrix.
static constexpr AMatrix< T, N, Mzeros ()
 Get the zero matrix.
template<typename U, size_t OtherN, typename OtherAccessor>
static constexpr AMatrix< T, N, Mdiagonal (const AVector< U, OtherN, OtherAccessor > &vec)
 Get a diagonal matrix from a vector.

Public Attributes

Internal data
storage< Accessor > accessor_
 Stored accessor via storage.

Friends

Friends <3
template<typename U, size_t OtherN, size_t OtherM, ValidAccessor< U > OtherAccessor>
class AMatrix
template<typename U, size_t OtherN, size_t OtherM, ValidAccessor< U > OtherAccessor>
std::ostream & operator<< (std::ostream &os, const AMatrix< U, OtherN, OtherM, OtherAccessor > &mat)

Type aliases

using value_type = T
 The type of the entries.
using non_const_value_type = std::remove_const_t<T>
 The non-const type of the entries.
using deep_copy_t = AMatrix<T, N, M>
 Deep copy type.
static constexpr size_t num_rows = N
 The number of rows.
static constexpr size_t num_cols = M
 The number of columns.

Detailed Description

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
class mundy::AMatrix< T, N, M, Accessor >
Template Parameters
TThe type of the entries.
AccessorThe type of the accessor.

This class is designed to be used with Kokkos. It is a simple NxM matrix with arithmetic entries implemented without for loops (to provide compile-time optimization for small matrix sizes). It is templated on the type of the entries, Accessor type, and the number of rows and columns. See Accessor.hpp for more details on the Accessor type requirements.

The goal of AMatrix is to be a lightweight class that can be used with Kokkos to perform mathematical operations on matrices in RNxM. It does not own or manage the underlying data, but rather it is templated on an Accessor type that provides access to the underlying data. This allows us to use AMatrix with Kokkos Views, raw pointers, or any other type that meets the ValidAccessor requirements without copying the data. This is especially important for GPU-compatible code.

AMatrices can be constructed by passing an accessor to the constructor. However, if the accessor has a N*M-argument constructor, then the AMatrix can also be constructed by passing the elements directly to the constructor (in row-major order). Similarly, if the accessor has an initializer list constructor, then the AMatrix can be constructed by passing an initializer list to the constructor. This is a convenience feature which makes working with the default accessor (Array<T, N*M>) easier. For example, the following are all valid ways to construct a AMatrix:

// Constructs an AMatrix with the default accessor (Array<int, 9>)
AMatrix<int, 3, 3> mat1({1, 2, 3, 4, 5, 6, 7, 8, 9});
AMatrix<int, 3, 3> mat2(1, 2, 3, 4, 5, 6, 7, 8, 9);
AMatrix<int, 3, 3> mat3(Array<int, 9>{1, 2, 3, 4, 5, 6, 7, 8, 9});
mat4.set(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Construct an AMatrix from a double array
double data[9] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};
Class for an NxM (num rows x num columns) matrix with arithmetic entries.
Definition Matrix.hpp:120
constexpr decltype(auto) data()
Get the internal data accessor.
Definition Matrix.hpp:314
constexpr void set(Args &&... args)
Set all elements of the matrix.
Definition Matrix.hpp:472
friend class AMatrix
Definition Matrix.hpp:717
A simplistic array type with a fixed size and type.
Definition Array.hpp:44
Note
Accessors may be owning or non-owning, that is irrelevant to the AMatrix class; however, these accessors should be lightweight such that they can be copied around without much overhead. Furthermore, the lifetime of the data underlying the accessor should be as long as the AMatrix that use it.

Member Typedef Documentation

◆ value_type

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
using mundy::AMatrix< T, N, M, Accessor >::value_type = T

◆ non_const_value_type

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
using mundy::AMatrix< T, N, M, Accessor >::non_const_value_type = std::remove_const_t<T>

◆ deep_copy_t

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
using mundy::AMatrix< T, N, M, Accessor >::deep_copy_t = AMatrix<T, N, M>

Constructor & Destructor Documentation

◆ AMatrix() [1/8]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
mundy::AMatrix< T, N, M, Accessor >::AMatrix ( )
constexprdefault
Note
This constructor is only enabled if the Accessor has a default constructor.

◆ AMatrix() [2/8]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
mundy::AMatrix< T, N, M, Accessor >::AMatrix ( const Accessor & accessor)
inlineexplicitconstexpr
Parameters
[in]accessorThe accessor.

◆ AMatrix() [3/8]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename... Args>
mundy::AMatrix< T, N, M, Accessor >::AMatrix ( Args &&... args)
inlineexplicitconstexpr

◆ AMatrix() [4/8]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
mundy::AMatrix< T, N, M, Accessor >::AMatrix ( const std::initializer_list< T > & list)
inlineconstexpr
Parameters
[in]listThe initializer list.

◆ ~AMatrix()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
mundy::AMatrix< T, N, M, Accessor >::~AMatrix ( )
constexprdefault

◆ AMatrix() [5/8]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
mundy::AMatrix< T, N, M, Accessor >::AMatrix ( const AMatrix< T, N, M, Accessor > & )
constexprdefault

◆ AMatrix() [6/8]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
mundy::AMatrix< T, N, M, Accessor >::AMatrix ( AMatrix< T, N, M, Accessor > && )
constexprdefault

◆ AMatrix() [7/8]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<ValidMatrixType OtherMatrixType>
mundy::AMatrix< T, N, M, Accessor >::AMatrix ( const OtherMatrixType & other) &&
inlineconstexpr

◆ AMatrix() [8/8]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<ValidMatrixType OtherMatrixType>
mundy::AMatrix< T, N, M, Accessor >::AMatrix ( OtherMatrixType && other) &&
inlineconstexpr

Member Function Documentation

◆ operator=() [1/5]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator= ( const AMatrix< T, N, M, Accessor > & )
constexprdefault

◆ operator=() [2/5]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator= ( AMatrix< T, N, M, Accessor > && )
constexprdefault

◆ operator=() [3/5]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<ValidMatrixType OtherMatrixType>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator= ( const OtherMatrixType & other)
inlineconstexpr

Copies the data from the other vector to our data. This is only enabled if T is not const.

◆ operator=() [4/5]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<ValidMatrixType OtherMatrixType>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator= ( OtherMatrixType && other)
inlineconstexpr

Moves the data from the other vector to our data. This is only enabled if T is not const.

◆ operator=() [5/5]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator= ( const T value)
inlineconstexpr
Parameters
[in]valueThe value to set all elements to.

◆ operator[]() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
T & mundy::AMatrix< T, N, M, Accessor >::operator[] ( size_t index)
inlineconstexpr
Parameters
[in]rowThe row index.

◆ operator[]() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
const T & mundy::AMatrix< T, N, M, Accessor >::operator[] ( size_t index) const
inlineconstexpr
Parameters
[in]rowThe row index.

◆ operator()() [1/4]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
T & mundy::AMatrix< T, N, M, Accessor >::operator() ( size_t index)
inlineconstexpr
Parameters
[in]indexThe flat index.

◆ operator()() [2/4]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
const T & mundy::AMatrix< T, N, M, Accessor >::operator() ( size_t index) const
inlineconstexpr
Parameters
[in]indexThe flat index.

◆ operator()() [3/4]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
T & mundy::AMatrix< T, N, M, Accessor >::operator() ( size_t row,
size_t col )
inlineconstexpr
Note
This operator is preferred over using m[row][col]
Parameters
[in]rowThe row index.
[in]colThe column index.

◆ operator()() [4/4]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
const T & mundy::AMatrix< T, N, M, Accessor >::operator() ( size_t row,
size_t col ) const
inlineconstexpr
Note
This operator is preferred over using m[row][col]
Parameters
[in]rowThe row index.
[in]colThe column index.

◆ data() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
decltype(auto) mundy::AMatrix< T, N, M, Accessor >::data ( )
inlineconstexpr

◆ data() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
decltype(auto) mundy::AMatrix< T, N, M, Accessor >::data ( ) const
inlineconstexpr

◆ copy()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
deep_copy_t mundy::AMatrix< T, N, M, Accessor >::copy ( ) const
inlineconstexpr

◆ copy_column()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
Vector< non_const_value_type, N > mundy::AMatrix< T, N, M, Accessor >::copy_column ( size_t col) const
inlineconstexpr
Parameters
[in]colThe column index.

◆ copy_row()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
Vector< non_const_value_type, M > mundy::AMatrix< T, N, M, Accessor >::copy_row ( size_t row) const
inlineconstexpr
Parameters
[in]rowThe row index.

◆ view_column() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<size_t col>
auto mundy::AMatrix< T, N, M, Accessor >::view_column ( )
inlineconstexpr
Template Parameters

in] col The column index.

◆ view_column() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<size_t col>
auto mundy::AMatrix< T, N, M, Accessor >::view_column ( ) const
inlineconstexpr
Template Parameters

in] col The column index.

◆ view_row() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<size_t row>
auto mundy::AMatrix< T, N, M, Accessor >::view_row ( )
inlineconstexpr
Template Parameters

in] row The row index.

◆ view_row() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<size_t row>
auto mundy::AMatrix< T, N, M, Accessor >::view_row ( ) const
inlineconstexpr
Template Parameters

in] row The row index.

◆ view_diagonal() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
auto mundy::AMatrix< T, N, M, Accessor >::view_diagonal ( )
inlineconstexpr

◆ view_diagonal() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
auto mundy::AMatrix< T, N, M, Accessor >::view_diagonal ( ) const
inlineconstexpr

◆ view_transpose() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
auto mundy::AMatrix< T, N, M, Accessor >::view_transpose ( )
inlineconstexpr

◆ view_transpose() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
auto mundy::AMatrix< T, N, M, Accessor >::view_transpose ( ) const
inlineconstexpr

◆ view_minor() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<size_t row_to_exclude, size_t col_to_exclude>
auto mundy::AMatrix< T, N, M, Accessor >::view_minor ( )
inlineconstexpr
Template Parameters

in] row The row index to drop.

Template Parameters

in] col The column index to drop

◆ view_minor() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<size_t row_to_exclude, size_t col_to_exclude>
auto mundy::AMatrix< T, N, M, Accessor >::view_minor ( ) const
inlineconstexpr
Template Parameters

in] row The row index to drop.

Template Parameters

in] col The column index to drop

◆ cast()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U>
auto mundy::AMatrix< T, N, M, Accessor >::cast ( ) const
inlineconstexpr

◆ set() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename... Args>
void mundy::AMatrix< T, N, M, Accessor >::set ( Args &&... args)
inlineconstexpr

◆ set() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<ValidAccessor< T > OtherAccessor>
void mundy::AMatrix< T, N, M, Accessor >::set ( const OtherAccessor & accessor)
inlineconstexpr
Parameters
[in]accessorA valid accessor.
Note
An AMatrix is also a valid accessor.

◆ set_row() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename... Args>
void mundy::AMatrix< T, N, M, Accessor >::set_row ( const size_t & i,
Args &&... args )
inlineconstexpr
Parameters
[in]iThe row index.

◆ set_row() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename OtherAccessor>
void mundy::AMatrix< T, N, M, Accessor >::set_row ( const size_t & i,
const AVector< T, M, OtherAccessor > & row )
inlineconstexpr
Parameters
[in]iThe row index.
[in]rowThe row vector.

◆ set_column() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename... Args>
void mundy::AMatrix< T, N, M, Accessor >::set_column ( const size_t & j,
Args &&... args )
inlineconstexpr
Parameters
[in]jThe column index.

◆ set_column() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename OtherAccessor>
void mundy::AMatrix< T, N, M, Accessor >::set_column ( const size_t & j,
const AVector< T, N, OtherAccessor > & col )
inlineconstexpr
Parameters
[in]jThe column index.
[in]colThe column vector.

◆ fill()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
void mundy::AMatrix< T, N, M, Accessor >::fill ( const T & value)
inlineconstexpr
Parameters
[in]valueThe value to set all elements to.

◆ operator+() [1/3]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
AMatrix< T, N, M > mundy::AMatrix< T, N, M, Accessor >::operator+ ( ) const
inlineconstexpr

◆ operator-() [1/3]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
AMatrix< T, N, M > mundy::AMatrix< T, N, M, Accessor >::operator- ( ) const
inlineconstexpr

◆ operator+() [2/3]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, ValidAccessor< U > OtherAccessor>
auto mundy::AMatrix< T, N, M, Accessor >::operator+ ( const AMatrix< U, N, M, OtherAccessor > & other) const
inlineconstexpr
Parameters
[in]otherThe other matrix.

◆ operator+=() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, ValidAccessor< U > OtherAccessor>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator+= ( const AMatrix< U, N, M, OtherAccessor > & other)
inlineconstexpr
Parameters
[in]otherThe other matrix.

◆ operator-() [2/3]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, ValidAccessor< U > OtherAccessor>
auto mundy::AMatrix< T, N, M, Accessor >::operator- ( const AMatrix< U, N, M, OtherAccessor > & other) const
inlineconstexpr
Parameters
[in]otherThe other matrix.

◆ operator-=() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, ValidAccessor< U > OtherAccessor>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator-= ( const AMatrix< U, N, M, OtherAccessor > & other)
inlineconstexpr
Parameters
[in]otherThe other matrix.

◆ operator+() [3/3]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U>
auto mundy::AMatrix< T, N, M, Accessor >::operator+ ( const U & scalar) const
inlineconstexpr
Parameters
[in]scalarThe scalar.

◆ operator+=() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator+= ( const U & scalar)
inlineconstexpr
Parameters
[in]scalarThe scalar.

◆ operator-() [3/3]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U>
auto mundy::AMatrix< T, N, M, Accessor >::operator- ( const U & scalar) const
inlineconstexpr
Parameters
[in]scalarThe scalar.

◆ operator-=() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator-= ( const U & scalar)
inlineconstexpr
Parameters
[in]scalarThe scalar.

◆ operator*() [1/3]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, typename OtherAccessor, size_t OtherN, size_t OtherM>
auto mundy::AMatrix< T, N, M, Accessor >::operator* ( const AMatrix< U, OtherN, OtherM, OtherAccessor > & other) const
inlineconstexpr
Parameters
[in]otherThe other matrix.

◆ operator*=() [1/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, typename OtherAccessor, size_t OtherN, size_t OtherM>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator*= ( const AMatrix< U, OtherN, OtherM, OtherAccessor > & other)
inlineconstexpr
Parameters
[in]otherThe other matrix.

◆ operator*() [2/3]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, ValidAccessor< U > OtherAccessor>
auto mundy::AMatrix< T, N, M, Accessor >::operator* ( const AVector< U, M, OtherAccessor > & other) const
inlineconstexpr
Parameters
[in]otherThe other vector.

◆ operator*() [3/3]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U>
auto mundy::AMatrix< T, N, M, Accessor >::operator* ( const U & scalar) const
inlineconstexpr
Parameters
[in]scalarThe scalar.

◆ operator*=() [2/2]

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator*= ( const U & scalar)
inlineconstexpr
Parameters
[in]scalarThe scalar.

◆ operator/()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U>
auto mundy::AMatrix< T, N, M, Accessor >::operator/ ( const U & scalar) const
inlineconstexpr
Parameters
[in]scalarThe scalar.

◆ operator/=()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U>
AMatrix< T, N, M, Accessor > & mundy::AMatrix< T, N, M, Accessor >::operator/= ( const U & scalar)
inlineconstexpr
Parameters
[in]scalarThe scalar.

◆ identity()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
constexpr AMatrix< T, N, M > mundy::AMatrix< T, N, M, Accessor >::identity ( )
inlinestaticconstexpr

◆ ones()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
constexpr AMatrix< T, N, M > mundy::AMatrix< T, N, M, Accessor >::ones ( )
inlinestaticconstexpr

◆ zeros()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
constexpr AMatrix< T, N, M > mundy::AMatrix< T, N, M, Accessor >::zeros ( )
inlinestaticconstexpr

◆ diagonal()

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, size_t OtherN, typename OtherAccessor>
constexpr AMatrix< T, N, M > mundy::AMatrix< T, N, M, Accessor >::diagonal ( const AVector< U, OtherN, OtherAccessor > & vec)
inlinestaticconstexpr
Parameters
[in]vecThe vector.

◆ AMatrix

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, size_t OtherN, size_t OtherM, ValidAccessor< U > OtherAccessor>
friend class AMatrix
friend

◆ operator<<

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
template<typename U, size_t OtherN, size_t OtherM, ValidAccessor< U > OtherAccessor>
std::ostream & operator<< ( std::ostream & os,
const AMatrix< U, OtherN, OtherM, OtherAccessor > & mat )
friend

Member Data Documentation

◆ accessor_

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
storage<Accessor> mundy::AMatrix< T, N, M, Accessor >::accessor_

◆ num_rows

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
size_t mundy::AMatrix< T, N, M, Accessor >::num_rows = N
staticconstexpr

◆ num_cols

template<typename T, size_t N, size_t M, ValidAccessor< T > Accessor>
size_t mundy::AMatrix< T, N, M, Accessor >::num_cols = M
staticconstexpr