1.1 --- a/core/CDataPack.cpp Wed Feb 14 01:25:45 2007 +0000
1.2 +++ b/core/CDataPack.cpp Wed Feb 14 11:03:03 2007 +0000
1.3 @@ -2,7 +2,7 @@
1.4 #include <string.h>
1.5 #include "CDataPack.h"
1.6
1.7 -#define DATAPACK_INITIAL_SIZE 512
1.8 +#define DATAPACK_INITIAL_SIZE 4//512
1.9
1.10 CDataPack::CDataPack()
1.11 {
1.12 @@ -45,36 +45,47 @@
1.13
1.14 size_t CDataPack::CreateMemory(size_t size, void **addr)
1.15 {
1.16 + CheckSize(sizeof(size_t) + size);
1.17 size_t pos = m_curptr - m_pBase;
1.18
1.19 - m_pBase = (char *)realloc(m_pBase, size);
1.20 - m_curptr = m_pBase + pos;
1.21 - m_capacity = size;
1.22 + *(size_t *)m_curptr = size;
1.23 + m_curptr += sizeof(size_t);
1.24
1.25 if (addr)
1.26 {
1.27 - *addr = m_pBase;
1.28 + *addr = m_curptr;
1.29 }
1.30
1.31 + m_curptr += size;
1.32 + m_size += sizeof(size_t) + size;
1.33 +
1.34 return pos;
1.35 }
1.36
1.37 void CDataPack::PackCell(cell_t cell)
1.38 {
1.39 - CheckSize(sizeof(cell_t));
1.40 + CheckSize(sizeof(size_t) + sizeof(cell_t));
1.41 +
1.42 + *(size_t *)m_curptr = sizeof(cell_t);
1.43 + m_curptr += sizeof(size_t);
1.44
1.45 *(cell_t *)m_curptr = cell;
1.46 m_curptr += sizeof(cell_t);
1.47 - m_size += sizeof(cell_t);
1.48 +
1.49 + m_size += sizeof(size_t) + sizeof(cell_t);
1.50 }
1.51
1.52 void CDataPack::PackFloat(float val)
1.53 {
1.54 - CheckSize(sizeof(float));
1.55 + CheckSize(sizeof(size_t) + sizeof(float));
1.56 +
1.57 + *(size_t *)m_curptr = sizeof(float);
1.58 + m_curptr += sizeof(size_t);
1.59
1.60 *(float *)m_curptr = val;
1.61 m_curptr += sizeof(float);
1.62 - m_size += sizeof(float);
1.63 +
1.64 + m_size += sizeof(size_t) + sizeof(float);
1.65 }
1.66
1.67 void CDataPack::PackString(const char *string)
1.68 @@ -118,10 +129,17 @@
1.69
1.70 cell_t CDataPack::ReadCell() const
1.71 {
1.72 - if (!IsReadable(sizeof(cell_t)))
1.73 + if (!IsReadable(sizeof(size_t) + sizeof(cell_t)))
1.74 {
1.75 return 0;
1.76 }
1.77 + if (*reinterpret_cast<size_t *>(m_curptr) != sizeof(cell_t))
1.78 + {
1.79 + return 0;
1.80 + }
1.81 +
1.82 + m_curptr += sizeof(size_t);
1.83 +
1.84 cell_t val = *reinterpret_cast<cell_t *>(m_curptr);
1.85 m_curptr += sizeof(cell_t);
1.86 return val;
1.87 @@ -129,10 +147,17 @@
1.88
1.89 float CDataPack::ReadFloat() const
1.90 {
1.91 - if (!IsReadable(sizeof(float)))
1.92 + if (!IsReadable(sizeof(size_t) + sizeof(float)))
1.93 {
1.94 return 0;
1.95 }
1.96 + if (*reinterpret_cast<size_t *>(m_curptr) != sizeof(float))
1.97 + {
1.98 + return 0;
1.99 + }
1.100 +
1.101 + m_curptr += sizeof(size_t);
1.102 +
1.103 float val = *reinterpret_cast<float *>(m_curptr);
1.104 m_curptr += sizeof(float);
1.105 return val;
1.106 @@ -147,7 +172,7 @@
1.107 {
1.108 if (!IsReadable(sizeof(size_t)))
1.109 {
1.110 - return 0;
1.111 + return NULL;
1.112 }
1.113
1.114 size_t real_len = *(size_t *)m_curptr;
1.115 @@ -174,3 +199,30 @@
1.116 {
1.117 return m_curptr;
1.118 }
1.119 +
1.120 +void *CDataPack::ReadMemory(size_t *size) const
1.121 +{
1.122 + if (!IsReadable(sizeof(size_t)))
1.123 + {
1.124 + return NULL;
1.125 + }
1.126 +
1.127 + size_t bytecount = *(size_t *)m_curptr;
1.128 + m_curptr += sizeof(size_t);
1.129 +
1.130 + if (!IsReadable(bytecount))
1.131 + {
1.132 + return NULL;
1.133 + }
1.134 +
1.135 + void *ptr = m_curptr;
1.136 +
1.137 + if (size)
1.138 + {
1.139 + *size = bytecount;
1.140 + }
1.141 +
1.142 + m_curptr += bytecount;
1.143 +
1.144 + return ptr;
1.145 +}