LibraryLink Utilities  3.0.1
Modern C++ wrapper over LibraryLink and WSTP
LLU::MArrayDimensions Class Reference

Description

Helper class that carries meta-information about container's size and dimensions.

#include <MArrayDimensions.h>

Public Member Functions

 MArrayDimensions ()=default
 Default constructor. More...
 
 MArrayDimensions (std::initializer_list< mint > dimensions)
 Constructs MArrayDimensions from a list of dimensions. More...
 
template<typename T , typename = typename std::enable_if_t<std::is_integral_v<T>>>
 MArrayDimensions (const T *dimensions, mint rank)
 Constructs MArrayDimensions from a C-style list (raw pointer + length) More...
 
template<typename T , typename = typename std::enable_if_t<std::is_integral_v<T>>>
 MArrayDimensions (const std::vector< T > &dimensions)
 Constructs MArrayDimensions from a vector of dimensions. More...
 
template<typename InputIter , typename = enable_if_input_iterator<InputIter>>
 MArrayDimensions (InputIter dimsBegin, InputIter dimsEnd)
 Create new dimensions from a range. More...
 
mint rank () const noexcept
 Get container rank. More...
 
const mint * data () const noexcept
 Get raw pointer to container dimensions. More...
 
const std::vector< mint > & get () const noexcept
 Get container dimensions in the form of const& to std::vector. More...
 
mint get (mint dim) const
 Get single dimension. More...
 
mint getIndex (const std::vector< mint > &indices) const
 Convert coordinates of an element in a multidimensional MArray to the corresponding index in a flat list of elements. More...
 
mint getIndexChecked (const std::vector< mint > &indices) const
 Check if given coordinates are valid for this container. More...
 
mint getIndexChecked (mint index) const
 Check if given index is valid i.e. More...
 
mint flatCount () const noexcept
 Get total number of elements. More...
 

Constructor & Destructor Documentation

◆ MArrayDimensions() [1/5]

LLU::MArrayDimensions::MArrayDimensions ( )
default

Default constructor.

◆ MArrayDimensions() [2/5]

LLU::MArrayDimensions::MArrayDimensions ( std::initializer_list< mint >  dimensions)

Constructs MArrayDimensions from a list of dimensions.

Parameters
[in]dimensions- list of MArray dimensions
Exceptions
ErrorName::DimensionsError- if dims are invalid
ErrorName::FunctionError- if any of Wolfram*Library structures was not initialized

◆ MArrayDimensions() [3/5]

template<typename T , typename >
LLU::MArrayDimensions::MArrayDimensions ( const T *  dimensions,
mint  rank 
)

Constructs MArrayDimensions from a C-style list (raw pointer + length)

Parameters
[in]dimensions- pointer to the memory where consecutive dimensions are stored
[in]rank- length of the dims array
Exceptions
ErrorName::DimensionsError- if dims are invalid
ErrorName::FunctionError- if any of Wolfram*Library structures was not initialized

◆ MArrayDimensions() [4/5]

template<typename T , typename >
LLU::MArrayDimensions::MArrayDimensions ( const std::vector< T > &  dimensions)
explicit

Constructs MArrayDimensions from a vector of dimensions.

Parameters
[in]dimensions- vector with MArray dimensions
Exceptions
ErrorName::DimensionsError- if dims are invalid
ErrorName::FunctionError- if any of Wolfram*Library structures was not initialized

◆ MArrayDimensions() [5/5]

template<typename InputIter , typename >
LLU::MArrayDimensions::MArrayDimensions ( InputIter  dimsBegin,
InputIter  dimsEnd 
)

Create new dimensions from a range.

Template Parameters
InputIter- any type that is an input iterator
Parameters
dimsBegin- range begin
dimsEnd- range end

Member Function Documentation

◆ data()

const mint* LLU::MArrayDimensions::data ( ) const
inlinenoexcept

Get raw pointer to container dimensions.

◆ flatCount()

mint LLU::MArrayDimensions::flatCount ( ) const
inlinenoexcept

Get total number of elements.

Returns
flattened length of the container

◆ get() [1/2]

const std::vector<mint>& LLU::MArrayDimensions::get ( ) const
inlinenoexcept

Get container dimensions in the form of const& to std::vector.

◆ get() [2/2]

mint LLU::MArrayDimensions::get ( mint  dim) const
inline

Get single dimension.

Parameters
[in]dim- index of desired dimension
Exceptions
indexError()- if dim is out-of-bounds

◆ getIndex()

mint LLU::MArrayDimensions::getIndex ( const std::vector< mint > &  indices) const

Convert coordinates of an element in a multidimensional MArray to the corresponding index in a flat list of elements.

Parameters
[in]indices- vector with coordinates of desired data element

◆ getIndexChecked() [1/2]

mint LLU::MArrayDimensions::getIndexChecked ( const std::vector< mint > &  indices) const

Check if given coordinates are valid for this container.

Parameters
[in]indices- vector with coordinates of desired data element
Exceptions
indexError()- if indices are out-of-bounds

◆ getIndexChecked() [2/2]

mint LLU::MArrayDimensions::getIndexChecked ( mint  index) const

Check if given index is valid i.e.

it does not exceed container bounds

Parameters
index- index of the desired element
Returns
index if it is valid, otherwise an exception is thrown

◆ rank()

mint LLU::MArrayDimensions::rank ( ) const
inlinenoexcept

Get container rank.