lgrVariableLengthData.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
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       //Dupcliate object (with new copy of the object).
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

Document ID: Generated on Tue Oct 11 19:41:03 EDT 2011 from SVN revision 107422
Copyright © 2005-2011 VT MÄK Inc. All Rights Reserved (www.mak.com)