BufferItem.hpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma once
  2. namespace ECOM::Utility::IOBuffer
  3. {
  4. class InBuffer;
  5. class OutBuffer;
  6. //-----------------------------------------------------------------------------
  7. // BufferItem
  8. //-----------------------------------------------------------------------------
  9. class BufferItem
  10. {
  11. friend class InBuffer;
  12. friend class OutBuffer;
  13. public:
  14. int Index;
  15. int BufferSize;
  16. BYTE * Data;
  17. private:
  18. bool AutoDelete;
  19. public:
  20. inline BufferItem (int Alloc)
  21. {
  22. if (Alloc > 0)
  23. Data = new BYTE [Alloc];
  24. else
  25. Data = nullptr;
  26. AutoDelete = true;
  27. Index = 0;
  28. BufferSize = Alloc;
  29. }
  30. inline BufferItem ()
  31. {
  32. Data = nullptr;
  33. AutoDelete = false;
  34. Index = 0;
  35. BufferSize = 0;
  36. }
  37. inline void Clear ()
  38. {
  39. if (AutoDelete)
  40. delete Data;
  41. Data = nullptr;
  42. }
  43. inline ~BufferItem ()
  44. {
  45. Clear ();
  46. }
  47. inline int GetCount () const
  48. {
  49. return BufferSize;
  50. }
  51. public:
  52. static BufferItem * BorrowFrom (void * Where, int Length)
  53. {
  54. BufferItem * BS = new BufferItem;
  55. BS->AutoDelete = false;
  56. BS->Data = (BYTE *) Where;
  57. BS->BufferSize = Length;
  58. return BS;
  59. }
  60. // all same except const
  61. static BufferItem * BorrowFrom (const void * Where, int Length)
  62. {
  63. BufferItem * BS = new BufferItem;
  64. BS->AutoDelete = false;
  65. BS->Data = (BYTE *) Where;
  66. BS->BufferSize = Length;
  67. return BS;
  68. }
  69. };
  70. }