Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
FCH_31
Date:
Mon Oct 22 09:37:50 2018 +0000
Revision:
41:5a436163dddf
Parent:
24:92c30dabfda4
Child:
38:9b43b2415093
avec radio;

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