mdds
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
mdds::multi_type_matrix< _MtxTrait > Class Template Reference

#include <multi_type_matrix.hpp>

Classes

struct  element_block_node_type
 
struct  size_pair_type
 

Public Types

typedef matrix_trait::string_element_block string_block_type
 
typedef matrix_trait::integer_element_block integer_block_type
 
typedef string_block_type::value_type string_type
 
typedef integer_block_type::value_type integer_type
 
typedef size_t size_type
 
typedef store_type::position_type position_type
 
typedef store_type::const_position_type const_position_type
 
typedef store_type::element_block_type element_block_type
 
typedef mtv::boolean_element_block boolean_block_type
 
typedef mtv::numeric_element_block numeric_block_type
 

Public Member Functions

 multi_type_matrix ()
 
 multi_type_matrix (size_type rows, size_type cols)
 
template<typename _T >
 multi_type_matrix (size_type rows, size_type cols, const _T &value)
 
template<typename _T >
 multi_type_matrix (size_type rows, size_type cols, const _T &it_begin, const _T &it_end)
 
 multi_type_matrix (const multi_type_matrix &r)
 
 ~multi_type_matrix ()
 
bool operator== (const multi_type_matrix &other) const
 
bool operator!= (const multi_type_matrix &other) const
 
multi_type_matrixoperator= (const multi_type_matrix &r)
 
position_type position (size_type row, size_type col)
 
position_type position (const position_type &pos_hint, size_type row, size_type col)
 
const_position_type position (size_type row, size_type col) const
 
const_position_type position (const const_position_type &pos_hint, size_type row, size_type col) const
 
size_pair_type matrix_position (const const_position_type &pos) const
 
position_type end_position ()
 
const_position_type end_position () const
 
mtm::element_t get_type (const const_position_type &pos) const
 
mtm::element_t get_type (size_type row, size_type col) const
 
double get_numeric (size_type row, size_type col) const
 
double get_numeric (const const_position_type &pos) const
 
integer_type get_integer (size_type row, size_type col) const
 
integer_type get_integer (const const_position_type &pos) const
 
bool get_boolean (size_type row, size_type col) const
 
bool get_boolean (const const_position_type &pos) const
 
const string_type & get_string (size_type row, size_type col) const
 
const string_type & get_string (const const_position_type &pos) const
 
template<typename _T >
_T get (size_type row, size_type col) const
 
void set_empty (size_type row, size_type col)
 
void set_empty (size_type row, size_type col, size_type length)
 
position_type set_empty (const position_type &pos)
 
void set_column_empty (size_type col)
 
void set_row_empty (size_type row)
 
void set (size_type row, size_type col, double val)
 
position_type set (const position_type &pos, double val)
 
void set (size_type row, size_type col, bool val)
 
position_type set (const position_type &pos, bool val)
 
void set (size_type row, size_type col, const string_type &str)
 
position_type set (const position_type &pos, const string_type &str)
 
void set (size_type row, size_type col, integer_type val)
 
position_type set (const position_type &pos, integer_type val)
 
template<typename _T >
void set (size_type row, size_type col, const _T &it_begin, const _T &it_end)
 
template<typename _T >
position_type set (const position_type &pos, const _T &it_begin, const _T &it_end)
 
template<typename _T >
void set_column (size_type col, const _T &it_begin, const _T &it_end)
 
size_pair_type size () const
 
multi_type_matrixtranspose ()
 
void copy (const multi_type_matrix &src)
 
template<typename _T >
void copy (size_type rows, size_type cols, const _T &it_begin, const _T &it_end)
 
void resize (size_type rows, size_type cols)
 
template<typename _T >
void resize (size_type rows, size_type cols, const _T &value)
 
void clear ()
 
bool numeric () const
 
bool empty () const
 
void swap (multi_type_matrix &r)
 
template<typename _Func >
_Func walk (_Func func) const
 
template<typename _Func >
_Func walk (_Func func, const size_pair_type &start, const size_pair_type &end) const
 
template<typename _Func >
_Func walk (_Func func, const multi_type_matrix &right) const
 
