-
Notifications
You must be signed in to change notification settings - Fork 903
v1_1_c_overview
This document is under construction.
Include msgpack.h header file.
#include <msgpack.h>
Link msgpack library.
When you use UNIX, the library name is libmsgpack.a
. When you use Windows, the library name is msgpack.lib
for static link and msgpack_import.lib
for dynamic link.
When you pack your data, use buffers and a packer.
msgpack_sbuffer sbuf; /* buffer */
msgpack_packer pk; /* packer */
msgpack_sbuffer_init(&sbuf); /* initialize buffer */
msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write); /* initialize packer */
The buffers store packed byte data. The buffers are used by packer. msgpack-c provides four buffers. sbuffer, fbuffer, zbuffer, and vrefbuffer.
sbuffer
is a simple memory buffer. It uses malloc
, realloc
, and free
. fbuffer
is a file buffer. It uses FILE structure in C standard library. zbuffer
is a compressing buffer using zlib. So packed data is compressed. vrefbuffer
is an iovec based buffer. So packed data is stored as iovec.
All buffers have at least three functions. Initialize, Destroy, and Write.
Buffer | Initialize | Destroy | Write |
---|---|---|---|
sbuffer | msgpack_sbuffer_init | msgpack_sbuffer_destroy | msgpack_sbuffer_write |
zbuffer | msgpack_zbuffer_init | msgpack_zbuffer_destroy | msgpack_zbuffer_write |
vrefbuffer | msgpack_vrefbuffer_init | msgpack_vrefbuffer_destroy | msgpack_vrefbuffer_write |
fbuffer | fopen | fclose | msgpack_fbuffer_write |
When you initialize packer, you pass a pointer to the buffer as the second argument, and pass write function pointer as the third argument. Packer calls the write function through the pointer internally.
The buffers have additional buffer specific functions. Please check the source code.
Packer provides packing mechanism. Packer requires a buffer. In order to use packer, call msgpack_packer_init() as follows:
msgpack_sbuffer sbuf; /* buffer */
msgpack_packer pk; /* packer */
msgpack_sbuffer_init(&sbuf); /* initialize buffer */
msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write); /* initialize packer */
After initializing, you can call the following packing functions:
static int msgpack_pack_char(msgpack_packer* pk, char d);
static int msgpack_pack_signed_char(msgpack_packer* pk, signed char d);
static int msgpack_pack_short(msgpack_packer* pk, short d);
static int msgpack_pack_int(msgpack_packer* pk, int d);
static int msgpack_pack_long(msgpack_packer* pk, long d);
static int msgpack_pack_long_long(msgpack_packer* pk, long long d);
static int msgpack_pack_unsigned_char(msgpack_packer* pk, unsigned char d);
static int msgpack_pack_unsigned_short(msgpack_packer* pk, unsigned short d);
static int msgpack_pack_unsigned_int(msgpack_packer* pk, unsigned int d);
static int msgpack_pack_unsigned_long(msgpack_packer* pk, unsigned long d);
static int msgpack_pack_unsigned_long_long(msgpack_packer* pk, unsigned long long d);
static int msgpack_pack_uint8(msgpack_packer* pk, uint8_t d);
static int msgpack_pack_uint16(msgpack_packer* pk, uint16_t d);
static int msgpack_pack_uint32(msgpack_packer* pk, uint32_t d);
static int msgpack_pack_uint64(msgpack_packer* pk, uint64_t d);
static int msgpack_pack_int8(msgpack_packer* pk, int8_t d);
static int msgpack_pack_int16(msgpack_packer* pk, int16_t d);
static int msgpack_pack_int32(msgpack_packer* pk, int32_t d);
static int msgpack_pack_int64(msgpack_packer* pk, int64_t d);
static int msgpack_pack_fix_uint8(msgpack_packer* pk, uint8_t d);
static int msgpack_pack_fix_uint16(msgpack_packer* pk, uint16_t d);
static int msgpack_pack_fix_uint32(msgpack_packer* pk, uint32_t d);
static int msgpack_pack_fix_uint64(msgpack_packer* pk, uint64_t d);
static int msgpack_pack_fix_int8(msgpack_packer* pk, int8_t d);
static int msgpack_pack_fix_int16(msgpack_packer* pk, int16_t d);
static int msgpack_pack_fix_int32(msgpack_packer* pk, int32_t d);
static int msgpack_pack_fix_int64(msgpack_packer* pk, int64_t d);
static int msgpack_pack_float(msgpack_packer* pk, float d);
static int msgpack_pack_double(msgpack_packer* pk, double d);
static int msgpack_pack_nil(msgpack_packer* pk);
static int msgpack_pack_true(msgpack_packer* pk);
static int msgpack_pack_false(msgpack_packer* pk);
static int msgpack_pack_array(msgpack_packer* pk, size_t n);
static int msgpack_pack_map(msgpack_packer* pk, size_t n);
static int msgpack_pack_str(msgpack_packer* pk, size_t l);
static int msgpack_pack_str_body(msgpack_packer* pk, const void* b, size_t l);
static int msgpack_pack_v4raw(msgpack_packer* pk, size_t l);
static int msgpack_pack_v4raw_body(msgpack_packer* pk, const void* b, size_t l);
static int msgpack_pack_bin(msgpack_packer* pk, size_t l);
static int msgpack_pack_bin_body(msgpack_packer* pk, const void* b, size_t l);
static int msgpack_pack_ext(msgpack_packer* pk, size_t l, int8_t type);
static int msgpack_pack_ext_body(msgpack_packer* pk, const void* b, size_t l);
int msgpack_pack_object(msgpack_packer* pk, msgpack_object d);
Those functions are corresponding to msgpack format
-
Home
- Q&A
- v2.0.x or later
- v1.1.x - v1.4.x
- v1.0.x