OpenRTM-aist 2.0.2
読み取り中…
検索中…
一致する文字列を見つけられません
ConfigAdmin.h
[詳解]
1// -*- C++ -*-
19#ifndef RTC_CONFIGADMIN_H
20#define RTC_CONFIGADMIN_H
21
22#include <coil/Properties.h>
23#include <coil/stringutil.h>
25
26#include <string>
27#include <vector>
28#include <iostream>
29
44namespace RTC
45{
58
71
84
97
110
123
124 // forward decl
125 class ConfigAdmin;
126
127 //============================================================
128 // ConfigBase class
129 //============================================================
161 {
183 ConfigBase(const char* name_, const char* def_val)
184 : name(name_), default_value(def_val),
185 string_value(""), m_admin(nullptr), m_callback(nullptr)
186 {}
187
203 virtual ~ConfigBase() = default;
204
205 // typedef of ConfigAdmin's member function
206 using CallbackFunc = void (ConfigAdmin::*)(const char *, const char*);
207
225
241 void notifyUpdate(const char* key, const char* val);
242
268 virtual bool update(const char* val) = 0;
269
277 const char* name;
278
286 const char* default_value;
287
288 protected:
296 std::string string_value;
313 };
314
315 //============================================================
316 // Config template class
317 //============================================================
350 template <typename VarType,
351 typename TransFunc = bool (*)(VarType&, const char*)>
352 class Config
353 : public ConfigBase
354 {
355 public:
381 Config(const char* conf_name, VarType& var, const char* def_val,
382 TransFunc trans = coil::stringTo)
383 : ConfigBase(conf_name, def_val), m_var(var), m_trans(trans)
384 {
385 }
386
402 ~Config() override = default;
403
427 bool update(const char* val) override
428 {
429 if (string_value == val) { return true; }
430 string_value = val;
431 // value changed
432 if ((*m_trans)(m_var, val))
433 {
434 notifyUpdate(name, val);
435 return true;
436 }
437 (*m_trans)(m_var, default_value);
438 notifyUpdate(name, val);
439 return false;
440 }
441
442 protected:
450 VarType& m_var;
451
460 TransFunc m_trans;
461 };
462
463 //============================================================
464 // ConfigAdmin class
465 //============================================================
612 {
613 public:
633 explicit ConfigAdmin(coil::Properties& configsets);
634
651
692 template <typename VarType>
693 bool bindParameter(const char* param_name, VarType& var,
694 const char* def_val,
695 bool (*trans)(VarType&, const char*) = coil::stringTo)
696 {
697 if (param_name == nullptr) { return false; }
698 if (def_val == nullptr) { return false; }
699 if (isExist(param_name)) { return false; }
700 if (!trans(var, def_val)) { return false; }
701 Config<VarType>* c = new Config<VarType>(param_name, var, def_val, trans);
702 m_params.emplace_back(c);
704 update(getActiveId(), param_name);
705 return true;
706 }
707
733 bool unbindParameter(const char* param_name);
734
761 void update();
762
797 void update(const char* config_set);
798
836 void update(const char* config_set, const char* config_param);
837
864 bool isExist(const char* param_name);
865
886 bool isChanged() {return m_changed;}
887
907 coil::vstring& changedParameters() { return m_changedParam; }
908
928 const char* getActiveId() {return m_activeId.c_str();}
929
954 bool haveConfig(const char* config_id)
955 {
956 return (m_configsets.hasKey(config_id) == nullptr) ? false : true;
957 }
958
979 bool isActive()
980 {
981 return m_active;
982 }
983
1003 const std::vector<coil::Properties*>& getConfigurationSets();
1004
1032 const coil::Properties& getConfigurationSet(const char* config_id);
1033
1063 bool setConfigurationSetValues(const coil::Properties& config_set);
1064
1088 const coil::Properties& getActiveConfigurationSet();
1089
1113 bool addConfigurationSet(const coil::Properties& config_set);
1114
1169 bool removeConfigurationSet(const char* config_id);
1170
1198 bool activateConfigurationSet(const char* config_id);
1199
1200 //------------------------------------------------------------
1201 // obsolete functions
1202 //
1204
1206
1208
1210
1212
1214 //
1215 // end of obsolete functions
1216 //------------------------------------------------------------
1217
1252 bool autoclean = true);
1253
1279 ConfigurationParamListener* listener);
1280
1313 ConfigurationSetListener* listener,
1314 bool autoclean = true);
1315
1339 ConfigurationSetListener* listener);
1340
1375 void
1378 bool autoclean = true);
1379
1406 void
1409
1410 protected:
1430 void onUpdate(const char* config_set);
1431
1453 void onUpdateParam(const char* config_param, const char* config_value);
1454
1474 void onSetConfigurationSet(const coil::Properties& config_set);
1475
1495 void onAddConfigurationSet(const coil::Properties& config_set);
1496
1516 void onRemoveConfigurationSet(const char* config_id);
1517
1537 void onActivateSet(const char* config_id);
1538
1539 private:
1540 ConfigAdmin(const ConfigAdmin& ca) = delete;
1541 ConfigAdmin& operator=(const ConfigAdmin& ca) = delete;
1542
1543 struct find_conf
1544 {
1545 std::string m_name;
1546 explicit find_conf(const char* name) : m_name(name) {}
1547 bool operator()(ConfigBase* conf)
1548 {
1549 if (conf == nullptr) { return false; }
1550 return (m_name == conf->name);
1551 }
1552 };
1553
1554 coil::Properties& m_configsets;
1555 coil::Properties m_emptyconf;
1556 std::vector<ConfigBase*> m_params;
1557 std::string m_activeId;
1558 bool m_active;
1559 bool m_changed;
1560 coil::vstring m_changedParam;
1561 coil::vstring m_newConfig;
1562 ConfigurationListeners m_listeners;
1563
1564 };
1565} // namespace RTC
1566#endif // RTC_CONFIGADMIN_H
Configuration related event listener classes
ConfigAdmin クラス
Definition ConfigAdmin.h:612
bool addConfigurationSet(const coil::Properties &config_set)
コンフィギュレーションセットに設定値を追加
bool isChanged()
コンフィギュレーションパラメータの変更確認
Definition ConfigAdmin.h:886
const char * getActiveId()
アクティブ・コンフィギュレーションセットIDの取得
Definition ConfigAdmin.h:928
ConfigAdmin(coil::Properties &configsets)
コンストラクタ
bool isActive()
コンフィギュレーションセットのアクティブ化確認
Definition ConfigAdmin.h:979
bool unbindParameter(const char *param_name)
コンフィギュレーションパラメータの解除
void setOnActivateSet(OnActivateSetCallback *cb)
void update(const char *config_set, const char *config_param)
コンフィギュレーションパラメータの更新(名称指定)
const std::vector< coil::Properties * > & getConfigurationSets()
全コンフィギュレーションセットの取得
const coil::Properties & getActiveConfigurationSet()
アクティブ・コンフィギュレーションセットを取得
bool activateConfigurationSet(const char *config_id)
コンフィギュレーションセットのアクティブ化
bool bindParameter(const char *param_name, VarType &var, const char *def_val, bool(*trans)(VarType &, const char *)=coil::stringTo)
コンフィギュレーションパラメータの設定
Definition ConfigAdmin.h:693
void setOnAddConfigurationSet(OnAddConfigurationAddCallback *cb)
void update()
コンフィギュレーションパラメータの更新 (アクティブコンフィギュレーションセット)
void removeConfigurationSetListener(ConfigurationSetListenerType type, ConfigurationSetListener *listener)
ConfigurationSetListener を削除する
void update(const char *config_set)
コンフィギュレーションパラメータの更新(ID指定)
void setOnUpdateParam(OnUpdateParamCallback *cb)
coil::vstring & changedParameters()
変更されたパラメータのリスト
Definition ConfigAdmin.h:907
void removeConfigurationParamListener(ConfigurationParamListenerType type, ConfigurationParamListener *listener)
ConfigurationParamListener を削除する
bool isExist(const char *param_name)
コンフィギュレーションパラメータの存在確認
void setOnSetConfigurationSet(OnSetConfigurationSetCallback *cb)
void removeConfigurationSetNameListener(ConfigurationSetNameListenerType type, ConfigurationSetNameListener *listener)
ConfigurationSetNameListener を削除する
void setOnUpdate(OnUpdateCallback *cb)
void addConfigurationParamListener(ConfigurationParamListenerType type, ConfigurationParamListener *listener, bool autoclean=true)
ConfigurationParamListener を追加する
void onUpdateParam(const char *config_param, const char *config_value)
コンフィギュレーションパラメータの更新(名称指定)時にコールされる
const coil::Properties & getConfigurationSet(const char *config_id)
指定したIDのコンフィギュレーションセットの取得
void onSetConfigurationSet(const coil::Properties &config_set)
コンフィギュレーションセットへの追加時にコールされる
void onRemoveConfigurationSet(const char *config_id)
セットが削除されてるときにコールされる。
void onAddConfigurationSet(const coil::Properties &config_set)
設定値が追加されたときにコールされる。
void setOnRemoveConfigurationSet(OnRemoveConfigurationSetCallback *cb)
void addConfigurationSetListener(ConfigurationSetListenerType type, ConfigurationSetListener *listener, bool autoclean=true)
ConfigurationSetListener を追加する
void addConfigurationSetNameListener(ConfigurationSetNameListenerType type, ConfigurationSetNameListener *listener, bool autoclean=true)
ConfigurationSetNameListener を追加する
void onActivateSet(const char *config_id)
セットがアクティブ化されたときにコールされる。
void onUpdate(const char *config_set)
コンフィギュレーションパラメータの更新(ID指定)時にコールされる
~ConfigAdmin()
仮想デストラクタ
bool haveConfig(const char *config_id)
コンフィギュレーションセットの存在確認
Definition ConfigAdmin.h:954
bool removeConfigurationSet(const char *config_id)
コンフィギュレーションセットの削除
bool setConfigurationSetValues(const coil::Properties &config_set)
指定したプロパティのコンフィギュレーションセットへの追加
Config クラス
Definition ConfigAdmin.h:354
VarType & m_var
コンフィギュレーションパラメータ格納用変数
Definition ConfigAdmin.h:450
~Config() override=default
仮想デストラクタ
bool update(const char *val) override
バインドパラメータ値を更新
Definition ConfigAdmin.h:427
Config(const char *conf_name, VarType &var, const char *def_val, TransFunc trans=coil::stringTo)
コンストラクタ
Definition ConfigAdmin.h:381
TransFunc m_trans
コンフィギュレーションパラメータ型文字列変換関数
Definition ConfigAdmin.h:460
ConfigurationParamListener クラス
Definition ConfigurationListener.h:75
ConfigurationSetListener クラス
Definition ConfigurationListener.h:191
ConfigurationSetNameListener クラス
Definition ConfigurationListener.h:304
RTコンポーネント
ConfigurationSetNameListenerType
ConfigurationSetNameListenerType
Definition ConfigurationListener.h:272
ConfigurationSetListenerType
ConfigurationSetListener のタイプ
Definition ConfigurationListener.h:161
ConfigurationParamListenerType
ConfigurationParamListener のタイプ
Definition ConfigurationListener.h:46
ConfigBase 抽象クラス
Definition ConfigAdmin.h:161
const char * name
コンフィギュレーション名
Definition ConfigAdmin.h:277
const char * default_value
文字列形式のデフォルト値
Definition ConfigAdmin.h:286
ConfigAdmin * m_admin
ConfigAdminオブジェクトへのポインタ
Definition ConfigAdmin.h:304
virtual bool update(const char *val)=0
コンフィギュレーションパラメータ値更新用純粋仮想関数
ConfigBase(const char *name_, const char *def_val)
コンストラクタ
Definition ConfigAdmin.h:183
void(ConfigAdmin::*)(const char *, const char *) CallbackFunc
Definition ConfigAdmin.h:206
void setCallback(ConfigAdmin *cadmin, CallbackFunc cbf)
コールバックのセット
std::string string_value
文字列形式の現在値
Definition ConfigAdmin.h:296
void notifyUpdate(const char *key, const char *val)
変数変更を知らせるオブザーバ関数
CallbackFunc m_callback
コールバックのメンバ関数ポインタ
Definition ConfigAdmin.h:312
virtual ~ConfigBase()=default
仮想デストラクタ