template<typename _Func >
_Func walk (_Func func, const multi_type_matrix &right, const size_pair_type &start, const size_pair_type &end) const
 

Static Public Member Functions

static mtm::element_t to_mtm_type (mdds::mtv::element_t mtv_type)
 
static position_type next_position (const position_type &pos)
 
static const_position_type next_position (const const_position_type &pos)
 

Detailed Description

template<typename _MtxTrait>
class mdds::multi_type_matrix< _MtxTrait >

Matrix that can store numeric, integer, boolean, empty and string types. The string and integer types can be specified in the matrix trait template parameter. To use std::string as the string type and int as the integer type, use mdds::mtm::std_string_trait.

Constructor & Destructor Documentation

◆ multi_type_matrix() [1/5]

template<typename _MtxTrait >
mdds::multi_type_matrix< _MtxTrait >::multi_type_matrix ( )

Default constructor.

◆ multi_type_matrix() [2/5]

template<typename _MtxTrait >
mdds::multi_type_matrix< _MtxTrait >::multi_type_matrix ( size_type  rows,
size_type  cols 
)

Construct a matrix of specified size.

Parameters
rowssize of rows.
colssize of columns.

◆ multi_type_matrix() [3/5]

template<typename _MtxTrait >
template<typename _T >
mdds::multi_type_matrix< _MtxTrait >::multi_type_matrix ( size_type  rows,
size_type  cols,
const _T &  value 
)

Construct a matrix of specified size and initialize all its elements with specified value.

Parameters
rowssize of rows.
colssize of columns.
valuevalue to initialize all its elements with.

◆ multi_type_matrix() [4/5]

template<typename _MtxTrait >
template<typename _T >
mdds::multi_type_matrix< _MtxTrait >::multi_type_matrix ( size_type  rows,
size_type  cols,
const _T &  it_begin,
const _T &  it_end 
)

Construct a matrix of specified size and initialize its elements with specified values.

Parameters
rowssize of rows.
colssize of columns.
it_beginiterator that points to the value of the first element.
it_enditerator that points to the position after the last element value.

◆ multi_type_matrix() [5/5]

template<typename _MtxTrait >
mdds::multi_type_matrix< _MtxTrait >::multi_type_matrix ( const multi_type_matrix< _MtxTrait > &  r)

Copy constructor.

◆ ~multi_type_matrix()

template<typename _MtxTrait >
mdds::multi_type_matrix< _MtxTrait >::~multi_type_matrix ( )

Destructor.

Member Function Documentation

◆ clear()

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::clear ( )

Empty the matrix.

◆ copy() [1/2]

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::copy ( const multi_type_matrix< _MtxTrait > &  src)

Copy values from the passed matrix instance. If the size of the passed matrix is smaller, then the element values are copied by their positions, while the rest of the elements that fall outside the size of the passed matrix instance will remain unmodified. If the size of the passed matrix instance is larger, then only the elements within the size of this matrix instance will get copied.

Parameters
srcpassed matrix object to copy element values from.

◆ copy() [2/2]

template<typename _MtxTrait >
template<typename _T >
void mdds::multi_type_matrix< _MtxTrait >::copy ( size_type  rows,
size_type  cols,
const _T &  it_begin,
const _T &  it_end 
)

Copy values from an array or array-like container, to a specified sub-matrix range. The length of the array must match the number of elements in the destination range, else it will throw a mdds::size_error.

Parameters
rowsrow size of the destination range.
colscolumn size of the destination range.
it_beginiterator pointing to the beginning of the input array.
it_enditerator pointing to the end position of the input array.

◆ empty()

template<typename _MtxTrait >
bool mdds::multi_type_matrix< _MtxTrait >::empty ( ) const

Check whether or not this matrix is empty.

Returns
true if this matrix is empty, or false otherwise.

◆ end_position() [1/2]

template<typename _MtxTrait >
position_type mdds::multi_type_matrix< _MtxTrait >::end_position ( )

Return a position type that represents an end position. This can be used to compare with another position object to see if it is past the last element position.

Returns
end position object.

