#pragma once

//!	FIFOバッファ
class CFifoBuffer
{
public:
	CFifoBuffer();
	CFifoBuffer(CFifoBuffer &other);
	virtual ~CFifoBuffer();

	//	初期化
	void InitBuf(int bufLen);
	void Close();

	//	読み書き
	int WriteBuf(char *data,int dataLen);	//!<	書き込み
	int ReadBuf(char *data,int dataLen);	//!<	読み出し
	int PeekBuf(char *data,int dataLen);	//!<	読み出し(バッファを消さない)
	void Clear();							//!<	クリア

	//	バッファアクセス
	char *GetWriteBuffer(int *bufLen);		//!<	書き込み用バッファ取得
	char *GetReadBuffer(int *bufLen);		//!<	読み出しようバッファ取得
	
	//	書き込み終了
	void SetWritedLen(int len);				//!<	書き込み終了
	void SetReadedLen(int len);				//!<	読み込み終了

	//	状態
	int IsFull();							//!<	バッファが一杯か？
	int IsEmpty();							//!<	バッファが空か？
	int GetInBuf();							//!<	どれだけ使用しているか
	int GetFreeBuf();						//!<	どれだけ空いているか

protected:
	char	*m_buf;
	int		m_bufLen;
	int		m_inBufLen;
};
