240 lines
7 KiB
C++
240 lines
7 KiB
C++
|
|
/*//===============================================================
|
|||
|
|
|
|||
|
|
<< I/O BUFFER >>
|
|||
|
|
|
|||
|
|
PRGM : B4nFter
|
|||
|
|
|
|||
|
|
FILE : IOBUFFER.HPP
|
|||
|
|
DESC : <EFBFBD>⺻ I/O <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INIT BUILT DATE : 2005. 11. 21
|
|||
|
|
LAST BUILT DATE : 2005. 11. 29
|
|||
|
|
|
|||
|
|
Copyright<EFBFBD><EFBFBD> 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 : <20>⺻ I/O <20><><EFBFBD><EFBFBD>
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
class CIoBuffer
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
LPBYTE m_lpbtBuffer;
|
|||
|
|
CIoBuffer* m_lpIoBufferNextNode; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ḯ<EFBFBD><E1B8AE>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>쿡 <20><><EFBFBD>밡<EFBFBD><EBB0A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INT m_iBufferSize;
|
|||
|
|
INT m_iBufferHeadPtr; // <20><><EFBFBD>ۿ<EFBFBD><DBBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҹ<EFBFBD><D2B8><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INT m_iBufferTailPtr; // <20><><EFBFBD>ۿ<EFBFBD><DBBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BOOL m_bLockState; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD> (<28>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>츸 <20><><EFBFBD><EFBFBD>)
|
|||
|
|
INT m_iType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8> (<28>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>츸 <20><><EFBFBD><EFBFBD>)
|
|||
|
|
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; } // <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<>⸦ <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
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 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// 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 : <20>Ҹ<EFBFBD><D2B8><EFBFBD>
|
|||
|
|
// PARM : N/A
|
|||
|
|
// RETV : N/A
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
inline CIoBuffer::~CIoBuffer()
|
|||
|
|
{
|
|||
|
|
Finalize();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// TYPE : FUNCTION
|
|||
|
|
// NAME : CIoBuffer::Initialize
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// DESC : <20><>ü <20><><EFBFBD><EFBFBD> <20>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
|
// PARM : 1 . uBufferSize - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
|||
|
|
// 2 . lpIoBufferNode - <20><><EFBFBD>۰<EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>츸 <20><><EFBFBD><EFBFBD>)
|
|||
|
|
// RETV : TRUE - <20><><EFBFBD><EFBFBD> / FALSE - <20><><EFBFBD><EFBFBD>
|
|||
|
|
// 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 : <20><>ü <20><><EFBFBD><EFBFBD> <20>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// 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 : <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD> <20>ڿ<EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
|
// 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 : <20><><EFBFBD>۸<EFBFBD> Ư<><C6AF> <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// PARM : 1 . lpbtBuffer - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// 2 . iBufferSize - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
|||
|
|
// RETV : TRUE - <20><><EFBFBD><EFBFBD> / FALSE - <20><><EFBFBD><EFBFBD>
|
|||
|
|
// 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 : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<>⸦ <20><>ȯ
|
|||
|
|
// PARM : 1 . iBufferSize - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<>⸦ <20><>ȯ<EFBFBD>ޱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// RETV : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
inline LPBYTE CIoBuffer::GetFreeBuffer(INT& iBufferSize)
|
|||
|
|
{
|
|||
|
|
if (m_lpbtBuffer) {
|
|||
|
|
iBufferSize = m_iBufferSize - m_iBufferTailPtr;
|
|||
|
|
return m_lpbtBuffer + m_iBufferTailPtr;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|