◆ end_position() [2/2]

template<typename _MtxTrait >
const_position_type mdds::multi_type_matrix< _MtxTrait >::end_position ( ) const

Return a position type that represents an end position. This can be used to compare with another position object to see if it is past the last element position.

Returns
end position object.

◆ get()

template<typename _MtxTrait >
template<typename _T >
_T mdds::multi_type_matrix< _MtxTrait >::get ( size_type  row,
size_type  col 
) const

Get the value of element at specified position. The caller must explicitly specify the return type. If the element is not of the specified type, it throws an exception.

Parameters
rowrow position of the element.
colcolumn position of the element.
Returns
value of the element.

◆ get_boolean() [1/2]

template<typename _MtxTrait >
bool mdds::multi_type_matrix< _MtxTrait >::get_boolean ( size_type  row,
size_type  col 
) const

Get a boolean representation of the element. If the element is of numeric type, true is returned if it's non-zero, otherwise false is returned. If it's of boolean type, its value is returned. If it's of empty or string type, false is returned.

Parameters
rowrow position of the element.
colcolumn position of the element.
Returns
boolean representation of the element.

◆ get_boolean() [2/2]

template<typename _MtxTrait >
bool mdds::multi_type_matrix< _MtxTrait >::get_boolean ( const const_position_type &  pos) const

Get a boolean representation of the element from a position object. If the element is of numeric type, true is returned if it's non-zero, otherwise false is returned. If it's of boolean type, its value is returned. If it's of empty or string type, false is returned.

Parameters
posposition object of an element
Returns
boolean representation of the element.

◆ get_integer() [1/2]

template<typename _MtxTrait >
integer_type mdds::multi_type_matrix< _MtxTrait >::get_integer ( size_type  row,
size_type  col 
) const

Get an integer representation of the element. If the element is of integer type, its value is returned. If it's of boolean type, either 1 or 0 is returned depending on whether it's true or false. If it's of empty or string type, 0 is returned.

Parameters
rowrow position of the element.
colcolumn position of the element.
Returns
integer representation of the element.

◆ get_integer() [2/2]

template<typename _MtxTrait >
integer_type mdds::multi_type_matrix< _MtxTrait >::get_integer ( const const_position_type &  pos) const

Get an integer representation of the element. If the element is of integer type, its value is returned. If it's of boolean type, either 1 or 0 is returned depending on whether it's true or false. If it's of empty or string type, 0 is returned.

Parameters
posposition object of an element
Returns
integer representation of the element.

◆ get_numeric() [1/2]

template<typename _MtxTrait >
double mdds::multi_type_matrix< _MtxTrait >::get_numeric ( size_type  row,
size_type  col 
) const

Get a numeric representation of the element. If the element is of numeric type, its value is returned. If it's of boolean type, either 1 or 0 is returned depending on whether it's true or false. If it's of empty or string type, 0 is returned.

Parameters
rowrow position of the element.
colcolumn position of the element.
Returns
numeric representation of the element.

◆ get_numeric() [2/2]

template<typename _MtxTrait >
double mdds::multi_type_matrix< _MtxTrait >::get_numeric ( const const_position_type &  pos) const

Get a numeric representation of the element from a position object. If the element is of numeric type, its value is returned. If it's of boolean type, either 1 or 0 is returned depending on whether it's true or false. If it's of empty or string type, 0 is returned.

Parameters
posposition object of an element
Returns
numeric representation of the element.

◆ get_string() [1/2]

template<typename _MtxTrait >
const string_type& mdds::multi_type_matrix< _MtxTrait >::get_string ( size_type  row,
size_type  col 
) const

Get the value of a string element. If the element is not of string type, it throws an exception.

Parameters
rowrow position of the element.
colcolumn position of the element.
Returns
value of the element.

◆ get_string() [2/2]

template<typename _MtxTrait >
const string_type& mdds::multi_type_matrix< _MtxTrait >::get_string ( const const_position_type &  pos) const

Get the value of a string element from a position object. If the element is not of string type, it throws an exception.

Parameters
posposition object of an element
Returns
value of the element.

