From 602971408ba8c2c1490bd87d2987ab65900a5297 Mon Sep 17 00:00:00 2001 From: frsyuki Date: Sun, 30 May 2010 03:02:40 +0900 Subject: cpp: move source files into src/ directory --- cpp/src/msgpack/sbuffer.h | 90 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 cpp/src/msgpack/sbuffer.h (limited to 'cpp/src/msgpack/sbuffer.h') diff --git a/cpp/src/msgpack/sbuffer.h b/cpp/src/msgpack/sbuffer.h new file mode 100644 index 0000000..57f424a --- /dev/null +++ b/cpp/src/msgpack/sbuffer.h @@ -0,0 +1,90 @@ +/* + * MessagePack for C simple buffer implementation + * + * Copyright (C) 2008-2009 FURUHASHI Sadayuki + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MSGPACK_SBUFFER_H__ +#define MSGPACK_SBUFFER_H__ + +#include +#include + +#ifndef MSGPACK_SBUFFER_INIT_SIZE +#define MSGPACK_SBUFFER_INIT_SIZE 8192 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct msgpack_sbuffer { + size_t size; + char* data; + size_t alloc; +} msgpack_sbuffer; + +static inline void msgpack_sbuffer_init(msgpack_sbuffer* sbuf) +{ + memset(sbuf, 0, sizeof(msgpack_sbuffer)); +} + +static inline void msgpack_sbuffer_destroy(msgpack_sbuffer* sbuf) +{ + free(sbuf->data); +} + +static inline int msgpack_sbuffer_write(void* data, const char* buf, unsigned int len) +{ + msgpack_sbuffer* sbuf = (msgpack_sbuffer*)data; + + if(sbuf->alloc - sbuf->size < len) { + size_t nsize = (sbuf->alloc) ? + sbuf->alloc * 2 : MSGPACK_SBUFFER_INIT_SIZE; + + while(nsize < sbuf->size + len) { nsize *= 2; } + + void* tmp = realloc(sbuf->data, nsize); + if(!tmp) { return -1; } + + sbuf->data = (char*)tmp; + sbuf->alloc = nsize; + } + + memcpy(sbuf->data + sbuf->size, buf, len); + sbuf->size += len; + return 0; +} + +static inline char* msgpack_sbuffer_release(msgpack_sbuffer* sbuf) +{ + char* tmp = sbuf->data; + sbuf->size = 0; + sbuf->data = NULL; + sbuf->alloc = 0; + return tmp; +} + +static inline void msgpack_sbuffer_clear(msgpack_sbuffer* sbuf) +{ + sbuf->size = 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/sbuffer.h */ + -- cgit v1.2.1 From e49f091b4ebc7abbad92848502a6e06d4e9d6cfa Mon Sep 17 00:00:00 2001 From: frsyuki Date: Tue, 1 Jun 2010 07:10:17 +0900 Subject: cpp: adds msgpack_sbuffer_new and msgpack_sbuffer_free --- cpp/src/msgpack/sbuffer.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'cpp/src/msgpack/sbuffer.h') diff --git a/cpp/src/msgpack/sbuffer.h b/cpp/src/msgpack/sbuffer.h index 57f424a..caff2e8 100644 --- a/cpp/src/msgpack/sbuffer.h +++ b/cpp/src/msgpack/sbuffer.h @@ -46,6 +46,18 @@ static inline void msgpack_sbuffer_destroy(msgpack_sbuffer* sbuf) free(sbuf->data); } +static inline msgpack_sbuffer* msgpack_sbuffer_new(void) +{ + return (msgpack_sbuffer*)calloc(1, sizeof(msgpack_sbuffer)); +} + +static inline void msgpack_sbuffer_free(msgpack_sbuffer* sbuf) +{ + if(sbuf == NULL) { return; } + msgpack_sbuffer_destroy(sbuf); + free(sbuf); +} + static inline int msgpack_sbuffer_write(void* data, const char* buf, unsigned int len) { msgpack_sbuffer* sbuf = (msgpack_sbuffer*)data; -- cgit v1.2.1 From 3d3af3284e3a5fd03395b6694fd745491509aa64 Mon Sep 17 00:00:00 2001 From: frsyuki Date: Tue, 1 Jun 2010 08:43:30 +0900 Subject: cpp: adds Doxyfile --- cpp/src/msgpack/sbuffer.h | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'cpp/src/msgpack/sbuffer.h') diff --git a/cpp/src/msgpack/sbuffer.h b/cpp/src/msgpack/sbuffer.h index caff2e8..778dea7 100644 --- a/cpp/src/msgpack/sbuffer.h +++ b/cpp/src/msgpack/sbuffer.h @@ -21,15 +21,17 @@ #include #include -#ifndef MSGPACK_SBUFFER_INIT_SIZE -#define MSGPACK_SBUFFER_INIT_SIZE 8192 -#endif - #ifdef __cplusplus extern "C" { #endif +/** + * @defgroup msgpack_sbuffer Simple buffer + * @ingroup msgpack_buffer + * @{ + */ + typedef struct msgpack_sbuffer { size_t size; char* data; @@ -58,6 +60,10 @@ static inline void msgpack_sbuffer_free(msgpack_sbuffer* sbuf) free(sbuf); } +#ifndef MSGPACK_SBUFFER_INIT_SIZE +#define MSGPACK_SBUFFER_INIT_SIZE 8192 +#endif + static inline int msgpack_sbuffer_write(void* data, const char* buf, unsigned int len) { msgpack_sbuffer* sbuf = (msgpack_sbuffer*)data; @@ -94,6 +100,9 @@ static inline void msgpack_sbuffer_clear(msgpack_sbuffer* sbuf) sbuf->size = 0; } +/** @} */ + + #ifdef __cplusplus } #endif -- cgit v1.2.1