summaryrefslogtreecommitdiff
path: root/cpp/unpack.cpp
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@5a5092ae-2292-43ba-b2d5-dcab9c1a2731>2009-02-15 09:09:57 +0000
committerfrsyuki <frsyuki@5a5092ae-2292-43ba-b2d5-dcab9c1a2731>2009-02-15 09:09:57 +0000
commit4d13f614b6839ac4ca78f5526ab79e911f33ea65 (patch)
treec64a0719f7ba0176fa67bdd0eee266274be4a7da /cpp/unpack.cpp
parenta721837ed0c1b9783deb72a09d51dfad79411262 (diff)
downloadmsgpack-python-4d13f614b6839ac4ca78f5526ab79e911f33ea65.tar.gz
lang/c/msgpack: optimize zone::alloc()
git-svn-id: file:///Users/frsyuki/project/msgpack-git/svn/x@61 5a5092ae-2292-43ba-b2d5-dcab9c1a2731
Diffstat (limited to 'cpp/unpack.cpp')
-rw-r--r--cpp/unpack.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/cpp/unpack.cpp b/cpp/unpack.cpp
index a0128bb..7a0cd78 100644
--- a/cpp/unpack.cpp
+++ b/cpp/unpack.cpp
@@ -21,6 +21,7 @@
namespace msgpack {
+
struct unpacker::context {
context(zone* z)
{
@@ -98,11 +99,13 @@ void unpacker::expand_buffer(size_t len)
else { next_size = UNPACKER_INITIAL_BUFFER_SIZE; }
while(next_size < len + m_used) { next_size *= 2; }
- // FIXME realloc?
- void* tmp = malloc(next_size);
+ void* tmp = realloc(m_buffer, next_size);
if(!tmp) { throw std::bad_alloc(); }
- memcpy(tmp, m_buffer, m_used);
- free(m_buffer);
+ m_buffer = tmp;
+ //void* tmp = malloc(next_size);
+ //if(!tmp) { throw std::bad_alloc(); }
+ //memcpy(tmp, m_buffer, m_used);
+ //free(m_buffer);
m_buffer = tmp;
m_free = next_size - m_used;