◆ get_type() [1/2]

template<typename _MtxTrait >
mtm::element_t mdds::multi_type_matrix< _MtxTrait >::get_type ( const const_position_type &  pos) const

Get the type of element from a position object. The type can be one of empty, string, numeric, or boolean.

Parameters
posposition object of an element
Returns
element type.

◆ get_type() [2/2]

template<typename _MtxTrait >
mtm::element_t mdds::multi_type_matrix< _MtxTrait >::get_type ( size_type  row,
size_type  col 
) const

Get the type of element specified by its position. The type can be one of empty, string, numeric, or boolean.

Returns
element type.

◆ matrix_position()

template<typename _MtxTrait >
size_pair_type mdds::multi_type_matrix< _MtxTrait >::matrix_position ( const const_position_type &  pos) const

Get the row and column positions of the current element from a position object.

Parameters
posposition object.
Returns
0-based row and column positions.

◆ next_position() [1/2]

template<typename _MtxTrait >
static position_type mdds::multi_type_matrix< _MtxTrait >::next_position ( const position_type &  pos)
static

Move to the next logical position. The movement is in the top-to-bottom then left-to-right direction.

Parameters
posposition object.
Returns
position object that references the element at the next logical position.

◆ next_position() [2/2]

template<typename _MtxTrait >
static const_position_type mdds::multi_type_matrix< _MtxTrait >::next_position ( const const_position_type &  pos)
static

Move to the next logical position. The movement is in the top-to-bottom then left-to-right direction.

Parameters
posposition object.
Returns
non-mutable position object that references the element at the next logical position.

◆ numeric()

template<typename _MtxTrait >
bool mdds::multi_type_matrix< _MtxTrait >::numeric ( ) const

Check whether or not this matrix is numeric. A numeric matrix contains only numeric or boolean elements. An empty matrix is not numeric.

Returns
true if the matrix contains only numeric or boolean elements, or false otherwise.

◆ position() [1/4]

template<typename _MtxTrait >
position_type mdds::multi_type_matrix< _MtxTrait >::position ( size_type  row,
size_type  col 
)

Get a mutable reference of an element (position object) at specified position. The position object can then be passed to an additional method to get the type or value of the element it references, or set a new value to it.

Parameters
rowrow position of the referenced element.
colcolumn position of the referenced element.
Returns
reference object of element at specified position.

◆ position() [2/4]

template<typename _MtxTrait >
position_type mdds::multi_type_matrix< _MtxTrait >::position ( const position_type &  pos_hint,
size_type  row,
size_type  col 
)

Get a mutable reference of an element (position object) at specified position. The position object can then be passed to an additional method to get the type or value of the element it references, or set a new value to it.

Parameters
pos_hintposition object to be used as a position hint for faster lookup.
rowrow position of the referenced element.
colcolumn position of the referenced element.
Returns
reference object of element at specified position.

◆ position() [3/4]

template<typename _MtxTrait >
const_position_type mdds::multi_type_matrix< _MtxTrait >::position ( size_type  row,
size_type  col 
) const

Get an immutable reference of an element (position object) at specified position. The position object can then be passed to an additional method to get the type or value of the element it references.

Parameters
rowrow position of the referenced element.
colcolumn position of the referenced element.
Returns
reference object of element at specified position.

◆ position() [4/4]

template<typename _MtxTrait >
const_position_type mdds::multi_type_matrix< _MtxTrait >::position ( const const_position_type &  pos_hint,
size_type  row,
size_type  col 
) const

Get an immutable reference of an element (position object) at specified position. The position object can then be passed to an additional method to get the type or value of the element it references.

Parameters
pos_hintposition object to be used as a position hint for faster lookup.
rowrow position of the referenced element.
colcolumn position of the referenced element.
Returns
reference object of element at specified position.

◆ resize() [1/2]

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::resize ( size_type  rows,
size_type  cols 
)

Resize the matrix to specified size. This method supports resizing to zero-sized matrix; however, either specifying the row or column size to zero will resize the matrix to 0 x 0. When resizing the matrix larger, empty elements will be inserted in the region where no existing elements exist.

