// Buffer.h: CBuffer クラスのインターフェイス
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_BUFFER_H__8CD40D58_2734_42A0_A3A0_9E616832CC40__INCLUDED_)
#define AFX_BUFFER_H__8CD40D58_2734_42A0_A3A0_9E616832CC40__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define	CBUFFER_DEFAULT_SIZE	32768

class CBuffer  
{
public:
	void Alloc(int size);
	void SetGrowSize(int size);
	void BlockCopy(int offset,char *data,int len);
	void ReSize(int size);
	void Append(char *data,int size);
	CBuffer(int size=CBUFFER_DEFAULT_SIZE);
	CBuffer(CBuffer &other);
	virtual ~CBuffer();
	int GetSize();
	char * GetPtr();
	void Remove(int start,int size);

	operator char*();
	operator unsigned char*();
	operator CString();
	void operator=(CString other);
	void operator=(CBuffer &other);
	void operator+=(CString other);
	void operator+=(CBuffer &other);
	void operator+=(char *other);
	void operator+=(char other);

	////////////////////////////////////////////////////////////////////////////////////////
	//	ファイル
	////////////////////////////////////////////////////////////////////////////////////////
	//!	内部データを保存
	int SaveToFile(CString path);

	//!	全て読み込み
	int LoadFromFile(CString path);

private:
	void Init();
	unsigned char	*m_buffer;
	int				m_usingSize;
	int				m_bufferSize;
	int				m_growSize;
};

#endif // !defined(AFX_BUFFER_H__8CD40D58_2734_42A0_A3A0_9E616832CC40__INCLUDED_)
