#pragma once namespace ECOM::Utility::IOBuffer { class InBuffer; class OutBuffer; //----------------------------------------------------------------------------- // BufferItem //----------------------------------------------------------------------------- class BufferItem { friend class InBuffer; friend class OutBuffer; public: int Index; int BufferSize; BYTE * Data; private: bool AutoDelete; public: inline BufferItem (int Alloc) { if (Alloc > 0) Data = new BYTE [Alloc]; else Data = nullptr; AutoDelete = true; Index = 0; BufferSize = Alloc; } inline BufferItem () { Data = nullptr; AutoDelete = false; Index = 0; BufferSize = 0; } inline void Clear () { if (AutoDelete) delete Data; Data = nullptr; } inline ~BufferItem () { Clear (); } inline int GetCount () const { return BufferSize; } public: static BufferItem * BorrowFrom (void * Where, int Length) { BufferItem * BS = new BufferItem; BS->AutoDelete = false; BS->Data = (BYTE *) Where; BS->BufferSize = Length; return BS; } // all same except const static BufferItem * BorrowFrom (const void * Where, int Length) { BufferItem * BS = new BufferItem; BS->AutoDelete = false; BS->Data = (BYTE *) Where; BS->BufferSize = Length; return BS; } }; }