Go to the documentation of this file.00001
00002
00003
00004
00005
00008
00009 #ifndef lgrVariableLengthData_H_
00010 #define lgrVariableLengthData_H_
00011
00012 #include <memory.h>
00013
00014 namespace MAKLogger
00015 {
00016
00020 class DT_DLL_LGRSIM DtLgrVariableLengthData
00021 {
00022 public:
00023 DtLgrVariableLengthData() :
00024 myData(0),
00025 mySize()
00026 {
00027 }
00028
00030 DtLgrVariableLengthData(void const * inData, unsigned long inSize) :
00031 myData(0),
00032 mySize(0)
00033 {
00034 setData(inData,inSize);
00035 }
00036
00037
00038 DtLgrVariableLengthData(DtLgrVariableLengthData const & rhs) :
00039 myData(0),
00040 mySize(0)
00041 {
00042 setData(rhs.data(),rhs.size());
00043 }
00044
00045
00046 ~DtLgrVariableLengthData()
00047 {
00048 delete[] (char*)myData;
00049 myData = 0;
00050 mySize = 0;
00051 }
00052
00054 bool operator<(const DtLgrVariableLengthData& rhs) const
00055 {
00056 if(size() < rhs.size()) return true;
00057 if(size() > rhs.size()) return false;
00058 int count1 = size();
00059 int count2 = rhs.size();
00060 int count = (count1<count2)?count1:count2;
00061 const char* data1 = (const char*)data();
00062 const char* data2 = (const char*)rhs.data();
00063 for(int i = 0;i < count;++i,++data1,++data2)
00064 {
00065 if(*data1 > *data2) return false;
00066 if(*data1 < *data2) return true;
00067 }
00068 return count1 < count2;
00069 }
00070
00072 bool operator==(const DtLgrVariableLengthData& rhs) const
00073 {
00074 if(size() != rhs.size()) return false;
00076 int integerCompares = size() >> 2;
00077 const unsigned int* intPtr1 = (const unsigned int*)data();
00078 const unsigned int* intPtr2 = (const unsigned int*)rhs.data();
00079 while(integerCompares--)
00080 {
00081 if(*intPtr1 != *intPtr2) return false;
00082 ++intPtr1;
00083 ++intPtr2;
00084 }
00085 int byteCompares = size() & 0x3;
00086 const unsigned char* bytePtr1 = (const unsigned char*)intPtr1;
00087 const unsigned char* bytePtr2 = (const unsigned char*)intPtr2;
00088 while(byteCompares)
00089 {
00090 if(*bytePtr1 != *bytePtr2) return false;
00091 ++bytePtr1;
00092 ++bytePtr2;
00093 }
00094 return true;
00095 }
00096
00098 DtLgrVariableLengthData& operator=(DtLgrVariableLengthData const & rhs)
00099 {
00100 setData(rhs.data(),rhs.size());
00101 return *this;
00102 }
00103
00107 void const * data() const {return myData;}
00108 void* data() {return myData;}
00109 unsigned int size() const {return mySize;}
00110
00112 void setData(void const * inData, unsigned long inSize)
00113 {
00114 delete[] (char*)myData;
00115 if(inSize != 0)
00116 {
00117 myData = (void*)new char[inSize];
00118 }
00119 else
00120 {
00121 myData = 0;
00122 }
00123 mySize = inSize;
00124 memcpy(myData,inData,mySize);
00125 }
00126
00130 void setDataPointer(void* inData, unsigned long inSize)
00131 {
00132 myData = inData;
00133 mySize = inSize;
00134 }
00135
00139 void takeDataPointer(void* inData, unsigned long inSize)
00140 {
00141 delete[] (char*)myData;
00142 myData = inData;
00143 mySize = inSize;
00144 }
00145
00149 void releaseDataPointer()
00150 {
00151 myData = 0;
00152 mySize = 0;
00153 }
00154
00155 private:
00156 void* myData;
00157 unsigned long mySize;
00158
00159 };
00160 }
00161
00162 #endif