Parameters
rowsnew row size
colsnew column size

◆ resize() [2/2]

template<typename _MtxTrait >
template<typename _T >
void mdds::multi_type_matrix< _MtxTrait >::resize ( size_type  rows,
size_type  cols,
const _T &  value 
)

Resize the matrix to specified size and initial value. The initial value will be applied to new elements created when the specified size is larger than the current one.

Parameters
rowsnew row size
colsnew column size
valueinitial value for new elements

◆ set() [1/10]

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::set ( size_type  row,
size_type  col,
double  val 
)

Set a numeric value to an element at specified position.

Parameters
rowrow index of the element.
colcolumn index of the element.
valnew value to set.

◆ set() [2/10]

template<typename _MtxTrait >
position_type mdds::multi_type_matrix< _MtxTrait >::set ( const position_type &  pos,
double  val 
)

Set a numeric value to an element at specified position.

Parameters
posposition of the element to update.
valnew value to set.
Returns
position of the element block where the new value has been set.

◆ set() [3/10]

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::set ( size_type  row,
size_type  col,
bool  val 
)

Set a boolean value to an element at specified position.

Parameters
rowrow index of the element.
colcolumn index of the element.
valnew value to set.

◆ set() [4/10]

template<typename _MtxTrait >
position_type mdds::multi_type_matrix< _MtxTrait >::set ( const position_type &  pos,
bool  val 
)

Set a boolean value to an element at specified position.

Parameters
posposition of the element to update.
valnew value to set.
Returns
position of the element where the new value has been set.

◆ set() [5/10]

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::set ( size_type  row,
size_type  col,
const string_type &  str 
)

Set a string value to an element at specified position.

Parameters
rowrow index of the element.
colcolumn index of the element.
valnew value to set.

◆ set() [6/10]

template<typename _MtxTrait >
position_type mdds::multi_type_matrix< _MtxTrait >::set ( const position_type &  pos,
const string_type &  str 
)

Set a string value to an element at specified position.

Parameters
posposition of the element to update.
valnew value to set.
Returns
position of the element block where the new value has been set.

◆ set() [7/10]

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::set ( size_type  row,
size_type  col,
integer_type  val 
)

Set an integer value to an element at specified position.

Parameters
rowrow index of the element.
colcolumn index of the element.
valnew value to set.

◆ set() [8/10]

template<typename _MtxTrait >
position_type mdds::multi_type_matrix< _MtxTrait >::set ( const position_type &  pos,
integer_type  val 
)

Set an integer value to an element at specified position.

Parameters
posposition of the element to update.
valnew value to set.
Returns
position of the element block where the new value has been set.

◆ set() [9/10]

template<typename _MtxTrait >
template<typename _T >
void mdds::multi_type_matrix< _MtxTrait >::set ( size_type  row,
size_type  col,
const _T &  it_begin,
const _T &  it_end 
)

Set values of multiple elements at once, starting at specified element position following the direction of columns. When the new value series does not fit in the first column, it gets wrapped into the next column(s).

The method will throw an std::out_of_range exception if the specified position is outside the current container range.

Parameters
rowrow position of the start element.
colcolumn position of the start element.
it_beginiterator that points to the begin position of the values being set.
it_enditerator that points to the end position of the values being set.

◆ set() [10/10]

template<typename _MtxTrait >
template<typename _T >
position_type mdds::multi_type_matrix< _MtxTrait >::set ( const position_type &  pos,
const _T &  it_begin,
const _T &  it_end 
)

Set values of multiple elements at once, starting at specified element position following the direction of columns. When the new value series does not fit in the first column, it gets wrapped into the next column(s).

Parameters
posposition of the first element.
it_beginiterator that points to the begin position of the values being set.
it_enditerator that points to the end position of the values being set.
Returns
position of the first element that has been modified.

◆ set_column()

template<typename _MtxTrait >
template<typename _T >
void mdds::multi_type_matrix< _MtxTrait >::set_column ( size_type  col,
const _T &  it_begin,
const _T &  it_end 
)

