mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-03-14 18:10:30 +01:00
unpacker::unpacker() accepts initial buffer size
git-svn-id: file:///Users/frsyuki/project/msgpack-git/svn/x@82 5a5092ae-2292-43ba-b2d5-dcab9c1a2731
This commit is contained in:
parent
3398686816
commit
8be25a7f32
@ -178,13 +178,14 @@ private:
|
||||
};
|
||||
|
||||
|
||||
unpacker::unpacker() :
|
||||
unpacker::unpacker(size_t initial_buffer_size) :
|
||||
m_buffer(NULL),
|
||||
m_used(0),
|
||||
m_free(0),
|
||||
m_off(0),
|
||||
m_zone(new zone()),
|
||||
m_ctx(new context(&*m_zone))
|
||||
m_ctx(new context(&*m_zone)),
|
||||
m_initial_buffer_size(initial_buffer_size)
|
||||
{ }
|
||||
|
||||
|
||||
@ -199,14 +200,14 @@ void unpacker::expand_buffer(size_t len)
|
||||
if(m_off == 0) {
|
||||
size_t next_size;
|
||||
if(m_used != 0) { next_size = (m_used + m_free) * 2; }
|
||||
else { next_size = UNPACKER_INITIAL_BUFFER_SIZE; }
|
||||
else { next_size = m_initial_buffer_size; }
|
||||
while(next_size < len + m_used) { next_size *= 2; }
|
||||
|
||||
m_buffer = m_zone->realloc(m_buffer, next_size);
|
||||
m_free = next_size - m_used;
|
||||
|
||||
} else {
|
||||
size_t next_size = UNPACKER_INITIAL_BUFFER_SIZE;
|
||||
size_t next_size = m_initial_buffer_size;
|
||||
while(next_size < len + m_used - m_off) { next_size *= 2; }
|
||||
|
||||
char* tmp = m_zone->malloc(next_size);
|
||||
|
@ -23,16 +23,13 @@
|
||||
#include <memory>
|
||||
#include <stdexcept>
|
||||
|
||||
#ifndef MSGPACK_UNPACKER_INITIAL_BUFFER_SIZE
|
||||
#define MSGPACK_UNPACKER_INITIAL_BUFFER_SIZE 8*1024
|
||||
#ifndef MSGPACK_UNPACKER_DEFAULT_INITIAL_BUFFER_SIZE
|
||||
#define MSGPACK_UNPACKER_DEFAULT_INITIAL_BUFFER_SIZE 8*1024
|
||||
#endif
|
||||
|
||||
namespace msgpack {
|
||||
|
||||
|
||||
static const size_t UNPACKER_INITIAL_BUFFER_SIZE = MSGPACK_UNPACKER_INITIAL_BUFFER_SIZE;
|
||||
|
||||
|
||||
struct unpack_error : public std::runtime_error {
|
||||
unpack_error(const std::string& msg) :
|
||||
std::runtime_error(msg) { }
|
||||
@ -41,7 +38,7 @@ struct unpack_error : public std::runtime_error {
|
||||
|
||||
class unpacker {
|
||||
public:
|
||||
unpacker();
|
||||
unpacker(size_t initial_buffer_size = MSGPACK_UNPACKER_DEFAULT_INITIAL_BUFFER_SIZE);
|
||||
~unpacker();
|
||||
|
||||
public:
|
||||
@ -139,6 +136,8 @@ private:
|
||||
struct context;
|
||||
context* m_ctx;
|
||||
|
||||
const size_t m_initial_buffer_size;
|
||||
|
||||
private:
|
||||
void expand_buffer(size_t len);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user