// RingBuffer.h: interface for the RingBuffer class. // ////////////////////////////////////////////////////////////////////// #ifndef __RINGBUFFER_H__ #define __RINGBUFFER_H__ #pragma once //======================================================================================================================= /// ¸µ¹öÆÛ ±¸Çö Ŭ·¡½º /** @author Kim Min Wook < taiyo@webzen.co.kr > @since 2004. 8. 2 @remarks - ¸µ¹öÆÛ¿¡ µ¥ÀÌÅ͸¦ put, getÇÏ´Â utility library - Put( BYTE * pData, DWORD dwSize ) : ÇöÀç À§Ä¡ÀÇ ¹öÆÛ(m_pRear)¿¡ µ¥ÀÌÅ͸¦ dwSize¸¸Å­ »ðÀÔ - Get( BYTE * pData, DWORD dwSize ) : ÇöÀç À§Ä¡ÀÇ ¹öÆÛ(m_pRear)¿¡¼­ µ¥ÀÌÅ͸¦ dwSize¸¸Å­ ÃßÃâ - Peek( BYTE * pData, DWORD dwSize ) : ÇöÀç À§Ä¡ÀÇ ¹öÆÛ(m_pRear)¿¡¼­ µ¥ÀÌÅ͸¦ dwSize¸¸Å­ ÃßÃâ( m_pRear¿¡ +dwSizeÇÏÁö ¾ÊÀ½ ) @todo - templateÀ¸·Î À¯¿¬ÇÏ°Ô ÇÒ ÇÊ¿ä ÀÖÀ½(^O^)/ */ //======================================================================================================================= namespace util { class RingBuffer { public: RingBuffer(); virtual ~RingBuffer(); VOID InitBuffer( DWORD dwBufferSize ); VOID ReleaseBuffer(); VOID ResetBuffer(); BOOL Put( BYTE * pData, DWORD dwSize ); BOOL Get( BYTE * pData, DWORD dwSize ); BOOL Peek( BYTE * pData, DWORD dwSize ); inline DWORD GetAvailableSize() { return m_dwAvailableSize; } inline DWORD GetOccupiedSize() { return m_dwMaxBufferSize - m_dwAvailableSize; } inline BYTE * GetFrontPtr() { return m_pFront; } private: BYTE * m_pBuffer; BYTE * m_pHead; BYTE * m_pTail; BYTE * m_pFront; BYTE * m_pRear; DWORD m_dwMaxBufferSize; DWORD m_dwAvailableSize; DWORD m_dwExtraBufferSize; // Tail µÚ¿¡ ºÙ´Â ¿©ºÐÀÇ ¹öÆÛ»çÀÌÁî }; } #endif // __RINGBUFFER_H__