00001 #ifndef __CBUFFER_H 00002 #define __CBUFFER_H 00003 00004 #include <stdlib.h> 00005 #include <string.h> 00006 #include "config.h" 00007 00008 00009 class CBufferBase 00010 { 00011 protected: 00012 size_t len; 00013 unsigned char *buffer; 00014 size_t membersize; 00015 CBufferBase(const CBufferBase&); 00016 public: 00017 CBufferBase& assign(const void* sztmp, size_t ms); 00018 void* data() { return buffer; } 00019 CBufferBase(size_t ms, size_t n = 16); 00020 ~CBufferBase() { delete [] buffer; } 00021 void* operator[](int i); 00022 size_t bstrlen(unsigned char* _buffer = NULL); 00023 size_t totallen() { return len; } 00024 }; 00025 00026 template<class T> 00027 class CBufferFace 00028 { 00029 CBufferBase m_buffer; 00030 protected: 00031 CBufferFace(const CBufferFace&); 00032 public: 00033 CBufferFace& operator=(const T* sztmp) 00034 { 00035 m_buffer.assign(sztmp, m_buffer.bstrlen(sztmp)); 00036 return *this; 00037 } 00038 void assign(const T* sztmp, size_t n) 00039 { 00040 m_buffer.assign(sztmp, n); 00041 } 00042 size_t length() { return m_buffer.bstrlen(); } 00043 size_t totallen() { return m_buffer.totallen(); } 00044 T* data() { return (T*)m_buffer.data(); } 00045 CBufferFace(size_t n = 16) : m_buffer(sizeof(T), n) {} 00046 T& operator[](int i) 00047 { 00048 return *((T*)m_buffer[i]); 00049 } 00050 }; 00051 00052 typedef CBufferFace<tchar> CBuffer; 00053 typedef CBufferFace<unsigned long> CSizeBuffer; 00054 00055 #endif
1.4.2