Skip to content

ParamDB

Ryota Shioya edited this page Mar 24, 2022 · 3 revisions

ParamDB.md

概要とか

  • ParamExchange~を目的に応じて継承する

    • ParamExchange
      • 通常はこれを使用
    • ParamExchangeChild
      • CHAIN_PARAM_MAPで接続されるクラス専用
  • 変数のマッピング

    • 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(~)'で要素数を取得

XPathとの差異

  • 要素のインデックスを指定する際は,1からではなく,0から始まる
  • countが,ロケーションステップの後に使える

DefaultParam.h 内で定義可能な組み込み属性

PDB_Array

  • この属性が有効になっているノードは,外部XMLで任意の個数を追加することが可能
  • Process を追加するときなどに使用
  • デフォルトで0

PDB_ReadOnly

  • この属性が有効になっているノードおよびその子ノードは,読み取り専用となる
  • Result セクション用
  • デフォルトで1

PDB_RequireDefaultParam

  • この属性が'無効'になっているノードおよびその子ノードでは,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;
Clone this wiki locally