49 virtual int serialize(
unsigned char *outbuffer)
const = 0;
51 virtual const char *
getType() = 0;
52 virtual const char *
getMD5() = 0;
68 memcpy(&val, &
f,
sizeof(val));
70 int16_t exp = ((val >> 23) & 255);
71 uint32_t mantissa = val & 0x7FFFFF;
90 while (!(mantissa & 0x800000))
101 *(outbuffer++) = (mantissa << 5) & 0xff;
102 *(outbuffer++) = (mantissa >> 3) & 0xff;
103 *(outbuffer++) = (mantissa >> 11) & 0xff;
104 *(outbuffer++) = ((exp << 4) & 0xF0) | ((mantissa >> 19) & 0x0F);
105 *(outbuffer++) = (exp >> 4) & 0x7F;
110 *(outbuffer - 1) |= 0x80;
135 mantissa = ((uint32_t)(*(inbuffer++)) >> 4 & 0x0F);
136 mantissa |= ((uint32_t)(*(inbuffer++)) & 0xff) << 4;
137 mantissa |= ((uint32_t)(*(inbuffer++)) & 0xff) << 12;
138 mantissa |= ((uint32_t)(*inbuffer) & 0x0f) << 20;
141 exp = ((uint32_t)(*(inbuffer++)) & 0xf0) >> 4;
142 exp |= ((uint32_t)(*inbuffer) & 0x7f) << 4;
148 else if (exp - 1023 > 127)
153 else if (exp - 1023 >= -126)
157 else if (exp - 1023 < -150)
164 mantissa |= 0x1000000;
165 mantissa >>= ((-126 + 1023) - exp);
170 if (mantissa != 0xFFFFFF)
176 uint32_t val = mantissa;
177 val |=
static_cast<uint32_t
>(exp) << 23;
180 val |= (
static_cast<uint32_t
>(*(inbuffer++)) & 0x80) << 24;
182 memcpy(
f, &val,
sizeof(val));
187 template<
typename A,
typename V>
190 for (
size_t i = 0; i <
sizeof(V); i++)
191 arr[i] = (var >> (8 * i));
195 template<
typename V,
typename A>
199 for (
size_t i = 0; i <
sizeof(V); i++)
200 var |= (arr[i] << (8 * i));