1
/*************************************************************************
3
* Copyright (c) 2010 Kohei Yoshida
5
* Permission is hereby granted, free of charge, to any person
6
* obtaining a copy of this software and associated documentation
7
* files (the "Software"), to deal in the Software without
8
* restriction, including without limitation the rights to use,
9
* copy, modify, merge, publish, distribute, sublicense, and/or sell
10
* copies of the Software, and to permit persons to whom the
11
* Software is furnished to do so, subject to the following
14
* The above copyright notice and this permission notice shall be
15
* included in all copies or substantial portions of the Software.
17
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24
* OTHER DEALINGS IN THE SOFTWARE.
26
************************************************************************/
28
#ifndef __MDDS_MIXED_TYPE_MATRIX_ELEMENT_HPP__
29
#define __MDDS_MIXED_TYPE_MATRIX_ELEMENT_HPP__
41
template<typename _String>
44
typedef _String string_type;
46
matrix_element_t m_type:2;
52
string_type* mp_string;
55
element() : m_type(element_empty) {}
56
element(const element& r) : m_type(r.m_type)
61
m_boolean = r.m_boolean;
64
m_numeric = r.m_numeric;
67
mp_string = new string_type(*r.mp_string);
75
explicit element(double v) : m_type(element_numeric), m_numeric(v) {}
76
explicit element(bool v) : m_type(element_boolean), m_boolean(v) {}
77
explicit element(string_type* p) : m_type(element_string), mp_string(p) {}
79
bool operator== (const element& r) const
81
if (m_type != r.m_type)
87
return m_boolean == r.m_boolean;
89
return m_numeric == r.m_numeric;
91
return *mp_string == *r.mp_string;
100
element& operator= (const element& r)
102
if (m_type == element_string)
109
case element_boolean:
110
m_boolean = r.m_boolean;
112
case element_numeric:
113
m_numeric = r.m_numeric;
116
mp_string = new string_type(*r.mp_string);
132
if (m_type == element_string)
139
m_type = element_empty;
142
void set_numeric(double val)
145
m_type = element_numeric;
149
void set_boolean(bool val)
152
m_type = element_boolean;
156
void set_string(string_type* str)
159
m_type = element_string;