Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
patrick_duc
Date:
Fri Oct 19 06:32:59 2018 +0000
Branch:
Integration
Revision:
38:9b43b2415093
Parent:
24:92c30dabfda4
Child:
39:13e66d087ae9
Suite d'int?gration. Compilation  non encore test?e.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
patrick_duc 24:92c30dabfda4 1 #include <string>
patrick_duc 24:92c30dabfda4 2
patrick_duc 21:8524d815c587 3 #include "Value.hpp"
patrick_duc 21:8524d815c587 4
patrick_duc 21:8524d815c587 5 using namespace misnet;
patrick_duc 21:8524d815c587 6
patrick_duc 21:8524d815c587 7
patrick_duc 24:92c30dabfda4 8 void Value::setValue(Value::GENERIC_VALUE value) {
patrick_duc 22:a5929d3668b6 9
patrick_duc 24:92c30dabfda4 10 this->_value.type = value.type;
patrick_duc 22:a5929d3668b6 11
patrick_duc 24:92c30dabfda4 12 switch (value.type) {
patrick_duc 22:a5929d3668b6 13 case Value::BOOLEAN:
patrick_duc 22:a5929d3668b6 14 this->_value.value.bool_value = value.value.bool_value;
patrick_duc 22:a5929d3668b6 15 break;
patrick_duc 22:a5929d3668b6 16
patrick_duc 22:a5929d3668b6 17 case Value::CHAR:
patrick_duc 22:a5929d3668b6 18 this->_value.value.char_value = value.value.char_value;
patrick_duc 22:a5929d3668b6 19 break;
patrick_duc 22:a5929d3668b6 20
patrick_duc 22:a5929d3668b6 21 case Value::UINT8_T:
patrick_duc 22:a5929d3668b6 22 this->_value.value.uint8_value = value.value.uint8_value;
patrick_duc 22:a5929d3668b6 23 break;
patrick_duc 22:a5929d3668b6 24
patrick_duc 22:a5929d3668b6 25 case Value::INT8_T:
patrick_duc 22:a5929d3668b6 26 this->_value.value.int8_value = value.value.int8_value;
patrick_duc 22:a5929d3668b6 27 break;
patrick_duc 22:a5929d3668b6 28
patrick_duc 22:a5929d3668b6 29 case Value::UINT16_T:
patrick_duc 22:a5929d3668b6 30 this->_value.value.uint16_value = value.value.uint16_value;
patrick_duc 22:a5929d3668b6 31 break;
patrick_duc 22:a5929d3668b6 32
patrick_duc 22:a5929d3668b6 33 case Value::INT16_T:
patrick_duc 22:a5929d3668b6 34 this->_value.value.int16_value = value.value.int16_value;
patrick_duc 22:a5929d3668b6 35 break;
patrick_duc 22:a5929d3668b6 36
patrick_duc 22:a5929d3668b6 37 case Value::UINT32_T:
patrick_duc 22:a5929d3668b6 38 this->_value.value.uint32_value = value.value.uint32_value;
patrick_duc 22:a5929d3668b6 39 break;
patrick_duc 22:a5929d3668b6 40
patrick_duc 22:a5929d3668b6 41 case Value::INT32_T:
patrick_duc 22:a5929d3668b6 42 this->_value.value.int32_value = value.value.int32_value;
patrick_duc 22:a5929d3668b6 43 break;
patrick_duc 22:a5929d3668b6 44
patrick_duc 38:9b43b2415093 45 case Value::UINT64_T:
patrick_duc 38:9b43b2415093 46 this->_value.value.uint64_value = value.value.uint64_value;
patrick_duc 38:9b43b2415093 47 break;
patrick_duc 38:9b43b2415093 48
patrick_duc 38:9b43b2415093 49 case Value::INT64_T:
patrick_duc 38:9b43b2415093 50 this->_value.value.int64_value = value.value.int64_value;
patrick_duc 38:9b43b2415093 51 break;
patrick_duc 38:9b43b2415093 52
patrick_duc 22:a5929d3668b6 53 case Value::FLOAT:
patrick_duc 22:a5929d3668b6 54 this->_value.value.float_value = value.value.float_value;
patrick_duc 22:a5929d3668b6 55 break;
patrick_duc 22:a5929d3668b6 56
patrick_duc 22:a5929d3668b6 57 case Value::DOUBLE:
patrick_duc 22:a5929d3668b6 58 this->_value.value.double_value = value.value.double_value;
patrick_duc 22:a5929d3668b6 59 break;
patrick_duc 22:a5929d3668b6 60
patrick_duc 22:a5929d3668b6 61 case Value::TIME:
patrick_duc 22:a5929d3668b6 62 this->_value.value.time_value = value.value.time_value;
patrick_duc 22:a5929d3668b6 63 break;
patrick_duc 22:a5929d3668b6 64
patrick_duc 24:92c30dabfda4 65 case Value::TRIPLE_DOUBLE:
patrick_duc 24:92c30dabfda4 66 this->_value.value.triple_double_values[0] = value.value.triple_double_values[0];
patrick_duc 24:92c30dabfda4 67 this->_value.value.triple_double_values[1] = value.value.triple_double_values[1];
patrick_duc 24:92c30dabfda4 68 this->_value.value.triple_double_values[2] = value.value.triple_double_values[2];
patrick_duc 24:92c30dabfda4 69 break;
patrick_duc 24:92c30dabfda4 70
patrick_duc 22:a5929d3668b6 71 default:
patrick_duc 22:a5929d3668b6 72 break;
patrick_duc 22:a5929d3668b6 73 }
patrick_duc 22:a5929d3668b6 74 }
patrick_duc 22:a5929d3668b6 75
patrick_duc 22:a5929d3668b6 76
patrick_duc 21:8524d815c587 77 int8_t Value::compareTo(Value& otherValue) {
patrick_duc 21:8524d815c587 78 if (this->_value.type != otherValue._value.type) {
patrick_duc 21:8524d815c587 79 return -2;
patrick_duc 21:8524d815c587 80 }
patrick_duc 21:8524d815c587 81
patrick_duc 21:8524d815c587 82 switch (this->_value.type) {
patrick_duc 21:8524d815c587 83 case Value::BOOLEAN:
patrick_duc 21:8524d815c587 84 if (this->_value.value.bool_value == otherValue._value.value.bool_value) {
patrick_duc 21:8524d815c587 85 return 0;
patrick_duc 21:8524d815c587 86 }
patrick_duc 21:8524d815c587 87
patrick_duc 21:8524d815c587 88 else if ((this->_value.value.bool_value == true) && (otherValue._value.value.bool_value == false)) {
patrick_duc 21:8524d815c587 89 return 1;
patrick_duc 21:8524d815c587 90 }
patrick_duc 21:8524d815c587 91
patrick_duc 21:8524d815c587 92 return -1;
patrick_duc 21:8524d815c587 93 break;
patrick_duc 21:8524d815c587 94
patrick_duc 21:8524d815c587 95 case Value::CHAR:
patrick_duc 21:8524d815c587 96 if (this->_value.value.char_value == otherValue._value.value.char_value) {
patrick_duc 21:8524d815c587 97 return 0;
patrick_duc 21:8524d815c587 98 }
patrick_duc 21:8524d815c587 99 else if (this->_value.value.char_value > otherValue._value.value.char_value) {
patrick_duc 21:8524d815c587 100 return 1;
patrick_duc 21:8524d815c587 101 }
patrick_duc 21:8524d815c587 102
patrick_duc 21:8524d815c587 103 return -1;
patrick_duc 21:8524d815c587 104 break;
patrick_duc 21:8524d815c587 105
patrick_duc 21:8524d815c587 106 case Value::UINT8_T:
patrick_duc 21:8524d815c587 107 if (this->_value.value.uint8_value == otherValue._value.value.uint8_value) {
patrick_duc 21:8524d815c587 108 return 0;
patrick_duc 21:8524d815c587 109 }
patrick_duc 21:8524d815c587 110 else if (this->_value.value.uint8_value > otherValue._value.value.uint8_value) {
patrick_duc 21:8524d815c587 111 return 1;
patrick_duc 21:8524d815c587 112 }
patrick_duc 21:8524d815c587 113
patrick_duc 21:8524d815c587 114 return -1;
patrick_duc 21:8524d815c587 115 break;
patrick_duc 21:8524d815c587 116
patrick_duc 21:8524d815c587 117 case Value::INT8_T:
patrick_duc 21:8524d815c587 118 if (this->_value.value.int8_value == otherValue._value.value.int8_value) {
patrick_duc 21:8524d815c587 119 return 0;
patrick_duc 21:8524d815c587 120 }
patrick_duc 21:8524d815c587 121 else if (this->_value.value.int8_value > otherValue._value.value.int8_value) {
patrick_duc 21:8524d815c587 122 return 1;
patrick_duc 21:8524d815c587 123 }
patrick_duc 21:8524d815c587 124
patrick_duc 21:8524d815c587 125 return -1;
patrick_duc 21:8524d815c587 126 break;
patrick_duc 21:8524d815c587 127
patrick_duc 21:8524d815c587 128 case Value::UINT16_T:
patrick_duc 21:8524d815c587 129 if (this->_value.value.uint16_value == otherValue._value.value.uint16_value) {
patrick_duc 21:8524d815c587 130 return 0;
patrick_duc 21:8524d815c587 131 }
patrick_duc 21:8524d815c587 132 else if (this->_value.value.uint16_value > otherValue._value.value.uint16_value) {
patrick_duc 21:8524d815c587 133 return 1;
patrick_duc 21:8524d815c587 134 }
patrick_duc 21:8524d815c587 135
patrick_duc 21:8524d815c587 136 return -1;
patrick_duc 21:8524d815c587 137 break;
patrick_duc 21:8524d815c587 138
patrick_duc 21:8524d815c587 139 case Value::INT16_T:
patrick_duc 21:8524d815c587 140 if (this->_value.value.int16_value == otherValue._value.value.int16_value) {
patrick_duc 21:8524d815c587 141 return 0;
patrick_duc 21:8524d815c587 142 }
patrick_duc 21:8524d815c587 143 else if (this->_value.value.int16_value > otherValue._value.value.int16_value) {
patrick_duc 21:8524d815c587 144 return 1;
patrick_duc 21:8524d815c587 145 }
patrick_duc 21:8524d815c587 146
patrick_duc 21:8524d815c587 147 return -1;
patrick_duc 21:8524d815c587 148 break;
patrick_duc 21:8524d815c587 149
patrick_duc 21:8524d815c587 150 case Value::UINT32_T:
patrick_duc 21:8524d815c587 151 if (this->_value.value.uint32_value == otherValue._value.value.uint32_value) {
patrick_duc 21:8524d815c587 152 return 0;
patrick_duc 21:8524d815c587 153 }
patrick_duc 21:8524d815c587 154 else if (this->_value.value.uint32_value > otherValue._value.value.uint32_value) {
patrick_duc 21:8524d815c587 155 return 1;
patrick_duc 21:8524d815c587 156 }
patrick_duc 21:8524d815c587 157
patrick_duc 21:8524d815c587 158 return -1;
patrick_duc 21:8524d815c587 159 break;
patrick_duc 21:8524d815c587 160
patrick_duc 21:8524d815c587 161 case Value::INT32_T:
patrick_duc 21:8524d815c587 162 if (this->_value.value.int32_value == otherValue._value.value.int32_value) {
patrick_duc 21:8524d815c587 163 return 0;
patrick_duc 21:8524d815c587 164 }
patrick_duc 21:8524d815c587 165 else if (this->_value.value.int32_value > otherValue._value.value.int32_value) {
patrick_duc 21:8524d815c587 166 return 1;
patrick_duc 21:8524d815c587 167 }
patrick_duc 21:8524d815c587 168
patrick_duc 21:8524d815c587 169 return -1;
patrick_duc 21:8524d815c587 170 break;
patrick_duc 21:8524d815c587 171
patrick_duc 38:9b43b2415093 172 case Value::UINT64_T:
patrick_duc 38:9b43b2415093 173 if (this->_value.value.uint64_value == otherValue._value.value.uint64_value) {
patrick_duc 38:9b43b2415093 174 return 0;
patrick_duc 38:9b43b2415093 175 }
patrick_duc 38:9b43b2415093 176 else if (this->_value.value.uint64_value > otherValue._value.value.uint64_value) {
patrick_duc 38:9b43b2415093 177 return 1;
patrick_duc 38:9b43b2415093 178 }
patrick_duc 38:9b43b2415093 179
patrick_duc 38:9b43b2415093 180 return -1;
patrick_duc 38:9b43b2415093 181 break;
patrick_duc 38:9b43b2415093 182
patrick_duc 38:9b43b2415093 183 case Value::INT64_T:
patrick_duc 38:9b43b2415093 184 if (this->_value.value.int64_value == otherValue._value.value.int64_value) {
patrick_duc 38:9b43b2415093 185 return 0;
patrick_duc 38:9b43b2415093 186 }
patrick_duc 38:9b43b2415093 187 else if (this->_value.value.int64_value > otherValue._value.value.int64_value) {
patrick_duc 38:9b43b2415093 188 return 1;
patrick_duc 38:9b43b2415093 189 }
patrick_duc 38:9b43b2415093 190
patrick_duc 38:9b43b2415093 191 return -1;
patrick_duc 38:9b43b2415093 192 break;
patrick_duc 38:9b43b2415093 193
patrick_duc 21:8524d815c587 194 case Value::FLOAT:
patrick_duc 21:8524d815c587 195 if (this->_value.value.float_value == otherValue._value.value.float_value) {
patrick_duc 21:8524d815c587 196 return 0;
patrick_duc 21:8524d815c587 197 }
patrick_duc 21:8524d815c587 198 else if (this->_value.value.float_value > otherValue._value.value.float_value) {
patrick_duc 21:8524d815c587 199 return 1;
patrick_duc 21:8524d815c587 200 }
patrick_duc 21:8524d815c587 201
patrick_duc 21:8524d815c587 202 return -1;
patrick_duc 21:8524d815c587 203 break;
patrick_duc 21:8524d815c587 204
patrick_duc 21:8524d815c587 205 case Value::DOUBLE:
patrick_duc 21:8524d815c587 206 if (this->_value.value.double_value == otherValue._value.value.double_value) {
patrick_duc 21:8524d815c587 207 return 0;
patrick_duc 21:8524d815c587 208 }
patrick_duc 21:8524d815c587 209 else if (this->_value.value.double_value > otherValue._value.value.double_value) {
patrick_duc 21:8524d815c587 210 return 1;
patrick_duc 21:8524d815c587 211 }
patrick_duc 21:8524d815c587 212
patrick_duc 21:8524d815c587 213 return -1;
patrick_duc 21:8524d815c587 214 break;
patrick_duc 21:8524d815c587 215
patrick_duc 21:8524d815c587 216 case Value::TIME:
patrick_duc 21:8524d815c587 217 if (this->_value.value.time_value == otherValue._value.value.time_value) {
patrick_duc 21:8524d815c587 218 return 0;
patrick_duc 21:8524d815c587 219 }
patrick_duc 21:8524d815c587 220 else if (this->_value.value.time_value > otherValue._value.value.time_value) {
patrick_duc 21:8524d815c587 221 return 1;
patrick_duc 21:8524d815c587 222 }
patrick_duc 21:8524d815c587 223
patrick_duc 21:8524d815c587 224 return -1;
patrick_duc 21:8524d815c587 225 break;
patrick_duc 21:8524d815c587 226
patrick_duc 24:92c30dabfda4 227 case Value::TRIPLE_DOUBLE:
patrick_duc 24:92c30dabfda4 228 if ((this->_value.value.triple_double_values[0] == otherValue._value.value.triple_double_values[0])
patrick_duc 38:9b43b2415093 229 && (this->_value.value.triple_double_values[1] == otherValue._value.value.triple_double_values[1])
patrick_duc 38:9b43b2415093 230 && (this->_value.value.triple_double_values[2] == otherValue._value.value.triple_double_values[2])) {
patrick_duc 24:92c30dabfda4 231 return 0;
patrick_duc 24:92c30dabfda4 232 }
patrick_duc 24:92c30dabfda4 233 else if (this->_value.value.triple_double_values[0] > otherValue._value.value.triple_double_values[0]) {
patrick_duc 24:92c30dabfda4 234 return 1;
patrick_duc 24:92c30dabfda4 235 }
patrick_duc 24:92c30dabfda4 236
patrick_duc 24:92c30dabfda4 237 return -1;
patrick_duc 24:92c30dabfda4 238 break;
patrick_duc 24:92c30dabfda4 239
patrick_duc 21:8524d815c587 240 default:
patrick_duc 21:8524d815c587 241 return -2;
patrick_duc 21:8524d815c587 242 break;
patrick_duc 21:8524d815c587 243 }
patrick_duc 21:8524d815c587 244 }
patrick_duc 21:8524d815c587 245
patrick_duc 21:8524d815c587 246
patrick_duc 38:9b43b2415093 247 #ifdef TEST_ENVIRONMENT
patrick_duc 24:92c30dabfda4 248 std::string Value::toString() {
patrick_duc 21:8524d815c587 249 std::ostringstream stringStream;
patrick_duc 21:8524d815c587 250
patrick_duc 21:8524d815c587 251 switch (this->_value.type) {
patrick_duc 21:8524d815c587 252 case Value::BOOLEAN:
patrick_duc 21:8524d815c587 253 stringStream << (this->_value.value.bool_value ? "true" : "false");
patrick_duc 21:8524d815c587 254 break;
patrick_duc 21:8524d815c587 255
patrick_duc 21:8524d815c587 256 case Value::CHAR:
patrick_duc 21:8524d815c587 257 stringStream << this->_value.value.char_value;
patrick_duc 21:8524d815c587 258 break;
patrick_duc 21:8524d815c587 259
patrick_duc 21:8524d815c587 260 case Value::UINT8_T:
patrick_duc 21:8524d815c587 261 #if defined(TEST_ENVIRONMENT) && not defined(CPLUSPLUS_99)
patrick_duc 21:8524d815c587 262 stringStream << std::to_string(this->_value.value.uint8_value);
patrick_duc 21:8524d815c587 263 #else
patrick_duc 21:8524d815c587 264 stringStream << this->_value.value.uint8_value;
patrick_duc 21:8524d815c587 265 #endif
patrick_duc 21:8524d815c587 266 break;
patrick_duc 21:8524d815c587 267
patrick_duc 21:8524d815c587 268 case Value::INT8_T:
patrick_duc 21:8524d815c587 269 #if defined(TEST_ENVIRONMENT) && not defined(CPLUSPLUS_99)
patrick_duc 21:8524d815c587 270 stringStream << std::to_string(this->_value.value.int8_value);
patrick_duc 21:8524d815c587 271 #else
patrick_duc 21:8524d815c587 272 stringStream << this->_value.value.int8_value;
patrick_duc 21:8524d815c587 273 #endif
patrick_duc 21:8524d815c587 274 break;
patrick_duc 21:8524d815c587 275
patrick_duc 21:8524d815c587 276 case Value::UINT16_T:
patrick_duc 21:8524d815c587 277 stringStream << this->_value.value.uint16_value;
patrick_duc 21:8524d815c587 278 break;
patrick_duc 21:8524d815c587 279
patrick_duc 21:8524d815c587 280 case Value::INT16_T:
patrick_duc 21:8524d815c587 281 stringStream << this->_value.value.int16_value;
patrick_duc 21:8524d815c587 282 break;
patrick_duc 21:8524d815c587 283
patrick_duc 21:8524d815c587 284 case Value::UINT32_T:
patrick_duc 21:8524d815c587 285 stringStream << this->_value.value.uint32_value;
patrick_duc 21:8524d815c587 286 break;
patrick_duc 21:8524d815c587 287
patrick_duc 21:8524d815c587 288 case Value::INT32_T:
patrick_duc 21:8524d815c587 289 stringStream << this->_value.value.int32_value;
patrick_duc 21:8524d815c587 290 break;
patrick_duc 21:8524d815c587 291
patrick_duc 21:8524d815c587 292 case Value::FLOAT:
patrick_duc 21:8524d815c587 293 stringStream << this->_value.value.float_value;
patrick_duc 21:8524d815c587 294 break;
patrick_duc 21:8524d815c587 295
patrick_duc 21:8524d815c587 296 case Value::DOUBLE:
patrick_duc 21:8524d815c587 297 stringStream << this->_value.value.double_value;
patrick_duc 21:8524d815c587 298 break;
patrick_duc 21:8524d815c587 299
patrick_duc 21:8524d815c587 300 case Value::TIME:
patrick_duc 21:8524d815c587 301 stringStream << this->_value.value.time_value;
patrick_duc 21:8524d815c587 302 break;
patrick_duc 21:8524d815c587 303
patrick_duc 24:92c30dabfda4 304 case Value::TRIPLE_DOUBLE:
patrick_duc 24:92c30dabfda4 305 stringStream << this->_value.value.triple_double_values[0] << ","
patrick_duc 24:92c30dabfda4 306 << this->_value.value.triple_double_values[1] << ","
patrick_duc 24:92c30dabfda4 307 << this->_value.value.triple_double_values[2];
patrick_duc 24:92c30dabfda4 308 break;
patrick_duc 24:92c30dabfda4 309
patrick_duc 21:8524d815c587 310 case Value::NOT_SET:
patrick_duc 21:8524d815c587 311 default:
patrick_duc 21:8524d815c587 312 stringStream << "Value not set !";
patrick_duc 21:8524d815c587 313 break;
patrick_duc 21:8524d815c587 314 }
patrick_duc 21:8524d815c587 315
patrick_duc 21:8524d815c587 316 return stringStream.str();
patrick_duc 21:8524d815c587 317 }
patrick_duc 38:9b43b2415093 318 #endif
patrick_duc 21:8524d815c587 319
patrick_duc 21:8524d815c587 320
patrick_duc 21:8524d815c587 321 Value Value::substract(Value& otherValue) {
patrick_duc 21:8524d815c587 322 Value result;
patrick_duc 21:8524d815c587 323
patrick_duc 21:8524d815c587 324 if (this->_value.type == Value::NOT_SET || otherValue._value.type == Value::NOT_SET) {
patrick_duc 21:8524d815c587 325 result._value.type = Value::NOT_SET;
patrick_duc 21:8524d815c587 326 return result;
patrick_duc 21:8524d815c587 327 }
patrick_duc 21:8524d815c587 328
patrick_duc 21:8524d815c587 329 if (this->_value.type != otherValue._value.type) {
patrick_duc 21:8524d815c587 330 result._value.type = Value::NOT_SET;
patrick_duc 21:8524d815c587 331 return result;
patrick_duc 21:8524d815c587 332 }
patrick_duc 21:8524d815c587 333
patrick_duc 21:8524d815c587 334 switch (this->_value.type) {
patrick_duc 21:8524d815c587 335 case Value::BOOLEAN:
patrick_duc 21:8524d815c587 336 result._value.type = Value::NOT_SET;
patrick_duc 21:8524d815c587 337 return result;
patrick_duc 21:8524d815c587 338 break;
patrick_duc 21:8524d815c587 339
patrick_duc 21:8524d815c587 340 case Value::CHAR:
patrick_duc 21:8524d815c587 341 result._value.value.char_value = this->_value.value.char_value - otherValue._value.value.char_value;
patrick_duc 21:8524d815c587 342 result._value.type = Value::CHAR;
patrick_duc 21:8524d815c587 343 break;
patrick_duc 21:8524d815c587 344
patrick_duc 21:8524d815c587 345 case Value::UINT8_T:
patrick_duc 21:8524d815c587 346 result._value.value.uint8_value = this->_value.value.uint8_value - otherValue._value.value.uint8_value;
patrick_duc 21:8524d815c587 347 result._value.type = Value::UINT8_T;
patrick_duc 21:8524d815c587 348 break;
patrick_duc 21:8524d815c587 349
patrick_duc 21:8524d815c587 350 case Value::INT8_T:
patrick_duc 21:8524d815c587 351 result._value.value.int8_value = this->_value.value.int8_value - otherValue._value.value.int8_value;
patrick_duc 21:8524d815c587 352 result._value.type = Value::INT8_T;
patrick_duc 21:8524d815c587 353 break;
patrick_duc 21:8524d815c587 354
patrick_duc 21:8524d815c587 355 case Value::UINT16_T:
patrick_duc 21:8524d815c587 356 result._value.value.uint16_value = this->_value.value.uint16_value - otherValue._value.value.uint16_value;
patrick_duc 21:8524d815c587 357 result._value.type = Value::UINT16_T;
patrick_duc 21:8524d815c587 358 break;
patrick_duc 21:8524d815c587 359
patrick_duc 21:8524d815c587 360 case Value::INT16_T:
patrick_duc 21:8524d815c587 361 result._value.value.int16_value = this->_value.value.int16_value - otherValue._value.value.int16_value;
patrick_duc 21:8524d815c587 362 result._value.type = Value::INT16_T;
patrick_duc 21:8524d815c587 363 break;
patrick_duc 21:8524d815c587 364
patrick_duc 21:8524d815c587 365 case Value::UINT32_T:
patrick_duc 21:8524d815c587 366 result._value.value.uint32_value = this->_value.value.uint32_value - otherValue._value.value.uint32_value;
patrick_duc 21:8524d815c587 367 result._value.type = Value::UINT32_T;
patrick_duc 21:8524d815c587 368 break;
patrick_duc 21:8524d815c587 369
patrick_duc 21:8524d815c587 370 case Value::INT32_T:
patrick_duc 21:8524d815c587 371 result._value.value.int32_value = this->_value.value.int32_value - otherValue._value.value.int32_value;
patrick_duc 21:8524d815c587 372 result._value.type = Value::INT32_T;
patrick_duc 21:8524d815c587 373 break;
patrick_duc 21:8524d815c587 374
patrick_duc 21:8524d815c587 375 case Value::FLOAT:
patrick_duc 21:8524d815c587 376 result._value.value.float_value = this->_value.value.float_value - otherValue._value.value.float_value;
patrick_duc 21:8524d815c587 377 result._value.type = Value::FLOAT;
patrick_duc 21:8524d815c587 378 break;
patrick_duc 21:8524d815c587 379
patrick_duc 21:8524d815c587 380 case Value::DOUBLE:
patrick_duc 21:8524d815c587 381 result._value.value.double_value = this->_value.value.double_value - otherValue._value.value.double_value;
patrick_duc 21:8524d815c587 382 result._value.type = Value::DOUBLE;
patrick_duc 21:8524d815c587 383 break;
patrick_duc 21:8524d815c587 384
patrick_duc 21:8524d815c587 385 case Value::TIME:
patrick_duc 21:8524d815c587 386 result._value.value.time_value = this->_value.value.time_value - otherValue._value.value.time_value;
patrick_duc 21:8524d815c587 387 result._value.type = Value::TIME;
patrick_duc 21:8524d815c587 388 break;
patrick_duc 21:8524d815c587 389
patrick_duc 24:92c30dabfda4 390 case Value::TRIPLE_DOUBLE:
patrick_duc 24:92c30dabfda4 391 result._value.value.triple_double_values[0] = this->_value.value.triple_double_values[0] - otherValue._value.value.triple_double_values[0];
patrick_duc 24:92c30dabfda4 392 result._value.value.triple_double_values[1] = this->_value.value.triple_double_values[1] - otherValue._value.value.triple_double_values[1];
patrick_duc 24:92c30dabfda4 393 result._value.value.triple_double_values[2] = this->_value.value.triple_double_values[2] - otherValue._value.value.triple_double_values[2];
patrick_duc 24:92c30dabfda4 394 result._value.type = Value::TRIPLE_DOUBLE;
patrick_duc 24:92c30dabfda4 395 break;
patrick_duc 24:92c30dabfda4 396
patrick_duc 21:8524d815c587 397 default:
patrick_duc 21:8524d815c587 398 result._value.type = Value::NOT_SET;
patrick_duc 21:8524d815c587 399 break;
patrick_duc 21:8524d815c587 400 }
patrick_duc 21:8524d815c587 401
patrick_duc 21:8524d815c587 402 return result;
patrick_duc 21:8524d815c587 403 }
patrick_duc 21:8524d815c587 404
patrick_duc 21:8524d815c587 405
patrick_duc 22:a5929d3668b6 406 bool Value::isAbsoluteDifferenceValueGreaterThanDelta(Value& valueToSubstract, Value& delta) {
patrick_duc 21:8524d815c587 407 if (((this->_value.type != valueToSubstract._value.type) || (this->_value.type != valueToSubstract._value.type))
patrick_duc 21:8524d815c587 408 || (this->_value.type == Value::NOT_SET)) {
patrick_duc 21:8524d815c587 409 return true;
patrick_duc 21:8524d815c587 410 }
patrick_duc 21:8524d815c587 411
patrick_duc 21:8524d815c587 412 int16_t int16_result;
patrick_duc 21:8524d815c587 413 int32_t int32_result;
patrick_duc 21:8524d815c587 414 double double_result;
patrick_duc 21:8524d815c587 415
patrick_duc 21:8524d815c587 416 switch (this->_value.type) {
patrick_duc 21:8524d815c587 417 case Value::BOOLEAN:
patrick_duc 21:8524d815c587 418 return false;
patrick_duc 21:8524d815c587 419 break;
patrick_duc 21:8524d815c587 420
patrick_duc 21:8524d815c587 421 case Value::CHAR:
patrick_duc 21:8524d815c587 422 int16_result = (int16_t) this->_value.value.char_value - valueToSubstract._value.value.char_value;
patrick_duc 21:8524d815c587 423 if (int16_result < 0) {
patrick_duc 21:8524d815c587 424 int16_result = -int16_result;
patrick_duc 21:8524d815c587 425 }
patrick_duc 21:8524d815c587 426 return (int16_result > delta._value.value.char_value);
patrick_duc 21:8524d815c587 427 break;
patrick_duc 21:8524d815c587 428
patrick_duc 21:8524d815c587 429 case Value::UINT8_T:
patrick_duc 21:8524d815c587 430 int16_result = (int16_t) this->_value.value.uint8_value - valueToSubstract._value.value.uint8_value;
patrick_duc 22:a5929d3668b6 431 //DEBUG("First value = %d, second value = %d\n", this->_value.value.uint8_value, valueToSubstract._value.value.uint8_value);
patrick_duc 22:a5929d3668b6 432 //DEBUG("Difference = %d\n", int16_result);
patrick_duc 21:8524d815c587 433 if (int16_result < 0) {
patrick_duc 21:8524d815c587 434 int16_result = -int16_result;
patrick_duc 21:8524d815c587 435 }
patrick_duc 21:8524d815c587 436 return (int16_result > delta._value.value.uint8_value);
patrick_duc 21:8524d815c587 437 break;
patrick_duc 21:8524d815c587 438
patrick_duc 21:8524d815c587 439 case Value::INT8_T:
patrick_duc 21:8524d815c587 440 int16_result = this->_value.value.int8_value - valueToSubstract._value.value.int8_value;
patrick_duc 21:8524d815c587 441 if (int16_result < 0) {
patrick_duc 21:8524d815c587 442 int16_result = -int16_result;
patrick_duc 21:8524d815c587 443 }
patrick_duc 21:8524d815c587 444 return (int16_result > delta._value.value.int8_value);
patrick_duc 21:8524d815c587 445 break;
patrick_duc 21:8524d815c587 446
patrick_duc 21:8524d815c587 447 case Value::UINT16_T:
patrick_duc 21:8524d815c587 448 int32_result = (int32_t) this->_value.value.uint16_value - valueToSubstract._value.value.uint16_value;
patrick_duc 21:8524d815c587 449 if (int32_result < 0) {
patrick_duc 21:8524d815c587 450 int32_result = -int32_result;
patrick_duc 21:8524d815c587 451 }
patrick_duc 21:8524d815c587 452 return (int32_result > delta._value.value.uint16_value);
patrick_duc 21:8524d815c587 453 break;
patrick_duc 21:8524d815c587 454
patrick_duc 21:8524d815c587 455 case Value::INT16_T:
patrick_duc 21:8524d815c587 456 int32_result = (int32_t) this->_value.value.int16_value - valueToSubstract._value.value.int16_value;
patrick_duc 21:8524d815c587 457 if (int32_result < 0) {
patrick_duc 21:8524d815c587 458 int32_result = -int32_result;
patrick_duc 21:8524d815c587 459 }
patrick_duc 21:8524d815c587 460 return (int32_result > delta._value.value.int16_value);
patrick_duc 21:8524d815c587 461 break;
patrick_duc 21:8524d815c587 462
patrick_duc 21:8524d815c587 463 case Value::UINT32_T:
patrick_duc 21:8524d815c587 464 double_result = (double) this->_value.value.uint32_value - valueToSubstract._value.value.uint32_value;
patrick_duc 21:8524d815c587 465 if (double_result < 0) {
patrick_duc 21:8524d815c587 466 double_result = -double_result;
patrick_duc 21:8524d815c587 467 }
patrick_duc 21:8524d815c587 468 return (double_result > delta._value.value.uint32_value);
patrick_duc 21:8524d815c587 469 break;
patrick_duc 21:8524d815c587 470
patrick_duc 21:8524d815c587 471 case Value::INT32_T:
patrick_duc 21:8524d815c587 472 double_result = this->_value.value.int32_value - valueToSubstract._value.value.int32_value;
patrick_duc 21:8524d815c587 473 if (double_result < 0) {
patrick_duc 21:8524d815c587 474 double_result = -double_result;
patrick_duc 21:8524d815c587 475 }
patrick_duc 21:8524d815c587 476 return (double_result > delta._value.value.int32_value);
patrick_duc 21:8524d815c587 477 break;
patrick_duc 21:8524d815c587 478
patrick_duc 21:8524d815c587 479 case Value::FLOAT:
patrick_duc 21:8524d815c587 480 double_result = this->_value.value.float_value - valueToSubstract._value.value.float_value;
patrick_duc 21:8524d815c587 481 if (double_result < 0) {
patrick_duc 21:8524d815c587 482 double_result = -double_result;
patrick_duc 21:8524d815c587 483 }
patrick_duc 21:8524d815c587 484 return (double_result > delta._value.value.float_value);
patrick_duc 21:8524d815c587 485 break;
patrick_duc 21:8524d815c587 486
patrick_duc 21:8524d815c587 487 case Value::DOUBLE:
patrick_duc 21:8524d815c587 488 double_result = this->_value.value.double_value - valueToSubstract._value.value.double_value;
patrick_duc 21:8524d815c587 489 if (double_result < 0) {
patrick_duc 21:8524d815c587 490 double_result = -double_result;
patrick_duc 21:8524d815c587 491 }
patrick_duc 21:8524d815c587 492 return (double_result > delta._value.value.double_value);
patrick_duc 21:8524d815c587 493 break;
patrick_duc 21:8524d815c587 494
patrick_duc 21:8524d815c587 495 case Value::TIME:
patrick_duc 21:8524d815c587 496 double_result = (double) this->_value.value.time_value - valueToSubstract._value.value.time_value;
patrick_duc 21:8524d815c587 497 if (double_result < 0) {
patrick_duc 21:8524d815c587 498 double_result = -double_result;
patrick_duc 21:8524d815c587 499 }
patrick_duc 21:8524d815c587 500 return (double_result > delta._value.value.time_value);
patrick_duc 21:8524d815c587 501 break;
patrick_duc 21:8524d815c587 502
patrick_duc 24:92c30dabfda4 503 case Value::TRIPLE_DOUBLE:
patrick_duc 24:92c30dabfda4 504 double_result = this->_value.value.triple_double_values[0] - valueToSubstract._value.value.triple_double_values[0];
patrick_duc 24:92c30dabfda4 505 if (double_result < 0) {
patrick_duc 24:92c30dabfda4 506 double_result = -double_result;
patrick_duc 24:92c30dabfda4 507 }
patrick_duc 24:92c30dabfda4 508 if (double_result > delta._value.value.triple_double_values[0]) {
patrick_duc 24:92c30dabfda4 509 return true;
patrick_duc 24:92c30dabfda4 510 }
patrick_duc 24:92c30dabfda4 511
patrick_duc 24:92c30dabfda4 512 double_result = this->_value.value.triple_double_values[1] - valueToSubstract._value.value.triple_double_values[1];
patrick_duc 24:92c30dabfda4 513 if (double_result < 0) {
patrick_duc 24:92c30dabfda4 514 double_result = -double_result;
patrick_duc 24:92c30dabfda4 515 }
patrick_duc 24:92c30dabfda4 516 if (double_result > delta._value.value.triple_double_values[1]) {
patrick_duc 24:92c30dabfda4 517 return true;
patrick_duc 24:92c30dabfda4 518 }
patrick_duc 24:92c30dabfda4 519
patrick_duc 24:92c30dabfda4 520 double_result = this->_value.value.triple_double_values[2] - valueToSubstract._value.value.triple_double_values[2];
patrick_duc 24:92c30dabfda4 521 if (double_result < 0) {
patrick_duc 24:92c30dabfda4 522 double_result = -double_result;
patrick_duc 24:92c30dabfda4 523 }
patrick_duc 24:92c30dabfda4 524 return (double_result > delta._value.value.triple_double_values[2]);
patrick_duc 24:92c30dabfda4 525 break;
patrick_duc 24:92c30dabfda4 526
patrick_duc 21:8524d815c587 527 default:
patrick_duc 21:8524d815c587 528 return true;
patrick_duc 21:8524d815c587 529 break;
patrick_duc 21:8524d815c587 530 }
patrick_duc 21:8524d815c587 531 }
patrick_duc 21:8524d815c587 532
patrick_duc 21:8524d815c587 533
patrick_duc 21:8524d815c587 534 bool Value::isDifferentFrom(Value& otherValue) {
patrick_duc 21:8524d815c587 535 if (this->_value.type != otherValue._value.type) {
patrick_duc 21:8524d815c587 536 return true;
patrick_duc 21:8524d815c587 537 }
patrick_duc 21:8524d815c587 538
patrick_duc 21:8524d815c587 539 switch (this->_value.type) {
patrick_duc 21:8524d815c587 540 case Value::BOOLEAN:
patrick_duc 21:8524d815c587 541 return (this->_value.value.bool_value != otherValue._value.value.bool_value);
patrick_duc 21:8524d815c587 542 break;
patrick_duc 21:8524d815c587 543
patrick_duc 21:8524d815c587 544 case Value::CHAR:
patrick_duc 21:8524d815c587 545 return (this->_value.value.char_value != otherValue._value.value.char_value);
patrick_duc 21:8524d815c587 546 break;
patrick_duc 21:8524d815c587 547
patrick_duc 21:8524d815c587 548 case Value::UINT8_T:
patrick_duc 21:8524d815c587 549 return (this->_value.value.uint8_value != otherValue._value.value.uint8_value);
patrick_duc 21:8524d815c587 550 break;
patrick_duc 21:8524d815c587 551
patrick_duc 21:8524d815c587 552 case Value::INT8_T:
patrick_duc 21:8524d815c587 553 return (this->_value.value.int8_value != otherValue._value.value.int8_value);
patrick_duc 21:8524d815c587 554 break;
patrick_duc 21:8524d815c587 555
patrick_duc 21:8524d815c587 556 case Value::UINT16_T:
patrick_duc 21:8524d815c587 557 return (this->_value.value.uint16_value != otherValue._value.value.uint16_value);
patrick_duc 21:8524d815c587 558 break;
patrick_duc 21:8524d815c587 559
patrick_duc 21:8524d815c587 560 case Value::INT16_T:
patrick_duc 21:8524d815c587 561 return (this->_value.value.int16_value != otherValue._value.value.int16_value);
patrick_duc 21:8524d815c587 562 break;
patrick_duc 21:8524d815c587 563
patrick_duc 21:8524d815c587 564 case Value::UINT32_T:
patrick_duc 21:8524d815c587 565 return (this->_value.value.uint32_value != otherValue._value.value.uint32_value);
patrick_duc 21:8524d815c587 566 break;
patrick_duc 21:8524d815c587 567
patrick_duc 21:8524d815c587 568 case Value::INT32_T:
patrick_duc 21:8524d815c587 569 return (this->_value.value.int32_value != otherValue._value.value.int32_value);
patrick_duc 21:8524d815c587 570 break;
patrick_duc 21:8524d815c587 571
patrick_duc 21:8524d815c587 572 case Value::FLOAT:
patrick_duc 21:8524d815c587 573 return (this->_value.value.float_value == otherValue._value.value.float_value);
patrick_duc 21:8524d815c587 574 break;
patrick_duc 21:8524d815c587 575
patrick_duc 21:8524d815c587 576 case Value::DOUBLE:
patrick_duc 21:8524d815c587 577 return (this->_value.value.double_value != otherValue._value.value.double_value);
patrick_duc 21:8524d815c587 578 break;
patrick_duc 21:8524d815c587 579
patrick_duc 21:8524d815c587 580 case Value::TIME:
patrick_duc 21:8524d815c587 581 return (this->_value.value.time_value != otherValue._value.value.time_value);
patrick_duc 21:8524d815c587 582 break;
patrick_duc 21:8524d815c587 583
patrick_duc 24:92c30dabfda4 584 case Value::TRIPLE_DOUBLE:
patrick_duc 24:92c30dabfda4 585 return ((this->_value.value.triple_double_values[0] != otherValue._value.value.triple_double_values[0])
patrick_duc 24:92c30dabfda4 586 && (this->_value.value.triple_double_values[1] != otherValue._value.value.triple_double_values[1])
patrick_duc 24:92c30dabfda4 587 && (this->_value.value.triple_double_values[2] != otherValue._value.value.triple_double_values[2]));
patrick_duc 24:92c30dabfda4 588 break;
patrick_duc 24:92c30dabfda4 589
patrick_duc 21:8524d815c587 590 default:
patrick_duc 21:8524d815c587 591 return true;
patrick_duc 21:8524d815c587 592 break;
patrick_duc 21:8524d815c587 593 }
patrick_duc 21:8524d815c587 594 }