/*//=============================================================== << I/O BUFFER >> PRGM : B4nFter FILE : IOBUFFER.HPP DESC : ±âº» I/O ¹öÆÛ INIT BUILT DATE : 2005. 11. 21 LAST BUILT DATE : 2005. 11. 29 Copyright¨Ï 2002~2009 B4nFter (b4nfter@gmail.com) and Co-Writers. All Rights Reserved. *///=============================================================== #pragma once /////////////////////////////////////////////////////////////////// // INCLUDE /////////////////////////////////////////////////////////////////// #include "SYSBASEBASE.H" /////////////////////////////////////////////////////////////////// // DEFINE /////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// // DECLARATION /////////////////////////////////////////////////////////////////// //*--------------------------------------------------------------- // TYPE : CLASS // NAME : CIoBuffer //*--------------------------------------------------------------- // DESC : ±âº» I/O ¹öÆÛ // PRGM : B4nFter //*--------------------------------------------------------------- class CIoBuffer { private: LPBYTE m_lpbtBuffer; CIoBuffer* m_lpIoBufferNextNode; // ¹öÆÛ ¿¬°á¸®½ºÆ®¸¦ ±¸¼ºÇÏ´Â °æ¿ì¿¡ »ç¿ë°¡´ÉÇÑ ÂüÁ¶ Æ÷ÀÎÅÍ INT m_iBufferSize; INT m_iBufferHeadPtr; // ¹öÆÛ¿¡¼­ ¹ÞÀº µ¥ÀÌÅ͸¦ ¼Ò¸ðÇÑ À§Ä¡¸¦ ³ªÅ¸³»´Â Æ÷ÀÎÅÍ INT m_iBufferTailPtr; // ¹öÆÛ¿¡¼­ ¹ÞÀº µ¥ÀÌÅÍÀÇ ¸¶Áö¸· À§Ä¡¸¦ ³ªÅ¸³»´Â Æ÷ÀÎÅÍ BOOL m_bLockState; // ¹öÆÛÀÇ Àá±Ý»óÅ (ÇÊ¿äÇÑ °æ¿ì¸¸ »ç¿ë) INT m_iType; // ¹öÆÛÀÇ Å¸ÀÔ (ÇÊ¿äÇÑ °æ¿ì¸¸ »ç¿ë) LPVOID m_lpParam; public: CIoBuffer(); virtual ~CIoBuffer(); BOOL Initialize(INT uBufferSize, CIoBuffer* lpIoBufferNextNode = NULL); VOID Finalize(); VOID Reset(); CIoBuffer* GetIoBufferNextNode() { return m_lpIoBufferNextNode; } VOID SetIoBufferNextNode(CIoBuffer* lpIoBufferNode) { m_lpIoBufferNextNode = lpIoBufferNode; } BOOL GetLockState() { return m_bLockState; } VOID SetLockState(BOOL bLockState) { m_bLockState = bLockState; } LPBYTE GetBuffer() { return m_lpbtBuffer; } INT GetBufferSize() { return m_iBufferSize; } BOOL SetBuffer(LPBYTE lpbtBuffer, INT iBufferSize); INT GetBufferHeadPtr() { return m_iBufferHeadPtr; } VOID SetBufferHeadPtr(INT iHeadBufferPtr) { m_iBufferHeadPtr = iHeadBufferPtr; } VOID AddBufferHeadPtr(INT iHeadBufferPtr) { m_iBufferHeadPtr += iHeadBufferPtr; } INT& RefBufferHeadPtr() { return m_iBufferHeadPtr; } INT GetBufferTailPtr() { return m_iBufferTailPtr; } VOID SetBufferTailPtr(INT iTailBufferPtr) { m_iBufferTailPtr = iTailBufferPtr; } VOID AddBufferTailPtr(INT iTailBufferPtr) { m_iBufferTailPtr += iTailBufferPtr; } INT& RefBufferTailPtr() { return m_iBufferTailPtr; } inline LPBYTE GetFreeBuffer(INT& iBufferSize); INT GetFreeBufferSize() { return m_iBufferSize - m_iBufferTailPtr; } // µ¥ÀÌÅͰ¡ µé¾îÀÖÁö ¾ÊÀº ºó ¹öÆÛÀÇ Å©±â¸¦ ¸®ÅÏ INT GetType() { return m_iType; } VOID SetType(INT iType) { m_iType = iType; } LPVOID GetParam() { return m_lpParam; } VOID SetParam(LPVOID lpParam) { m_lpParam = lpParam; } }; /////////////////////////////////////////////////////////////////// // IMPLEMENTATION /////////////////////////////////////////////////////////////////// //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CIoBuffer::CIoBuffer //*--------------------------------------------------------------- // DESC : »ý¼ºÀÚ // PARM : N/A // RETV : N/A // PRGM : B4nFter //*--------------------------------------------------------------- inline CIoBuffer::CIoBuffer() { m_lpbtBuffer = NULL; m_lpIoBufferNextNode = NULL; m_iBufferSize = 0; m_iType = -1; m_lpParam = NULL; Reset(); } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CIoBuffer::~CIoBuffer //*--------------------------------------------------------------- // DESC : ¼Ò¸êÀÚ // PARM : N/A // RETV : N/A // PRGM : B4nFter //*--------------------------------------------------------------- inline CIoBuffer::~CIoBuffer() { Finalize(); } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CIoBuffer::Initialize //*--------------------------------------------------------------- // DESC : °´Ã¼ °ü·Ã ÀÚ¿øµéÀ» ÃʱâÈ­ // PARM : 1 . uBufferSize - µ¿ÀûÀ¸·Î »ý¼ºÇÒ ¹öÆÛÀÇ Å©±â // 2 . lpIoBufferNode - ¹öÆÛ°´Ã¼¿Í ¿¬°áµÉ ¿ÜºÎ ¹öÆÛÀÇ Æ÷ÀÎÅÍ (ÇÊ¿äÇÑ °æ¿ì¸¸ »ç¿ë) // RETV : TRUE - ¼º°ø / FALSE - ½ÇÆÐ // PRGM : B4nFter //*--------------------------------------------------------------- inline BOOL CIoBuffer::Initialize(INT uBufferSize, CIoBuffer* lpIoBufferNextNode) { if (!uBufferSize || m_lpbtBuffer) { return FALSE; } m_lpbtBuffer = NEW BYTE[uBufferSize]; m_lpIoBufferNextNode = lpIoBufferNextNode; m_iBufferSize = uBufferSize; Reset(); return TRUE; } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CIoBuffer::Finalize //*--------------------------------------------------------------- // DESC : °´Ã¼ °ü·Ã ÀÚ¿øµéÀ» ÇØÁ¦ // PARM : N/A // RETV : N/A // PRGM : B4nFter //*--------------------------------------------------------------- inline VOID CIoBuffer::Finalize() { SAFE_DELETEARRAY(m_lpbtBuffer); m_iBufferSize = 0; m_iBufferHeadPtr = 0; m_iBufferTailPtr = 0; } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CIoBuffer::Reset //*--------------------------------------------------------------- // DESC : °´Ã¼°ü·Ã ÀÚ¿ø ÃʱâÈ­ // PARM : N/A // RETV : N/A // PRGM : B4nFter //*--------------------------------------------------------------- inline VOID CIoBuffer::Reset() { m_iBufferHeadPtr = 0; m_iBufferTailPtr = 0; m_bLockState = FALSE; } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CIoBuffer::SetBuffer //*--------------------------------------------------------------- // DESC : ¹öÆÛ¸¦ ƯÁ¤ µ¥ÀÌÅÍ·Î ¼¼ÆÃ // PARM : 1 . lpbtBuffer - ¼¼ÆÃÇÒ ¹öÆÛ // 2 . iBufferSize - ¼¼ÆÃÇÒ ¹öÆÛÀÇ Å©±â // RETV : TRUE - ¼º°ø / FALSE - ½ÇÆÐ // PRGM : B4nFter //*--------------------------------------------------------------- inline BOOL CIoBuffer::SetBuffer(LPBYTE lpbtBuffer, INT iBufferSize) { if (!lpbtBuffer || 0 >= iBufferSize || !m_lpbtBuffer) { BASE_RETURN(FALSE); } if (GetFreeBufferSize() < iBufferSize) { BASE_RETURN(FALSE); } ::memcpy_s(m_lpbtBuffer + m_iBufferTailPtr, GetFreeBufferSize(), lpbtBuffer, iBufferSize); AddBufferTailPtr(iBufferSize); return TRUE; } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CIoBuffer::GetFreeBuffer //*--------------------------------------------------------------- // DESC : »ç¿ë °¡´ÉÇÑ ¹öÆÛÀÇ ½ÃÀÛ Æ÷ÀÎÅÍ¿Í »ç¿ë °¡´ÉÇÑ Å©±â¸¦ ¹Ýȯ // PARM : 1 . iBufferSize - »ç¿ë °¡´ÉÇÑ ¹öÆÛÀÇ Å©±â¸¦ ¹Ýȯ¹Þ±â À§ÇÑ º¯¼ö // RETV : »ç¿ë °¡´ÉÇÑ ¹öÆÛÀÇ ½ÃÀÛ Æ÷ÀÎÅÍ // PRGM : B4nFter //*--------------------------------------------------------------- inline LPBYTE CIoBuffer::GetFreeBuffer(INT& iBufferSize) { if (m_lpbtBuffer) { iBufferSize = m_iBufferSize - m_iBufferTailPtr; return m_lpbtBuffer + m_iBufferTailPtr; } return NULL; }