Set values of multiple elements at once in a single column. When the length of passed elements exceeds that of the column, it gets truncated to the column size.

Parameters
colcolumn position
it_beginiterator that points to the begin position of the values being set.
it_enditerator that points to the end position of the values being set.

◆ set_column_empty()

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::set_column_empty ( size_type  col)

Set the entire column empty.

Parameters
colindex of the column to empty.

◆ set_empty() [1/3]

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::set_empty ( size_type  row,
size_type  col 
)

Set specified element position empty.

Parameters
rowrow position of the element.
colcolumn position of the element.

◆ set_empty() [2/3]

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::set_empty ( size_type  row,
size_type  col,
size_type  length 
)

Set specified range of elements empty.

Parameters
rowrow position of the first element.
colcolumn position of the first element.
lengthlength of the range to set empty.

◆ set_empty() [3/3]

template<typename _MtxTrait >
position_type mdds::multi_type_matrix< _MtxTrait >::set_empty ( const position_type &  pos)

Set element referenced by the position object empty.

Parameters
posposition object that references element.
Returns
position of the element that has just been made empty.

◆ set_row_empty()

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::set_row_empty ( size_type  row)

Set the entire row empty.

Parameters
rowindex of the row to empty.

◆ size()

template<typename _MtxTrait >
size_pair_type mdds::multi_type_matrix< _MtxTrait >::size ( ) const

Return the size of matrix as a pair. The first value is the row size, while the second value is the column size.

Returns
matrix size as a value pair.

◆ swap()

template<typename _MtxTrait >
void mdds::multi_type_matrix< _MtxTrait >::swap ( multi_type_matrix< _MtxTrait > &  r)

Swap the content of the matrix with another instance.

◆ transpose()

template<typename _MtxTrait >
multi_type_matrix& mdds::multi_type_matrix< _MtxTrait >::transpose ( )

Transpose the stored matrix data.

Returns
reference to this matrix instance.

◆ walk() [1/4]

template<typename _MtxTrait >
template<typename _Func >
_Func mdds::multi_type_matrix< _MtxTrait >::walk ( _Func  func) const

Walk all element blocks that consist of the matrix.

Parameters
funcfunction object whose operator() gets called on each element block.
Returns
function object passed to this method.

◆ walk() [2/4]

template<typename _MtxTrait >
template<typename _Func >
_Func mdds::multi_type_matrix< _MtxTrait >::walk ( _Func  func,
const size_pair_type start,
const size_pair_type end 
) const

Walk through the element blocks in a sub-matrix range defined by start and end positions passed to this method.

Parameters
funcfunction object whose operator() gets called on the element block.
startthe column/row position of the upper-left corner of the sub-matrix.
endthe column/row position of the lower-right corner of the sub-matrix. Both column and row must be greater or equal to those of the start position.
Returns
function object passed to this method.

◆ walk() [3/4]

template<typename _MtxTrait >
template<typename _Func >
_Func mdds::multi_type_matrix< _MtxTrait >::walk ( _Func  func,
const multi_type_matrix< _MtxTrait > &  right 
) const

Walk through all element blocks in parallel with another matrix instance. It stops at the block boundaries of both matrix instances during the walk.

Parameters
funcfunction object whose operator() gets called on each element block.
rightanother matrix instance to parallel-walk with.

◆ walk() [4/4]

template<typename _MtxTrait >
template<typename _Func >
_Func mdds::multi_type_matrix< _MtxTrait >::walk ( _Func  func,
const multi_type_matrix< _MtxTrait > &  right,
const size_pair_type start,
const size_pair_type end 
) const

Walk through the element blocks in a sub-matrix range in parallel with another matrix instance. It stops at the block boundaries of both matrix instances during the walk. The sub-matrix range is defined by start and end positions passed to this method.

Parameters
funcfunction object whose operator() gets called on each element block.
rightanother matrix instance to parallel-walk with.
startthe column/row position of the upper-left corner of the sub-matrix.
endthe column/row position of the lower-right corner of the sub-matrix. Both column and row must be greater or equal to those of the start position.