blob: 68095fe9cd7bbbc201fa4cfcd34b16e89d2fec21 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include "../internal.h"
#include "../util/byteswap.h"
YPC_EXPORT int ypc_add_int(ypc_val *v, int64_t i) {
if(v->size < v->len + 9 && ypc_val_resize(v, v->len+9) != 0)
return -1;
if(i >= INT8_MIN && i <= INT8_MAX) {
v->buf[v->len++] = YPCT_INT8;
v->buf[v->len++] = i;
} else if(i >= INT16_MIN && i <= INT16_MAX) {
v->buf[v->len++] = YPCT_INT16;
uint16_t n = ypc__hn16(i);
memcpy(v->buf+v->len, &n, 2);
v->len += 2;
} else if(i >= INT32_MIN && i <= INT32_MAX) {
v->buf[v->len++] = YPCT_INT32;
uint32_t n = ypc__hn32(i);
memcpy(v->buf+v->len, &n, 4);
v->len += 4;
} else {
v->buf[v->len++] = YPCT_INT64;
uint64_t n = ypc__hn64(i);
memcpy(v->buf+v->len, &n, 8);
v->len += 8;
}
return 0;
}
|