Multi Type Matrix

API Reference

template <typename _StringTrait>
class mdds::multi_type_matrix

Matrix that can store double, bool, empty and string types. The string type is specified by the string trait template parameter. To use std::string as the string type, use mdds::mtm::std_string_trait.

Public Types

typedef string_trait::string_type string_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
typedef string_trait::string_element_block string_block_type

Public Functions

multi_type_matrix()

Default constructor.

multi_type_matrix(size_type rows, size_type cols)

Construct a matrix of specified size with specified density type.

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_matrix &operator=(const multi_type_matrix &r)
position_type 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.

Return
reference object of element at specified position.
Parameters
  • row -

    row position of the referenced element.

  • col -

    column position of the referenced element.

position_type 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.

Return
reference object of element at specified position.
Parameters
  • pos_hint -

    position object to be used as a position hint for faster lookup.

  • row -

    row position of the referenced element.

  • col -

    column position of the referenced element.

const_position_type 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.

Return
reference object of element at specified position.
Parameters
  • row -

    row position of the referenced element.

  • col -

    column position of the referenced element.

const_position_type 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.

Return
reference object of element at specified position.
Parameters
  • pos_hint -

    position object to be used as a position hint for faster lookup.

  • row -

    row position of the referenced element.

  • col -

    column position of the referenced element.

size_pair_type matrix_position(const const_position_type &pos) const

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

Return
0-based row and column positions.
Parameters
  • pos -

    position object.

position_type 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.

Return
end position object

const_position_type 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.

Return
end position object

mtm::element_t 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.

Return
element type.
Parameters
  • pos -

    position object of an element

mtm::element_t 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.

Return
element type.

double 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.

Return
numeric representation of the element.
Parameters
  • row -

    row position of the element.

  • col -

    column position of the element.

double 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.

Return
numeric representation of the element.
Parameters
  • pos -

    position object of an element

bool 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.

Return
boolean representation of the element.
Parameters
  • row -

    row position of the element.

  • col -

    column position of the element.

bool 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.

Return
boolean representation of the element.
Parameters
  • pos -

    position object of an element

const string_type &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.

Return
value of the element.
Parameters
  • row -

    row position of the element.

  • col -

    column position of the element.

const string_type &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.

Return
value of the element.
Parameters
  • pos -

    position object of an element

template <typename _T>
_T 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.

Return
value of the element.
Parameters
  • row -

    row position of the element.

  • col -

    column position of the element.

void set_empty(size_type row, size_type col)

Set specified element position empty.

Parameters
  • row -

    row position of the element.

  • col -

    column position of the element.

void set_empty(size_type row, size_type col, size_type length)

Set specified range of elements empty.

Parameters
  • row -

    row position of the first element.

  • col -

    column position of the first element.

  • length -

    length of the range to set empty.

position_type set_empty(const position_type &pos)

Set element referenced by the position object empty.

Parameters
  • pos -

    position object that references element.

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)
template <typename _T>
void 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 column of the start element, 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
  • row -

    row position of the start element.

  • col -

    column position of the start element.

  • it_begin -

    iterator that points to the begin position of the values being set.

  • it_end -

    iterator that points to the end position of the values being set.

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)

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
  • col -

    column position

  • it_begin -

    iterator that points to the begin position of the values being set.

  • it_end -

    iterator that points to the end position of the values being set.

size_pair_type 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.

Return
matrix size as a value pair.

multi_type_matrix &transpose()

Transpose the stored matrix data.

Return
reference to this matrix instance.

void copy(const multi_type_matrix &r)

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
  • r -

    passed matrix object to copy element values from.

void 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
  • rows -

    new row size

  • cols -

    new column size

template <typename _T>
void 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
  • rows -

    new row size

  • cols -

    new column size

  • value -

    initial value for new elements

void clear()

Empty the matrix.

bool 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.

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

bool empty() const

Check whether or not this matrix is empty.

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

void swap(multi_type_matrix &r)

Swap the content of the matrix with another instance.

template <typename _Func>
void walk(_Func &func) const

Walk all element blocks that consist of the matrix.

Parameters
  • func -

    function object whose operator() gets called on each element block.

template <typename _Func>
void walk(_Func &func, const size_pair_type &start, const size_pair_type &end) const

Walk through the element blocks that make up the sub-matrix defined by start and end positions.

Parameters
  • func -

    function object whose operator() gets called on the element block.

  • start -

    the column/row position of the upper-left corner of the sub-matrix.

  • end -

    the 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.

template <typename _Func>
void walk(_Func &func, const multi_type_matrix &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
  • func -

    function object whose operator() gets called on each element block.

  • right -

    another matrix instance to parallel-walk with.

Public Static Functions

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

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

Return
position object that references the element at the next logical position.
Parameters
  • pos -

    position object.

static const_position_type next_position(const const_position_type &pos)

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

Return
non-mutable position object that references the element at the next logical position.
Parameters
  • pos -

    position object.

struct element_block_node_type

Public Functions

template<>
mdds::multi_type_matrix<_StringTrait>::element_block_node_type::element_block_node_type()
template<>
mdds::multi_type_matrix<_StringTrait>::element_block_node_type::element_block_node_type(const element_block_node_type &other)
template<>
void mdds::multi_type_matrix<_StringTrait>::element_block_node_type::assign(const const_position_type &pos, size_type segment_size)
template <typename _Blk>
template<>
_Blk::const_iterator mdds::multi_type_matrix<_StringTrait>::element_block_node_type::begin() const
template <typename _Blk>
template<>
_Blk::const_iterator mdds::multi_type_matrix<_StringTrait>::element_block_node_type::end() const

Public Members

template<>
mtm::element_t mdds::multi_type_matrix<_StringTrait>::element_block_node_type::type
template<>
size_type mdds::multi_type_matrix<_StringTrait>::element_block_node_type::offset
template<>
size_type mdds::multi_type_matrix<_StringTrait>::element_block_node_type::size
template<>
const element_block_type *mdds::multi_type_matrix<_StringTrait>::element_block_node_type::data
struct size_pair_type

Public Functions

template<>
mdds::multi_type_matrix<_StringTrait>::size_pair_type::size_pair_type()
template<>
mdds::multi_type_matrix<_StringTrait>::size_pair_type::size_pair_type(size_type _row, size_type _column)
template<>
bool mdds::multi_type_matrix<_StringTrait>::size_pair_type::operator==(const size_pair_type &r) const
template<>
bool mdds::multi_type_matrix<_StringTrait>::size_pair_type::operator!=(const size_pair_type &r) const

Public Members

template<>
size_type mdds::multi_type_matrix<_StringTrait>::size_pair_type::row
template<>
size_type mdds::multi_type_matrix<_StringTrait>::size_pair_type::column
template <typename _Func>
struct walk_func

Inherits from std::unary_function< store_type::const_iterator::value_type, void >

Public Functions

template<>
mdds::multi_type_matrix<_StringTrait>::walk_func::walk_func(_Func &func)
template<>
void mdds::multi_type_matrix<_StringTrait>::walk_func::operator()(const typename store_type::const_iterator::value_type &mtv_node)

Public Members

template<>
_Func &mdds::multi_type_matrix<_StringTrait>::walk_func::m_func