summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/CBuffer.cpp
Side-by-side diff
Diffstat (limited to 'noncore/apps/opie-reader/CBuffer.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-reader/CBuffer.cpp51
1 files changed, 31 insertions, 20 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
@@ -1,35 +1,46 @@
#include "CBuffer.h"
-CBuffer& CBuffer::operator=(const tchar*sztmp)
+CBufferBase& CBufferBase::assign(const void* sztmp, size_t ms)
{
- int i;
- for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i];
- (*this)[i] = '\0';
+ if (ms*membersize > len)
+ {
+ delete [] buffer;
+ buffer = new unsigned char[len = ms*membersize];
+ }
+ memcpy(buffer, sztmp, ms*membersize);
return *this;
}
-tchar& CBuffer::operator[](int i)
+CBufferBase::CBufferBase(size_t ms, size_t n = 16) : len(n), membersize(ms)
+{
+ buffer = new unsigned char[len*membersize];
+ memset(buffer, 0, len*membersize);
+}
+
+void* CBufferBase::operator[](int i)
{
- if (i >= len)
+ if ((i+1)*membersize > len)
{
- tchar *newbuff = new tchar[i+1];
- memcpy(newbuff,buffer,sizeof(tchar)*len);
- delete [] buffer;
- buffer = newbuff;
- len = i+1;
+ unsigned char* oldbuffer = buffer;
+ buffer = new unsigned char[(i+1)*membersize];
+ memcpy(buffer, oldbuffer, len);
+ memset(buffer+len, 0, (i+1)*membersize-len);
+ len = (i+1)*membersize;
+ delete [] oldbuffer;
}
- return buffer[i];
+ return buffer+i*membersize;
}
-size_t& CSizeBuffer::operator[](int i)
+size_t CBufferBase::bstrlen(unsigned char* _buffer = NULL)
{
- if (i >= len)
+ if (_buffer == NULL) _buffer = buffer;
+ unsigned char* zero = new unsigned char[membersize];
+ memset(zero,0,membersize);
+ unsigned char* element = _buffer;
+ while (memcmp(element, zero, membersize) != 0)
{
- size_t *newbuff = new size_t[i+1];
- memcpy(newbuff,buffer,sizeof(size_t)*len);
- delete [] buffer;
- buffer = newbuff;
- len = i+1;
+ element += membersize;
}
- return buffer[i];
+ delete [] zero;
+ return (element - _buffer)/membersize;
}