Veritable Lasagna
An Allocator & Data Structure Library for C.
Loading...
Searching...
No Matches
vl_msgpack_io.h
Go to the documentation of this file.
1
14#ifndef VL_MSGPACK_IO_H
15#define VL_MSGPACK_IO_H
16
17#include "vl_buffer.h"
18#include "vl_msgpack.h"
19#include "vl_stack.h"
20
21typedef enum vl_msgpack_io_error_
22{
23 VL_MSGPACK_IO_ERR_NONE, // No error. All good!
24 VL_MSGPACK_IO_ERR_STACK_UNDERFLOW, // Erroneous call to a container end
25 // encoding function.
26 VL_MSGPACK_IO_ERR_UNEXPECTED_TOKEN, // Expected a different token as "next"
27 // when decoding.
28 VL_MSGPACK_IO_ERR_UNBALANCED_MAP, // Map does not have an even number of
29 // values when encoding (must be key/value
30 // pairs)
31 VL_MSGPACK_IO_ERR_UNEXPECTED_EOF, // Found end of buffer at an unexpected
32 // point when decoding
33} vl_msgpack_io_error;
34
47typedef struct vl_msgpack_encoder_
48{
49 // Holds state of current structure (map/array), including how many elements.
51 // Holds encoded data.
52 vl_buffer buffer;
53
54 vl_msgpack_io_error error;
58
69
81
92
104
113
125
138
149
162
172VL_API void vlMsgPackIOEncodeBool(vl_msgpack_encoder* enc, vl_bool_t value);
173
185VL_API void vlMsgPackIOEncodeStringLen(vl_msgpack_encoder* enc, const char* value, vl_uint32_t len);
186
196static inline void vlMsgPackIOEncodeString(vl_msgpack_encoder* enc, const char* value)
197{
198 vlMsgPackIOEncodeStringLen(enc, value, (vl_uint32_t)strlen(value));
199}
200
211
221VL_API void vlMsgPackIOEncodeFloat64(vl_msgpack_encoder* enc, vl_float64_t value);
222
234VL_API void vlMsgPackIOEncodeBinary(vl_msgpack_encoder* enc, const void* value, vl_uint32_t len);
235
248VL_API void vlMsgPackIOEncodeExt(vl_msgpack_encoder* enc, vl_int8_t type, const void* value, vl_uint32_t len);
249
260
271
281
288VL_API void vlMsgPackIOEncodeFromDOM(vl_msgpack_encoder* encoder, vl_msgpack* src, vl_msgpack_iter curIter);
289
296typedef struct vl_msgpack_io_token_
297{
301 union
302 {
306 struct
307 {
308 vl_dsidx_t elements;
309 } array;
310
314 struct
315 {
316 vl_dsidx_t keyValuePairs;
317 } map;
318
322 struct
323 {
324 vl_ilarge_t value;
325 } integer;
326
330 struct
331 {
332 vl_ularge_t value;
333 } uinteger;
334
338 struct
339 {
340 vl_float32_t value;
341 } float32;
342
346 struct
347 {
348 vl_float64_t value;
349 } float64;
350
354 struct
355 {
356 vl_bool_t value;
357 } boolean;
358
362 struct
363 {
364 // UTF-8 Encoded
365 const char* ptr;
366 vl_uint32_t length;
367 } string;
368
372 struct
373 {
374 const void* ptr;
375 vl_uint32_t length;
376 } binary;
377
381 struct
382 {
383 vl_int8_t extType;
384 const void* ptr;
385 vl_uint32_t length;
386 } ext;
387 };
388
391
398typedef struct vl_msgpack_decoder_
399{
400 const vl_uint8_t* srcMem;
401 vl_memsize_t srcLen;
403
404 vl_msgpack_io_error error; // Error.
405 vl_msgpack_type errorType; // Type associated with error.
406 vl_dsoffs_t errorOffset; // Offset in source buffer where error occurred.
408
421VL_API void vlMsgPackIODecoderStart(vl_msgpack_decoder* dec, const void* srcMem, vl_memsize_t srcLen);
422
436
453 const void* key, vl_memsize_t keyLen);
454
455#endif // VL_MSGPACK_IO_H
A MessagePack Token.
Definition vl_msgpack_io.h:297
vl_msgpack_type type
Definition vl_msgpack_io.h:389
vl_hash_iter vl_msgpack_iter
Definition vl_msgpack.h:31
vl_msgpack_type
All MessagePack Types.
Definition vl_msgpack.h:37
MessagePack Document Object Model.
Definition vl_msgpack.h:115
VL_API void vlMsgPackIOEncodeStringLen(vl_msgpack_encoder *enc, const char *value, vl_uint32_t len)
Encodes a string's length into the MessagePack stream.
Definition vl_msgpack_io.c:257
VL_API void vlMsgPackIOEncodeMapEnd(vl_msgpack_encoder *enc)
Ends encoding a map in the MessagePack stream.
Definition vl_msgpack_io.c:210
vl_dsoffs_t srcOffset
Definition vl_msgpack_io.h:402
vl_msgpack_type errorType
Definition vl_msgpack_io.h:405
VL_API void vlMsgPackIOEncoderFree(vl_msgpack_encoder *enc)
Frees the specified MessagePack encoder.
Definition vl_msgpack_io.c:176
VL_API void vlMsgPackIOEncodeFloat64(vl_msgpack_encoder *enc, vl_float64_t value)
Encodes a 64-bit floating point value into the MessagePack stream.
Definition vl_msgpack_io.c:308
vl_dsidx_t errorDepth
Definition vl_msgpack_io.h:56
VL_API vl_msgpack_encoder * vlMsgPackIOEncoderNew(void)
Allocates and initializes a MessagePack encoder.
Definition vl_msgpack_io.c:182
VL_API void vlMsgPackIOEncodeUInt(vl_msgpack_encoder *enc, vl_ularge_t value)
Encodes an unsigned integer value into the MessagePack stream.
Definition vl_msgpack_io.c:517
VL_API void vlMsgPackIOEncoderDelete(vl_msgpack_encoder *enc)
Deletes the specified MessagePack encoder.
Definition vl_msgpack_io.c:189
vl_memsize_t srcLen
Definition vl_msgpack_io.h:401
VL_API void vlMsgPackIOEncodeInt(vl_msgpack_encoder *enc, vl_ilarge_t value)
Encodes a signed integer value into the MessagePack stream.
Definition vl_msgpack_io.c:449
VL_API void vlMsgPackIOEncodeExt(vl_msgpack_encoder *enc, vl_int8_t type, const void *value, vl_uint32_t len)
Encodes an extension type value into the MessagePack stream.
Definition vl_msgpack_io.c:353
VL_API void vlMsgPackIOEncodeArrayBegin(vl_msgpack_encoder *enc)
Begins encoding an array in the MessagePack stream.
Definition vl_msgpack_io.c:232
VL_API void vlMsgPackIOEncodeBool(vl_msgpack_encoder *enc, vl_bool_t value)
Encodes a boolean value into the MessagePack stream.
Definition vl_msgpack_io.c:250
vl_buffer buffer
Definition vl_msgpack_io.h:52
VL_API void vlMsgPackIOEncodeFloat32(vl_msgpack_encoder *enc, vl_float32_t value)
Encodes a 32-bit floating point value into the MessagePack stream.
Definition vl_msgpack_io.c:299
const vl_uint8_t * srcMem
Definition vl_msgpack_io.h:400
VL_API void vlMsgPackIOEncodeMapBegin(vl_msgpack_encoder *enc)
Begins encoding a map in the MessagePack stream.
Definition vl_msgpack_io.c:204
VL_API void vlMsgPackIOEncodeBinary(vl_msgpack_encoder *enc, const void *value, vl_uint32_t len)
Encodes a binary value into the MessagePack stream.
Definition vl_msgpack_io.c:317
VL_API vl_bool_t vlMsgPackIODecoderNext(vl_msgpack_decoder *decoder, vl_msgpack_io_token *tkPtr)
Extracts the next token from the MessagePack stream.
Definition vl_msgpack_io.c:662
vl_dsoffs_t errorOffset
Definition vl_msgpack_io.h:406
vl_stack stateStack
Definition vl_msgpack_io.h:50
VL_API void vlMsgPackIOEncoderInit(vl_msgpack_encoder *enc)
Initializes the specified MessagePack encoder.
Definition vl_msgpack_io.c:166
VL_API void vlMsgPackIOEncoderClear(vl_msgpack_encoder *enc)
Clears the state of the MessagePack encoder.
Definition vl_msgpack_io.c:195
VL_API void vlMsgPackIODecoderStart(vl_msgpack_decoder *dec, const void *srcMem, vl_memsize_t srcLen)
Starts the MessagePack decoding process.
Definition vl_msgpack_io.c:640
VL_API void vlMsgPackIOEncodeNil(vl_msgpack_encoder *enc)
Encodes a nil value into the MessagePack stream.
Definition vl_msgpack_io.c:560
vl_msgpack_type errorType
Definition vl_msgpack_io.h:55
VL_API vl_msgpack_iter vlMsgPackIODecodeToDOM(vl_msgpack_decoder *decoder, vl_msgpack *dest, vl_msgpack_iter parent, const void *key, vl_memsize_t keyLen)
Decodes MessagePack data into a DOM.
Definition vl_msgpack_io.c:1031
vl_msgpack_io_error error
Definition vl_msgpack_io.h:404
VL_API void vlMsgPackIOEncodeFromDOM(vl_msgpack_encoder *encoder, vl_msgpack *src, vl_msgpack_iter curIter)
Encodes from a MessagePack DOM.
Definition vl_msgpack_io.c:567
vl_msgpack_io_error error
Definition vl_msgpack_io.h:54
VL_API void vlMsgPackIOEncodeArrayEnd(vl_msgpack_encoder *enc)
Ends encoding an array in the MessagePack stream.
Definition vl_msgpack_io.c:238
A MessagePack decoder.
Definition vl_msgpack_io.h:399
MessagePack Format Encoder State.
Definition vl_msgpack_io.h:48
VL_BOOL_T vl_bool_t
Definition vl_numtypes.h:191
VL_STRUCTURE_INDEX_T vl_dsidx_t
Index type for data structures.
Definition vl_numtypes.h:75
VL_F32_T vl_float32_t
32-bit floating point number type.
Definition vl_numtypes.h:173
VL_ULARGE_T vl_ularge_t
Largest available unsigned integer type.
Definition vl_numtypes.h:136
VL_STRUCTURE_OFFSET_T vl_dsoffs_t
Byte offset type for data structures.
Definition vl_numtypes.h:70
VL_ILARGE_T vl_ilarge_t
Largest available signed integer type.
Definition vl_numtypes.h:140
A virtual stack allocator.
Definition vl_stack.h:38