Lines Matching refs:msgpack
29 * This file provides functions to create msgpack formatted data.
30 * for msgpack specification refer to
31 * github.com/msgpack/msgpack/blob/master/spec.md
71 void ac_msgpack_init(struct ac_msgpack *msgpack)
73 msgpack->mem = malloc(MSGPACK_MEM_START_SIZE);
74 msgpack->mem_size = MSGPACK_MEM_START_SIZE;
75 msgpack->offset = 0;
78 void ac_msgpack_destroy(struct ac_msgpack *msgpack)
80 free(msgpack->mem);
83 int ac_msgpack_resize_if_required(struct ac_msgpack *msgpack,
86 if ((msgpack->offset + data_size) > msgpack->mem_size) {
89 new_mem_size = msgpack->mem_size +
91 msgpack->mem = realloc(msgpack->mem, new_mem_size);
92 if (msgpack->mem == NULL)
95 msgpack->mem_size = new_mem_size;
101 void ac_msgpack_add_fixmap_op(struct ac_msgpack *msgpack, uint32_t n)
104 if (!ac_msgpack_resize_if_required(msgpack, 1))
106 msgpack->mem[msgpack->offset] = MSGPACK_FIXMAP_OP | n;
107 msgpack->offset = msgpack->offset + 1;
109 if (!ac_msgpack_resize_if_required(msgpack, 3))
111 msgpack->mem[msgpack->offset] = MSGPACK_MAP16_OP;
112 *((uint16_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap16(n);
113 msgpack->offset = msgpack->offset + 3;
115 if (!ac_msgpack_resize_if_required(msgpack, 5))
117 msgpack->mem[msgpack->offset] = MSGPACK_MAP32_OP;
118 *((unsigned int*)&msgpack->mem[msgpack->offset + 1]) = util_bswap32(n);
119 msgpack->offset = msgpack->offset + 5;
123 void ac_msgpack_add_fixarray_op(struct ac_msgpack *msgpack, uint32_t n)
126 if (!ac_msgpack_resize_if_required(msgpack, 1))
128 msgpack->mem[msgpack->offset] = MSGPACK_FIXARRAY_OP | n;
129 msgpack->offset = msgpack->offset + 1;
131 if (!ac_msgpack_resize_if_required(msgpack, 3))
133 msgpack->mem[msgpack->offset] = MSGPACK_ARRAY16_OP;
134 *((uint16_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap16(n);
135 msgpack->offset = msgpack->offset + 3;
137 if (!ac_msgpack_resize_if_required(msgpack, 5))
139 msgpack->mem[msgpack->offset] = MSGPACK_ARRAY32_OP;
140 *((uint32_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap32(n);
141 msgpack->offset = msgpack->offset + 5;
145 void ac_msgpack_add_fixstr(struct ac_msgpack *msgpack, char *str)
152 if (!ac_msgpack_resize_if_required(msgpack, 1 + n))
154 msgpack->mem[msgpack->offset] = MSGPACK_FIXSTR_OP | n;
155 msgpack->offset = msgpack->offset + 1;
157 if (!ac_msgpack_resize_if_required(msgpack, 2 + n))
159 msgpack->mem[msgpack->offset] = MSGPACK_STR8_OP;
160 msgpack->mem[msgpack->offset + 1] = n;
161 msgpack->offset = msgpack->offset + 2;
163 if (!ac_msgpack_resize_if_required(msgpack, 3 + n))
165 msgpack->mem[msgpack->offset] = MSGPACK_STR16_OP;
166 *((uint16_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap16(n);
167 msgpack->offset = msgpack->offset + 3;
169 if (!ac_msgpack_resize_if_required(msgpack, 5 + n))
171 msgpack->mem[msgpack->offset] = MSGPACK_STR32_OP;
172 *((uint32_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap32(n);
173 msgpack->offset = msgpack->offset + 5;
176 memcpy (&msgpack->mem[msgpack->offset], str, n);
177 msgpack->offset = msgpack->offset + n;
180 void ac_msgpack_add_uint(struct ac_msgpack *msgpack, uint64_t val)
183 if (!ac_msgpack_resize_if_required(msgpack, 1))
185 msgpack->mem[msgpack->offset] = val;
186 msgpack->offset = msgpack->offset + 1;
188 if (!ac_msgpack_resize_if_required(msgpack, 2))
190 msgpack->mem[msgpack->offset] = MSGPACK_UINT8_OP;
191 msgpack->mem[msgpack->offset + 1] = val;
192 msgpack->offset = msgpack->offset + 2;
194 if (!ac_msgpack_resize_if_required(msgpack, 3))
196 msgpack->mem[msgpack->offset] = MSGPACK_UINT16_OP;
197 *((uint16_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap16(val);
198 msgpack->offset = msgpack->offset + 3;
200 if (!ac_msgpack_resize_if_required(msgpack, 5))
202 msgpack->mem[msgpack->offset] = MSGPACK_UINT32_OP;
203 *((uint32_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap32(val);
204 msgpack->offset = msgpack->offset + 5;
206 if (!ac_msgpack_resize_if_required(msgpack, 9))
208 msgpack->mem[msgpack->offset] = MSGPACK_UINT64_OP;
209 *((uint64_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap64(val);
210 msgpack->offset = msgpack->offset + 9;
214 void ac_msgpack_add_int(struct ac_msgpack *msgpack, int64_t val)
218 if (!ac_msgpack_resize_if_required(msgpack, 1))
220 msgpack->mem[msgpack->offset] = val | MSGPACK_NIL_OP;
221 msgpack->offset = msgpack->offset + 1;
223 if (!ac_msgpack_resize_if_required(msgpack, 1))
225 msgpack->mem[msgpack->offset] = val;
226 msgpack->offset = msgpack->offset + 1;
228 if (!ac_msgpack_resize_if_required(msgpack, 2))
230 msgpack->mem[msgpack->offset] = MSGPACK_INT8_OP;
231 msgpack->mem[msgpack->offset + 1] = val;
232 msgpack->offset = msgpack->offset + 2;
235 if (!ac_msgpack_resize_if_required(msgpack, 3))
237 msgpack->mem[msgpack->offset] = MSGPACK_INT16_OP;
238 *((int16_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap32(val);
239 msgpack->offset = msgpack->offset + 3;
241 if (!ac_msgpack_resize_if_required(msgpack, 5))
243 msgpack->mem[msgpack->offset] = MSGPACK_INT32_OP;
244 *((int32_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap32(val);
245 msgpack->offset = msgpack->offset + 5;
247 if (!ac_msgpack_resize_if_required(msgpack, 9))
249 msgpack->mem[msgpack->offset] = MSGPACK_INT64_OP;
250 *((int64_t*)&msgpack->mem[msgpack->offset + 1]) = util_bswap64(val);
251 msgpack->offset = msgpack->offset + 9;