00001 #include "CBuffer.h"
00002
00003 CBufferBase& CBufferBase::assign(const void* sztmp, size_t ms)
00004 {
00005 if (ms*membersize > len)
00006 {
00007 delete [] buffer;
00008 buffer = new unsigned char[len = ms*membersize];
00009 }
00010 memcpy(buffer, sztmp, len);
00011 return *this;
00012 }
00013
00014 CBufferBase::CBufferBase(size_t ms, size_t n) : len(n*ms), membersize(ms)
00015 {
00016 buffer = new unsigned char[len];
00017 memset(buffer, 0, len);
00018 }
00019
00020 void* CBufferBase::operator[](int i)
00021 {
00022 if ((i+1)*membersize > len)
00023 {
00024 unsigned char* oldbuffer = buffer;
00025 buffer = new unsigned char[(i+1)*membersize];
00026 memcpy(buffer, oldbuffer, len);
00027 memset(buffer+len, 0, (i+1)*membersize-len);
00028 len = (i+1)*membersize;
00029 delete [] oldbuffer;
00030 }
00031 return buffer+i*membersize;
00032 }
00033
00034 size_t CBufferBase::bstrlen(unsigned char* _buffer)
00035 {
00036 if (_buffer == NULL) _buffer = buffer;
00037 unsigned char* zero = new unsigned char[membersize];
00038 memset(zero,0,membersize);
00039 unsigned char* element = _buffer;
00040 while (memcmp(element, zero, membersize) != 0)
00041 {
00042 element += membersize;
00043 }
00044 delete [] zero;
00045 return (element - _buffer)/membersize;
00046 }