Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
patrick_duc
Date:
Wed Sep 05 21:58:07 2018 +0000
Revision:
22:a5929d3668b6
Parent:
21:8524d815c587
Child:
24:92c30dabfda4
Correction d'une erreur dans Value.hpp et renommage d'une m?thode.; Ajout d'un driver de tests unitaires sur la classe Value.

Who changed what in which revision?

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