summaryrefslogtreecommitdiff
path: root/cpp/src/msgpack/vrefbuffer.h
diff options
context:
space:
mode:
authorUENISHI Kota <kuenishi+github@gmail.com>2010-06-03 00:14:19 +0900
committerUENISHI Kota <kuenishi+github@gmail.com>2010-06-03 00:14:19 +0900
commit8ecaf7ad4ce4185e81fae775332282ed551fa886 (patch)
tree68b7fb5c875f5620033ac8fa4e046bfdd51f78d0 /cpp/src/msgpack/vrefbuffer.h
parent49f3872d047624b1995b8c60edec8bad35429fd3 (diff)
parentd4049fe593ae4465e7a258d138c2166571a0f1a7 (diff)
downloadmsgpack-python-8ecaf7ad4ce4185e81fae775332282ed551fa886.tar.gz
Merge branch 'master' of ssh://github.com/msgpack/msgpack
Diffstat (limited to 'cpp/src/msgpack/vrefbuffer.h')
-rw-r--r--cpp/src/msgpack/vrefbuffer.h45
1 files changed, 37 insertions, 8 deletions
diff --git a/cpp/src/msgpack/vrefbuffer.h b/cpp/src/msgpack/vrefbuffer.h
index a08e0d0..123499d 100644
--- a/cpp/src/msgpack/vrefbuffer.h
+++ b/cpp/src/msgpack/vrefbuffer.h
@@ -19,6 +19,7 @@
#define MSGPACK_VREFBUFFER_H__
#include "msgpack/zone.h"
+#include <stdlib.h>
#ifndef _WIN32
#include <sys/uio.h>
@@ -29,19 +30,17 @@ struct iovec {
};
#endif
-#ifndef MSGPACK_VREFBUFFER_REF_SIZE
-#define MSGPACK_VREFBUFFER_REF_SIZE 32
-#endif
-
-#ifndef MSGPACK_VREFBUFFER_CHUNK_SIZE
-#define MSGPACK_VREFBUFFER_CHUNK_SIZE 8192
-#endif
-
#ifdef __cplusplus
extern "C" {
#endif
+/**
+ * @defgroup msgpack_vrefbuffer Vectored Referencing buffer
+ * @ingroup msgpack_buffer
+ * @{
+ */
+
struct msgpack_vrefbuffer_chunk;
typedef struct msgpack_vrefbuffer_chunk msgpack_vrefbuffer_chunk;
@@ -63,10 +62,21 @@ typedef struct msgpack_vrefbuffer {
} msgpack_vrefbuffer;
+#ifndef MSGPACK_VREFBUFFER_REF_SIZE
+#define MSGPACK_VREFBUFFER_REF_SIZE 32
+#endif
+
+#ifndef MSGPACK_VREFBUFFER_CHUNK_SIZE
+#define MSGPACK_VREFBUFFER_CHUNK_SIZE 8192
+#endif
+
bool msgpack_vrefbuffer_init(msgpack_vrefbuffer* vbuf,
size_t ref_size, size_t chunk_size);
void msgpack_vrefbuffer_destroy(msgpack_vrefbuffer* vbuf);
+static inline msgpack_vrefbuffer* msgpack_vrefbuffer_new(size_t ref_size, size_t chunk_size);
+static inline void msgpack_vrefbuffer_free(msgpack_vrefbuffer* vbuf);
+
static inline int msgpack_vrefbuffer_write(void* data, const char* buf, unsigned int len);
static inline const struct iovec* msgpack_vrefbuffer_vec(const msgpack_vrefbuffer* vref);
@@ -82,6 +92,25 @@ int msgpack_vrefbuffer_migrate(msgpack_vrefbuffer* vbuf, msgpack_vrefbuffer* to)
void msgpack_vrefbuffer_clear(msgpack_vrefbuffer* vref);
+/** @} */
+
+
+msgpack_vrefbuffer* msgpack_vrefbuffer_new(size_t ref_size, size_t chunk_size)
+{
+ msgpack_vrefbuffer* vbuf = (msgpack_vrefbuffer*)malloc(sizeof(msgpack_vrefbuffer));
+ if(!msgpack_vrefbuffer_init(vbuf, ref_size, chunk_size)) {
+ free(vbuf);
+ return NULL;
+ }
+ return vbuf;
+}
+
+void msgpack_vrefbuffer_free(msgpack_vrefbuffer* vbuf)
+{
+ if(vbuf == NULL) { return; }
+ msgpack_vrefbuffer_destroy(vbuf);
+ free(vbuf);
+}
int msgpack_vrefbuffer_write(void* data, const char* buf, unsigned int len)
{