summaryrefslogtreecommitdiff
path: root/c
diff options
context:
space:
mode:
Diffstat (limited to 'c')
-rw-r--r--c/object.c24
-rw-r--r--c/object.h32
-rw-r--r--c/pack.h58
-rw-r--r--c/zone.c2
4 files changed, 67 insertions, 49 deletions
diff --git a/c/object.c b/c/object.c
index 7a41064..6376438 100644
--- a/c/object.c
+++ b/c/object.c
@@ -98,42 +98,42 @@ static inline msgpack_object msgpack_unpack_array(unpack_user* u, unsigned int n
{
msgpack_object o;
o.type = MSGPACK_OBJECT_ARRAY;
- o.via.container.size = 0;
- o.via.container.ptr = msgpack_zone_malloc(u->z, n*sizeof(msgpack_object));
- if(o.via.container.ptr == NULL) { u->failed = true; }
+ o.via.array.size = 0;
+ o.via.array.ptr = msgpack_zone_malloc(u->z, n*sizeof(msgpack_object));
+ if(o.via.array.ptr == NULL) { u->failed = true; }
return o;
}
static inline void msgpack_unpack_array_item(unpack_user* u, msgpack_object* c, msgpack_object o)
{
if(u->failed) { return; }
- c->via.container.ptr[ c->via.container.size++ ] = o;
+ c->via.array.ptr[ c->via.array.size++ ] = o;
}
static inline msgpack_object msgpack_unpack_map(unpack_user* u, unsigned int n)
{
msgpack_object o;
o.type = MSGPACK_OBJECT_MAP;
- o.via.container.size = 0;
- o.via.container.ptr = msgpack_zone_malloc(u->z, n*2*sizeof(msgpack_object));
- if(o.via.container.ptr == NULL) { u->failed = true; }
+ o.via.map.size = 0;
+ o.via.map.ptr = msgpack_zone_malloc(u->z, n*sizeof(msgpack_object_kv));
+ if(o.via.map.ptr == NULL) { u->failed = true; }
return o;
}
static inline void msgpack_unpack_map_item(unpack_user* u, msgpack_object* c, msgpack_object k, msgpack_object v)
{
if(u->failed) { return; }
- c->via.container.ptr[ c->via.container.size ] = k;
- c->via.container.ptr[ c->via.container.size+1 ] = v;
- ++c->via.container.size;
+ c->via.map.ptr[c->via.map.size].key = k;
+ c->via.map.ptr[c->via.map.size].val = v;
+ ++c->via.map.size;
}
static inline msgpack_object msgpack_unpack_raw(unpack_user* u, const char* b, const char* p, unsigned int l)
{
msgpack_object o;
o.type = MSGPACK_OBJECT_RAW;
- o.via.ref.ptr = p;
- o.via.ref.size = l;
+ o.via.raw.ptr = p;
+ o.via.raw.size = l;
u->referenced = true;
return o;
}
diff --git a/c/object.h b/c/object.h
index 1b60c57..b590ebe 100644
--- a/c/object.h
+++ b/c/object.h
@@ -41,19 +41,31 @@ typedef enum {
struct _msgpack_object;
+struct _msgpack_object_kv;
+
+typedef struct {
+ uint32_t size;
+ struct _msgpack_object* ptr;
+} msgpack_object_array;
+
+typedef struct {
+ uint32_t size;
+ struct _msgpack_object_kv* ptr;
+} msgpack_object_map;
+
+typedef struct {
+ uint32_t size;
+ const char* ptr;
+} msgpack_object_raw;
+
typedef union {
bool boolean;
uint64_t u64;
int64_t i64;
double dec;
- struct {
- struct _msgpack_object* ptr;
- uint32_t size;
- } container;
- struct {
- const char* ptr;
- uint32_t size;
- } ref;
+ msgpack_object_array array;
+ msgpack_object_map map;
+ msgpack_object_raw raw;
} msgpack_object_union;
typedef struct _msgpack_object {
@@ -61,6 +73,10 @@ typedef struct _msgpack_object {
msgpack_object_union via;
} msgpack_object;
+typedef struct _msgpack_object_kv {
+ msgpack_object key;
+ msgpack_object val;
+} msgpack_object_kv;
typedef enum {
MSGPACK_OBJECT_PARSE_SUCCESS = 0,
diff --git a/c/pack.h b/c/pack.h
index 752cbc4..a510eff 100644
--- a/c/pack.h
+++ b/c/pack.h
@@ -21,6 +21,7 @@
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
+#include "msgpack/pack_define.h"
#ifdef __cplusplus
extern "C" {
@@ -34,42 +35,43 @@ typedef struct {
msgpack_pack_write_t callback;
} msgpack_pack_t;
-void msgpack_pack_init(msgpack_pack_t* ctx, void* data, msgpack_pack_write_t callback);
+static void msgpack_pack_init(msgpack_pack_t* ctx, void* data, msgpack_pack_write_t callback);
-msgpack_pack_t* msgpack_pack_new(void* data, msgpack_pack_write_t callback);
-void msgpack_pack_free(msgpack_pack_t* ctx);
+static msgpack_pack_t* msgpack_pack_new(void* data, msgpack_pack_write_t callback);
-int msgpack_pack_short(msgpack_pack_t* ctx, short d);
-int msgpack_pack_int(msgpack_pack_t* ctx, int d);
-int msgpack_pack_long(msgpack_pack_t* ctx, long d);
-int msgpack_pack_long_long(msgpack_pack_t* ctx, long long d);
-int msgpack_pack_unsigned_short(msgpack_pack_t* ctx, unsigned short d);
-int msgpack_pack_unsigned_int(msgpack_pack_t* ctx, unsigned int d);
-int msgpack_pack_unsigned_long(msgpack_pack_t* ctx, unsigned long d);
-int msgpack_pack_unsigned_long_long(msgpack_pack_t* ctx, unsigned long long d);
+static void msgpack_pack_free(msgpack_pack_t* ctx);
-int msgpack_pack_uint8(msgpack_pack_t* ctx, uint8_t d);
-int msgpack_pack_uint16(msgpack_pack_t* ctx, uint16_t d);
-int msgpack_pack_uint32(msgpack_pack_t* ctx, uint32_t d);
-int msgpack_pack_uint64(msgpack_pack_t* ctx, uint64_t d);
-int msgpack_pack_int8(msgpack_pack_t* ctx, int8_t d);
-int msgpack_pack_int16(msgpack_pack_t* ctx, int16_t d);
-int msgpack_pack_int32(msgpack_pack_t* ctx, int32_t d);
-int msgpack_pack_int64(msgpack_pack_t* ctx, int64_t d);
+static int msgpack_pack_short(msgpack_pack_t* ctx, short d);
+static int msgpack_pack_int(msgpack_pack_t* ctx, int d);
+static int msgpack_pack_long(msgpack_pack_t* ctx, long d);
+static int msgpack_pack_long_long(msgpack_pack_t* ctx, long long d);
+static int msgpack_pack_unsigned_short(msgpack_pack_t* ctx, unsigned short d);
+static int msgpack_pack_unsigned_int(msgpack_pack_t* ctx, unsigned int d);
+static int msgpack_pack_unsigned_long(msgpack_pack_t* ctx, unsigned long d);
+static int msgpack_pack_unsigned_long_long(msgpack_pack_t* ctx, unsigned long long d);
-int msgpack_pack_float(msgpack_pack_t* ctx, float d);
-int msgpack_pack_double(msgpack_pack_t* ctx, double d);
+static int msgpack_pack_uint8(msgpack_pack_t* ctx, uint8_t d);
+static int msgpack_pack_uint16(msgpack_pack_t* ctx, uint16_t d);
+static int msgpack_pack_uint32(msgpack_pack_t* ctx, uint32_t d);
+static int msgpack_pack_uint64(msgpack_pack_t* ctx, uint64_t d);
+static int msgpack_pack_int8(msgpack_pack_t* ctx, int8_t d);
+static int msgpack_pack_int16(msgpack_pack_t* ctx, int16_t d);
+static int msgpack_pack_int32(msgpack_pack_t* ctx, int32_t d);
+static int msgpack_pack_int64(msgpack_pack_t* ctx, int64_t d);
-int msgpack_pack_nil(msgpack_pack_t* ctx);
-int msgpack_pack_true(msgpack_pack_t* ctx);
-int msgpack_pack_false(msgpack_pack_t* ctx);
+static int msgpack_pack_float(msgpack_pack_t* ctx, float d);
+static int msgpack_pack_double(msgpack_pack_t* ctx, double d);
-int msgpack_pack_array(msgpack_pack_t* ctx, unsigned int n);
+static int msgpack_pack_nil(msgpack_pack_t* ctx);
+static int msgpack_pack_true(msgpack_pack_t* ctx);
+static int msgpack_pack_false(msgpack_pack_t* ctx);
-int msgpack_pack_map(msgpack_pack_t* ctx, unsigned int n);
+static int msgpack_pack_array(msgpack_pack_t* ctx, unsigned int n);
-int msgpack_pack_raw(msgpack_pack_t* ctx, size_t l);
-int msgpack_pack_raw_body(msgpack_pack_t* ctx, const void* b, size_t l);
+static int msgpack_pack_map(msgpack_pack_t* ctx, unsigned int n);
+
+static int msgpack_pack_raw(msgpack_pack_t* ctx, size_t l);
+static int msgpack_pack_raw_body(msgpack_pack_t* ctx, const void* b, size_t l);
diff --git a/c/zone.c b/c/zone.c
index a41bb44..ccd702d 100644
--- a/c/zone.c
+++ b/c/zone.c
@@ -41,7 +41,7 @@ void msgpack_zone_free(msgpack_zone* z)
if(z->array) {
size_t i;
for(i=0; i <= z->ntail; ++i) {
- free(z->array[i].ptr);
+ free(z->array[i].alloc);
}
}
free(z);