/*!
	UTF8文字列用メモリプール
*/
#pragma once
#include "SimpleMemoryPool.h"
#include "SyncObject.h"

#define	UTF8STRING_POOL_BLOCK_SIZE	1024	//	最低確保サイズ
#define	UTF8STRING_CHUNK_SIZE		256		//	確保単位(256K)

/*!
	文字列用メモリプール
*/
class CUTF8StringMemoryPool
{
public:
	CUTF8StringMemoryPool(void);
	virtual ~CUTF8StringMemoryPool(void);

	//!	有効にする
	void EnableMemoryPool();

	//!	確保する
	unsigned char *Alloc(int size);

	//!	解放する
	void Free(unsigned char *block);

	//!	文字列数取得
	int GetAllocedCount();

	//!	プールサイズ取得
	int GetPoolSize();

protected:
	////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	////////////////////////////////////////////////////////////////////////////////
	//!	クリティカルセクション
	CSyncCriticalSection	m_scopeLock;

	//!	メモリプール
	CSimpleMemoryPool		m_memoryPool;

	//!	有効フラグ
	int						m_enable;

	//!	使用数
	int						m_stringCount;
};


//!	グローバル
extern CUTF8StringMemoryPool g_utf8StringMemoryPool;
