summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/CBuffer.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-reader/CBuffer.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/CBuffer.cpp53
1 files changed, 32 insertions, 21 deletions
diff --git a/noncore/apps/opie-reader/CBuffer.cpp b/noncore/apps/opie-reader/CBuffer.cpp
index db52476..526b25f 100644
--- a/noncore/apps/opie-reader/CBuffer.cpp
+++ b/noncore/apps/opie-reader/CBuffer.cpp
@@ -2,34 +2,45 @@
2 2
3CBuffer& CBuffer::operator=(const tchar*sztmp) 3CBufferBase& CBufferBase::assign(const void* sztmp, size_t ms)
4{ 4{
5 int i; 5 if (ms*membersize > len)
6 for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i]; 6 {
7 (*this)[i] = '\0'; 7 delete [] buffer;
8 return *this; 8 buffer = new unsigned char[len = ms*membersize];
9 }
10 memcpy(buffer, sztmp, ms*membersize);
11 return *this;
12}
13
14CBufferBase::CBufferBase(size_t ms, size_t n = 16) : len(n), membersize(ms)
15{
16 buffer = new unsigned char[len*membersize];
17 memset(buffer, 0, len*membersize);
9} 18}
10 19
11tchar& CBuffer::operator[](int i) 20void* CBufferBase::operator[](int i)
12{ 21{
13 if (i >= len) 22 if ((i+1)*membersize > len)
14 { 23 {
15 tchar *newbuff = new tchar[i+1]; 24 unsigned char* oldbuffer = buffer;
16 memcpy(newbuff,buffer,sizeof(tchar)*len); 25 buffer = new unsigned char[(i+1)*membersize];
17 delete [] buffer; 26 memcpy(buffer, oldbuffer, len);
18 buffer = newbuff; 27 memset(buffer+len, 0, (i+1)*membersize-len);
19 len = i+1; 28 len = (i+1)*membersize;
29 delete [] oldbuffer;
20 } 30 }
21 return buffer[i]; 31 return buffer+i*membersize;
22} 32}
23 33
24size_t& CSizeBuffer::operator[](int i) 34size_t CBufferBase::bstrlen(unsigned char* _buffer = NULL)
25{ 35{
26 if (i >= len) 36 if (_buffer == NULL) _buffer = buffer;
37 unsigned char* zero = new unsigned char[membersize];
38 memset(zero,0,membersize);
39 unsigned char* element = _buffer;
40 while (memcmp(element, zero, membersize) != 0)
27 { 41 {
28 size_t *newbuff = new size_t[i+1]; 42 element += membersize;
29 memcpy(newbuff,buffer,sizeof(size_t)*len);
30 delete [] buffer;
31 buffer = newbuff;
32 len = i+1;
33 } 43 }
34 return buffer[i]; 44 delete [] zero;
45 return (element - _buffer)/membersize;
35} 46}