agrippa1994

CDataStream

Oct 18th, 2012
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. // (c) agrippa1994
  2. #include <Windows.h>
  3. #include <stdio.h>
  4.  
  5. class CDataStream
  6. {
  7. public:
  8.     CDataStream(int MaxSize_=1024);
  9.     ~CDataStream();
  10.  
  11.     CDataStream& operator <<(int);
  12.     CDataStream& operator <<(float);
  13.     CDataStream& operator <<(void*);
  14.  
  15.     CDataStream& operator >>(int&);
  16.     CDataStream& operator >>(float&);
  17.     CDataStream& operator >>(void*);
  18.  
  19.     void Free();
  20. private:
  21.     BYTE* Data;
  22.     int BytePos;
  23.     int MaxSize;
  24.     template<typename T>bool CopyData(T Data);
  25.     template<typename T> T ExtractData();
  26. };
  27. CDataStream::CDataStream(int MaxSize_) : MaxSize(MaxSize_), BytePos(0)
  28. {
  29.     Data = (BYTE*)malloc(MaxSize);
  30.     memset(this->Data,0,sizeof(this->Data));
  31. }
  32. CDataStream::~CDataStream()
  33. {
  34.     free((BYTE*)Data);
  35. }
  36. CDataStream& CDataStream::operator <<(int iVar)
  37. {
  38.     this->CopyData<int>(iVar);
  39.     return *this;
  40. }
  41. CDataStream& CDataStream::operator <<(float fVar)
  42. {
  43.     this->CopyData<float>(fVar);
  44.     return *this;
  45. }
  46.  
  47. CDataStream& CDataStream::operator <<(void* ptrVar)
  48. {
  49.     this->CopyData<void*>(ptrVar);
  50.     return *this;
  51. }
  52.  
  53. CDataStream& CDataStream::operator >>(int& iVar)
  54. {
  55.     iVar=this->ExtractData<int>();
  56.     return *this;
  57. }
  58. CDataStream& CDataStream::operator >>(float& fVar)
  59. {
  60.     fVar=this->ExtractData<float>();
  61.     return *this;
  62. }
  63.  
  64. CDataStream& CDataStream::operator >>(void* ptrVar)
  65. {
  66.     ptrVar=this->ExtractData<void*>();
  67.     return *this;
  68. }
  69.  
  70. template<typename T> bool CDataStream::CopyData(T tData)
  71. {
  72.     if((BytePos+(int)sizeof(T))>MaxSize)
  73.         return false;
  74.     *(T*)(Data+BytePos)=tData;
  75.     this->BytePos+=sizeof(T);
  76.     return true;
  77. }
  78.  
  79. template<typename T> T CDataStream::ExtractData()
  80. {
  81.     if(BytePos<sizeof(T))
  82.         return 0;
  83.     this->BytePos-=sizeof(T);
  84.     return *(T*)(Data+BytePos);
  85. }
  86.  
  87. void CDataStream::Free()
  88. {
  89.     this->~CDataStream();
  90. }
  91.  
  92. /*
  93.     Beispiel für den Datenstream:
  94. */
  95. int main()
  96. {
  97.     CDataStream Stream;
  98.     int Out[20]={0};
  99.  
  100.     for(int i=0;i<20;i++)
  101.         Stream << i;
  102.  
  103.     for(int i=0;i<20;i++)
  104.     {
  105.         Stream >> Out[i];
  106.         printf("%d\n",Out[i]);
  107.     }
  108.  
  109.     getchar();
  110.     return 1;
  111. }
Add Comment
Please, Sign In to add comment