//リングバッファ //各メソッド呼び出しの排他処理は呼び出し側で管理する //リングバッファのサイズは必要に応じて自動的に拡大するが、 //使い方を誤ると際限なくサイズが大きくなるので注意する class KbRingBuffer { private: HANDLE m_hHeap; BYTE* m_pBuffer; //リングバッファ DWORD m_dwReadPos; //読み取り位置 DWORD m_dwWritePos; //書き込み位置 DWORD m_dwWritten; //書き込んだバッファのサイズ DWORD m_dwBufferSize;//リングバッファのサイズ DWORD m_dwAllocSize; //実際にメモリを割り当てたサイズ DWORD m_dwLockedSize; void __fastcall Expand(DWORD dwNewSize);//リングバッファのサイズを拡大する public: KbRingBuffer(DWORD dwInitialSize = 0); ~KbRingBuffer(void); inline void __fastcall Reset(void){ m_dwReadPos = m_dwWritePos = m_dwWritten = 0; } inline DWORD __fastcall GetSize(void)const{//リングバッファのサイズ return m_dwBufferSize; } inline DWORD __fastcall GetWritten(void)const{//書き込んだバッファのサイズ return m_dwWritten; } inline DWORD __fastcall GetRemain(void)const{//書き込み可能な残りのバッファサイズ return m_dwBufferSize-m_dwWritten; } void __fastcall SetSize(DWORD dwSize);//リングバッファのサイズを設定する DWORD __fastcall Read(BYTE* buf, DWORD dwSize); void __fastcall Write(const BYTE* buf, DWORD dwSize); BYTE* __fastcall LockBuffer(BYTE** ppBuf,DWORD dwSize); void __fastcall UnlockBuffer(void); };