/*!
	ManagedInterfaceBasicInterfaces.h - 基本データタイプ 交換用インタフェース

	仕様が固定されているインタフェース
	ここに宣言されているインタフェースは、今後変更されない。
*/
#pragma once

////////////////////////////////////////////////////////////////////////////////////////////////////////
//	データ受け渡しインタフェース
////////////////////////////////////////////////////////////////////////////////////////////////////////
/*!
	文字列
*/
class IString
{
public:
	//!	文字列を設定
	virtual void SetString(LPCSTR str) = 0;

	//!	文字列を取得
	virtual LPCSTR GetString() = 0;
};
//!	ポインタ型
typedef IString*	IStringPtr;


/*!
	文字列配列
*/
class IStringArray
{
public:
	//!	初期化
	virtual void Clear() = 0;

	//!	サイズ設定
	virtual void SetSize(int size) = 0;

	//!	サイズ取得
	virtual int GetSize() = 0;

	//!	文字列を追加
	virtual void AddString(LPCSTR str) = 0;

	//!	保持している文字列を取得
	virtual LPCSTR GetString(int index) = 0;

	//!	保持している文字列を設定
	virtual void SetString(int index, LPCSTR str) = 0;
};
//!	ポインタ型
typedef IStringArray*	IStringArrayPtr;


/*!
	バイナリデータ
*/
class IBinaryData
{
public:
	//!	サイズ変更
	virtual void ReSize(int size) = 0;

	//!	サイズ取得
	virtual int GetSize() = 0;

	//!	保持しているデータポインタを取得
	virtual char *GetPtr() = 0;
};
//!	ポインタ型
typedef IBinaryData*	IBinaryDataPtr;




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

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

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

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

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

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

	//!	キーを検索
	virtual int FindKeyData(LPCSTR path, LPCSTR sData, int noCase = FALSE, int pathCompare = FALSE) = 0;

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

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

	//!	全てのキー名を文字列として取得
	virtual int GetAllKey(LPCSTR path, IStringArrayPtr list) = 0;

	//!	全てのデータを文字列として取得
	virtual int GetAllData(LPCSTR path, IStringArrayPtr list) = 0;

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

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

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


/*!
	CWorkspaceAccess
*/
class IWorkspaceAccess
{
public:
	//!	初期化
	virtual void SetWorkspaceAccess(IWorkspacePtr root, LPCSTR path) = 0;

	//!	インターフェース取得
	virtual IWorkspacePtr	GetIWorkspacePtr() = 0;

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