00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "nnbuffer.h"
00021 #include "platform.h"
00022
00023 #define CHUNK_SIZE 8192
00024
00025 NewNet::Buffer::~Buffer()
00026 {
00027 free(m_Ptr);
00028 }
00029
00030 void
00031 NewNet::Buffer::append(const unsigned char * data, size_t n)
00032 {
00033 if(m_Left < n)
00034 {
00035 if(m_Pos + m_Left >= n)
00036 {
00037 memmove(m_Ptr, m_Ptr + m_Pos, m_Count);
00038 m_Left += m_Pos;
00039 m_Pos = 0;
00040 }
00041 else
00042 {
00043 int newSize = (((n + m_Count + m_Pos) / CHUNK_SIZE) + 1) * CHUNK_SIZE;
00044 unsigned char * newPtr = (unsigned char *)realloc(m_Ptr, newSize);
00045 assert(newPtr != 0);
00046 m_Ptr = newPtr;
00047 m_Left = newSize - m_Count - m_Pos;
00048 }
00049 }
00050
00051 memcpy(m_Ptr + m_Pos + m_Count, data, n);
00052 m_Count += n;
00053 m_Left -= n;
00054 }