/*!
	フィルタ用API インターフェース
	CWorkspaceAccess 補助
*/
#pragma once
#include "FilterAPIHelper.h"

////////////////////////////////////////////////////////////////////////////////////////////////////////
//	CWorkspaceAccess DLL受け渡し用
////////////////////////////////////////////////////////////////////////////////////////////////////////
/*!
	ワークスペースへの外部アクセス
*/
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(IAPIPassStringPtr 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, IAPIPassStringArrayPtr list) = 0;

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

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

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

	//!	全てのサブノード名を文字列として取得
	virtual int GetAllSubNode(LPCSTR path, IAPIPassStringArrayPtr list) = 0;
};

//!	ポインタ型
typedef IWorkspace*	IWorkspacePtr;


/*!
	CWorkspaceAccessの受け渡し用作業構造体
	実際にDLL関数経由で渡されるのはこの構造体のポインタ
*/
typedef struct SWorkspaceAccessCoreData
{
	//!	CWoirkspace インターフェース
	IWorkspacePtr	BaseClass;

	//!	パス
	char			AccessPath[MAX_WORKSPACE_PATH_LEN];

} *SWorkspaceAccessCoreDataPtr;

