-
Notifications
You must be signed in to change notification settings - Fork 31
ParamDB
Ryota Shioya edited this page Mar 24, 2022
·
3 revisions
-
ParamExchange~を目的に応じて継承する
- ParamExchange
- 通常はこれを使用
- ParamExchangeChild
- CHAIN_PARAM_MAPで接続されるクラス専用
- ParamExchange
-
変数のマッピング
- BEGIN_PARAM_MAP,END_PARAM_MAP,PARAM_ENTRY等のマクロを使用してパラメータのマッピングを行う
-
値の取得,解放(出力)
- LoadParam()を呼ぶことで,XMLから変数に値をセット
- LoadParam()を行った場合,終了時には必ずReleaseParam()を呼ぶこと
-
パラメータを読み書きできる型
- String
- std::string
- intやdoubleなどのプリミティブ一般
- プリミティブの配列
- プリミティブのvector
-
配列やvector
- 要素をカンマ続きで記述した場合,配列やvectorに代入することが可能
-
PhysicalResouceNode 継承クラスの場合,GetParamPath() やGetResultPath() によってパラメータのパスや出力のパスを得ることが出来る
- 詳細は仕様/その他/リソースの生成と接続を参照
- 基本的にはXPathを踏襲
- '@~'でアトリビュートの取得が可能
- '~[~]'で要素のインデックスを指定してアクセスが可能
- 'count(~)'で要素数を取得
- 要素のインデックスを指定する際は,1からではなく,0から始まる
- countが,ロケーションステップの後に使える
- この属性が有効になっているノードは,外部XMLで任意の個数を追加することが可能
- Process を追加するときなどに使用
- デフォルトで0
- この属性が有効になっているノードおよびその子ノードは,読み取り専用となる
- Result セクション用
- デフォルトで1
- この属性が'無効'になっているノードおよびその子ノードでは,DefaultParam.hでの定義を必要としない
- Result セクション用
- デフォルトで1
<?xml version='1.0' encoding='UTF-8'?>
<Session>
<Simulator>
<Test
Param = "1"
Array = "0,1"
Vector = "0,1,2,3,4"
/>
<List>
<Element val="2">
<Element val="4">
<Element val="8">
<Element val="2">
</List>
</Simulator>
<Result
RequireDefaultParam='0'
ReadOnly='0'
>
</Result>
</Session>
class ParamTest : public ParamExchange
{
int m_param;
int m_array[2];
vector<int> m_vec;
int m_listCount;
int m_listElement;
int m_result;
struct ParamStruct : public ParamExchangeChild
{
int m_param;
BEGIN_PARAM_MAP("")
PARAM_ENTRY("/@Param",m_param)
END_PARAM_PATH
} s;
public:
BEGIN_PARAM_MAP("/Session/")
BEGIN_PARAM_PATH("Simulator/")
PARAM_ENTRY("Test/@Param",m_param)
PARAM_ENTRY("Test/@Array",m_array)
PARAM_ENTRY("Test/@Vector",m_vec)
PARAM_ENTRY("List/count(Element)",m_listCount)
PARAM_ENTRY("List/Element[0]",m_listElement)
CHAIN_PARAM_MAP("Test",s)
END_PARAM_PATH
BEGIN_PARAM_PATH("Result/")
PARAM_ENTRY("Test/@Result",m_result)
END_PARAM_PATH
END_PARAM_MAP
ParamTest()
{
LoadParam();
}
~ParamTest()
{
ReleaseParam(); // LoadParamした場合は必ず呼ぶこと
}
} p;