diff options
author | frsyuki <frsyuki@vcore.(none)> | 2009-02-22 15:14:21 +0900 |
---|---|---|
committer | frsyuki <frsyuki@vcore.(none)> | 2009-02-22 15:14:21 +0900 |
commit | 11abec1093cf8c9914b5aeeac383d30abc1cad72 (patch) | |
tree | 2deaa42039029e5da89e16c9bcb0dcd8a42ac38a /c/zone.h | |
parent | 761b3980834e4644ce0ce57f6db13d1c93883380 (diff) | |
download | msgpack-python-11abec1093cf8c9914b5aeeac383d30abc1cad72.tar.gz |
c and c++: rewritten and integrated
Diffstat (limited to 'c/zone.h')
-rw-r--r-- | c/zone.h | 49 |
1 files changed, 44 insertions, 5 deletions
@@ -19,19 +19,58 @@ #define MSGPACK_ZONE_H__ #include <stddef.h> +#include <stdbool.h> #ifdef __cplusplus extern "C" { #endif -struct _msgpack_zone; -typedef struct _msgpack_zone msgpack_zone; +typedef struct msgpack_zone_chunk { + size_t free; + char* ptr; + void* alloc; +} msgpack_zone_chunk; -msgpack_zone* msgpack_zone_new(); -void msgpack_zone_free(msgpack_zone* z); +typedef struct msgpack_zone_finalizer { + void (*func)(void* data); + void* data; +} msgpack_zone_finalizer; -void* msgpack_zone_malloc(msgpack_zone* z, size_t size); +typedef struct msgpack_zone_chunk_array { + msgpack_zone_chunk* tail; + msgpack_zone_chunk* end; + msgpack_zone_chunk* array; +} msgpack_zone_chunk_array; + +typedef struct msgpack_zone_finalizer_array { + msgpack_zone_finalizer* tail; + msgpack_zone_finalizer* end; + msgpack_zone_finalizer* array; +} msgpack_zone_finalizer_array; + +typedef struct msgpack_zone { + msgpack_zone_chunk_array chunk_array; + msgpack_zone_finalizer_array finalizer_array; + size_t chunk_size; +} msgpack_zone; + +#ifndef MSGPACK_ZONE_CHUNK_SIZE +#define MSGPACK_ZONE_CHUNK_SIZE 2048 +#endif + +bool msgpack_zone_init(msgpack_zone* zone, size_t chunk_size); +void msgpack_zone_destroy(msgpack_zone* zone); + +msgpack_zone* msgpack_zone_new(size_t chunk_size); +void msgpack_zone_free(msgpack_zone* zone); + +void* msgpack_zone_malloc(msgpack_zone* zone, size_t size); + +bool msgpack_zone_push_finalizer(msgpack_zone* zone, + void (*func)(void* data), void* data); + +bool msgpack_zone_is_empty(msgpack_zone* zone); #ifdef __cplusplus |