28 #ifndef __MDDS_MULTI_TYPE_MATRIX_HPP__ 29 #define __MDDS_MULTI_TYPE_MATRIX_HPP__ 31 #ifdef MDDS_MULTI_TYPE_MATRIX_DEBUG 32 #ifndef MDDS_MULTI_TYPE_VECTOR_DEBUG 33 #define MDDS_MULTI_TYPE_VECTOR_DEBUG 1 37 #include "multi_type_vector.hpp" 38 #include "multi_type_vector_trait.hpp" 49 element_empty = mdds::mtv::element_type_empty,
50 element_boolean = mdds::mtv::element_type_boolean,
51 element_string = mdds::mtv::element_type_string,
52 element_numeric = mdds::mtv::element_type_numeric
57 typedef std::string string_type;
61 static const mdds::mtv::element_t string_type_identifier = mdds::mtv::element_type_string;
71 template<
typename _StringTrait>
74 typedef _StringTrait string_trait;
76 typedef typename string_trait::string_type string_type;
77 typedef size_t size_type;
83 typedef typename store_type::position_type position_type;
84 typedef typename store_type::const_position_type const_position_type;
90 typedef typename string_trait::string_element_block string_block_type;
97 size_pair_type(size_type _row, size_type _column) : row(_row), column(_column) {}
99 bool operator== (
const size_pair_type& r)
const {
return row == r.row && column == r.column; }
100 bool operator!= (
const size_pair_type& r)
const {
return !operator== (r); }
108 const element_block_type* data;
112 type(other.type), offset(other.offset), size(other.size), data(other.data) {}
115 static mtm::element_t to_mtm_type(mdds::mtv::element_t mtv_type)
119 case string_trait::string_type_identifier:
120 return mdds::mtm::element_string;
121 case mdds::mtv::element_type_numeric:
122 case mdds::mtv::element_type_boolean:
123 case mdds::mtv::element_type_empty:
125 return static_cast<mtm::element_t
>(mtv_type);
127 throw general_error(
"multi_type_matrix: unknown element type.");
131 template<
typename _Func>
132 struct walk_func : std::unary_function<typename store_type::const_iterator::value_type, void>
140 mtm_node.type = to_mtm_type(mtv_node.type);
141 mtm_node.size = mtv_node.size;
142 mtm_node.data = mtv_node.data;
156 static position_type next_position(
const position_type& pos);
167 static const_position_type next_position(
const const_position_type& pos);
179 template<
typename _T>
182 template<
typename _T>
183 multi_type_matrix(size_type rows, size_type cols,
const _T& it_begin,
const _T& it_end);
204 position_type position(size_type row, size_type col);
219 position_type position(
const position_type& pos_hint, size_type row, size_type col);
231 const_position_type position(size_type row, size_type col)
const;
245 const_position_type position(
const const_position_type& pos_hint, size_type row, size_type col)
const;
264 position_type end_position();
273 const_position_type end_position()
const;
283 mtm::element_t get_type(
const const_position_type& pos)
const;
291 mtm::element_t get_type(size_type row, size_type col)
const;
304 double get_numeric(size_type row, size_type col)
const;
316 double get_numeric(
const const_position_type& pos)
const;
329 bool get_boolean(size_type row, size_type col)
const;
341 bool get_boolean(
const const_position_type& pos)
const;
352 const string_type& get_string(size_type row, size_type col)
const;
362 const string_type& get_string(
const const_position_type& pos)
const;
374 template<
typename _T>
375 _T
get(size_type row, size_type col)
const;
383 void set_empty(size_type row, size_type col);
392 void set_empty(size_type row, size_type col, size_type length);
399 position_type set_empty(
const position_type& pos);
401 void set_column_empty(size_type col);
402 void set_row_empty(size_type row);
404 void set(size_type row, size_type col,
double val);
405 position_type
set(
const position_type& pos,
double val);
407 void set(size_type row, size_type col,
bool val);
408 position_type
set(
const position_type& pos,
bool val);
410 void set(size_type row, size_type col,
const string_type& str);
411 position_type
set(
const position_type& pos,
const string_type& str);
429 template<
typename _T>
430 void set(size_type row, size_type col,
const _T& it_begin,
const _T& it_end);
432 template<
typename _T>
433 position_type
set(
const position_type& pos,
const _T& it_begin,
const _T& it_end);
446 template<
typename _T>
447 void set_column(size_type col,
const _T& it_begin,
const _T& it_end);
486 void resize(size_type rows, size_type cols);
497 template<
typename _T>
498 void resize(size_type rows, size_type cols,
const _T& value);
512 bool numeric()
const;
532 template<
typename _Func>
533 void walk(_Func& func)
const;
549 template<
typename _Func>
552 #ifdef MDDS_MULTI_TYPE_MATRIX_DEBUG 555 m_store.dump_blocks(std::cout);
571 inline size_type get_pos(size_type row, size_type col)
const 573 return m_size.row * col + row;
576 inline size_type get_pos(
const const_position_type& pos)
const 578 return pos.first->position + pos.second;
581 void copy_store(store_type& dest, size_type rows, size_type cols)
const;
590 #include "multi_type_matrix_def.inl" Definition: multi_type_vector_trait.hpp:659
Definition: multi_type_vector_types.hpp:88
Definition: multi_type_matrix.hpp:132
Definition: multi_type_vector_itr.hpp:44
Definition: multi_type_matrix.hpp:92
Definition: multi_type_vector_types.hpp:480
Definition: global.hpp:58
Definition: multi_type_matrix.hpp:72
Definition: default_deleter.hpp:33
Definition: multi_type_matrix.hpp:55
Definition: multi_type_matrix.hpp:103