/*!
	IStringHelper.h

	IString/IStringArray インタフェース・ラッパクラスの定義
*/
#pragma once
#include "types/StringTypes.h"
#include "UTF8String.h"
#include "UTF8StringArray.h"


////////////////////////////////////////////////////////////////////////////////////////////////////////
//	インタフェース・ラッパ
////////////////////////////////////////////////////////////////////////////////////////////////////////
/*!
	文字列ラッパクラス
*/
class CIStringWrap : public IString
{
public:
	/////////////////////////////////////////////////////////////////
	//	コンストラクタ
	/////////////////////////////////////////////////////////////////
	/*!
		コンストラクタ
	*/
	CIStringWrap() : m_str(m_buffer)
	{
	}

	/*!
		コンストラクタ
	*/
	CIStringWrap(CUTF8String &str) : m_str(str)
	{
	}

	/*!
		コンストラクタ
	*/
	CIStringWrap(LPCU8STR str) : m_str(m_buffer)
	{
		m_buffer = str;
	}

	/////////////////////////////////////////////////////////////////
	//	操作
	/////////////////////////////////////////////////////////////////
	/*!
		文字列を設定
	*/
	virtual void SetString(LPCU8STR str, int length)
	{
		m_str.SetString(str, length);
	}

	/*!
		取得
	*/
	virtual LPCU8STR GetString() const
	{
		return m_str.GetString();
	}

	/*!
		長さ取得
	*/
	virtual int GetLength() const
	{
		return m_str.GetLength();
	}

	/*!
		空？
	*/
	int IsEmpty()
	{
		return m_str.IsEmpty();
	}

	/*!
		取得
	*/
	operator CUTF8String()
	{
		return m_str;
	}

	/*!
		設定
	*/
	void Attach(CUTF8String &str)
	{
		m_str = str;
	}

protected:
	/////////////////////////////////////////////////////////////////
	//	メンバ変数
	/////////////////////////////////////////////////////////////////
	//!	参照
	CUTF8String	&m_str;

	//!	内部バッファ
	CUTF8String	m_buffer;
};


/*!
	文字列配列ラッパクラス
*/
class CIStringArrayWrap : public IStringArray
{
public:
	CIStringArrayWrap(CUTF8StringArray &arr) :
	  m_array(arr)
	{
	};

	//!	初期化
	virtual void Clear()
	{
		m_array.RemoveAll();
	};

	//!	サイズ設定
	virtual void SetSize(int size)
	{
		m_array.SetSize(size);
	};

	//!	サイズ取得
	virtual int GetSize()
	{
		return m_array.GetCount();
	};

	//!	保持している文字列を取得
	virtual void AddString(LPCU8STR str)
	{
		m_array.Add(CUTF8String(str));
	};

	//!	保持している文字列を取得
	virtual LPCU8STR GetString(int index)
	{
		return m_array[index];
	};

	//!	保持している文字列を取得
	virtual void SetString(int index, LPCU8STR str)
	{
		m_array[index] = str;
	};

	/////////////////////////////////////////////////////////////////////
	//	補助
	/////////////////////////////////////////////////////////////////////
	//!	CUTF8StringArray取得
	CUTF8StringArray &GetStringArray() { return m_array; };

protected:
	//!	保持中の配列
	CUTF8StringArray	&m_array;
};
