/*!
	WorkspaceTypes.h

	Workspace関係の定義
	ここに宣言されているインタフェースは、今後変更されない。
*/
#pragma once
#include "types/StringTypes.h"
#include "UTF8String.h"


////////////////////////////////////////////////////////////////////////////////////////////////////////
//	CWorkspaceAccess 受け渡しインタフェース
////////////////////////////////////////////////////////////////////////////////////////////////////////
/*!
	ワークスペースへの外部アクセス
*/
class IWorkspace
{
public:
	/////////////////////////////////////////////////////////////////////////////////////
	//	初期化など
	/////////////////////////////////////////////////////////////////////////////////////
	//!	全データクリア
	virtual void Clear(LPCU8STR path) = 0;

	//!	コピー
	virtual void Copy(LPCU8STR destPath, LPCU8STR srcPath, IWorkspace *srcWorkspace=NULL) = 0;

	/////////////////////////////////////////////////////////////////////////////////////
	//	排他処理
	/////////////////////////////////////////////////////////////////////////////////////
	//!	ロック
	virtual void Lock() = 0;

	//!	アンロック
	virtual void Unlock() = 0;

	/////////////////////////////////////////////////////////////////////////////////////
	//	Keyに関する処理
	/////////////////////////////////////////////////////////////////////////////////////
	//!	データの設定
	virtual void SetKeyData(LPCU8STR path, LPCU8STR data, int noCase = FALSE) = 0;

	//!	データの取得
	virtual void GetKeyData(IStringPtr dest, LPCU8STR path, LPCU8STR defaultData, int noCase = FALSE) = 0;

	//!	データの削除
	virtual void DeleteKey(LPCU8STR path) = 0;

	//!	キー数を取得
	virtual int GetKeyCount(LPCU8STR path) = 0;

	//!	全てのキー名を文字列として取得
	virtual int GetAllKeyPair(LPCU8STR path, IStringArrayPtr keys, IStringArrayPtr datas) = 0;

	/////////////////////////////////////////////////////////////////////////////////////
	//	サブノードに関する処理
	/////////////////////////////////////////////////////////////////////////////////////
	//!	ノードを削除する
	virtual void DeleteNode(LPCU8STR path) = 0;

	//!	サブノード数を得る
	virtual int GetSubNodeCount(LPCU8STR path) = 0;

	//!	全てのサブノード名を文字列として取得
	virtual int GetAllSubNode(LPCU8STR path, IStringArrayPtr list) = 0;
};
//!	ポインタ型
typedef IWorkspace*	IWorkspacePtr;


/*!
	CWorkspaceAccess
*/
class IWorkspaceAccess
{
public:
	//!	インターフェース取得
	virtual IWorkspacePtr	GetIWorkspacePtr() = 0;

	//!	パス取得
	virtual void			GetAccessPath(IStringPtr path) = 0;
};
//!	ポインタ型
typedef IWorkspaceAccess*	IWorkspaceAccessPtr;


/*!
	CWorkspaceAccess のリファレンス型
*/
class IWorkspaceAccessRef
{
public:
	//!	初期化
	virtual void SetWorkspaceAccess(IWorkspacePtr root, LPCU8STR path) = 0;
};
//!	ポインタ型
typedef IWorkspaceAccessRef*	IWorkspaceAccessRefPtr;

