we assume IEEE 754 internal format for single and double precision floats. */
| 201 | |
| 202 | /* we assume IEEE 754 internal format for single and double precision floats. */ |
| 203 | void mp_encode_double(lua_State *L, mp_buf *buf, double d) { |
| 204 | unsigned char b[9]; |
| 205 | float f = d; |
| 206 | |
| 207 | assert(sizeof(f) == 4 && sizeof(d) == 8); |
| 208 | if (d == (double)f) { |
| 209 | b[0] = 0xca; /* float IEEE 754 */ |
| 210 | memcpy(b+1,&f,4); |
| 211 | memrevifle(b+1,4); |
| 212 | mp_buf_append(L,buf,b,5); |
| 213 | } else if (sizeof(d) == 8) { |
| 214 | b[0] = 0xcb; /* double IEEE 754 */ |
| 215 | memcpy(b+1,&d,8); |
| 216 | memrevifle(b+1,8); |
| 217 | mp_buf_append(L,buf,b,9); |
| 218 | } |
| 219 | } |
| 220 | |
| 221 | void mp_encode_int(lua_State *L, mp_buf *buf, int64_t n) { |
| 222 | unsigned char b[9]; |
no test coverage detected