OpenRTM-aist  2.1.0
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 
44 namespace RTC
45 {
58 
71 
84 
97 
110 
123 
124  // forward decl
125  class ConfigAdmin;
126 
127  //============================================================
128  // ConfigBase class
129  //============================================================
160  struct ConfigBase
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 
1064 
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 
1251  ConfigurationParamListener* listener,
1252  bool autoclean = true);
1253 
1279  ConfigurationParamListener* listener);
1280 
1313  ConfigurationSetListener* listener,
1314  bool autoclean = true);
1315 
1339  ConfigurationSetListener* listener);
1340 
1375  void
1377  ConfigurationSetNameListener* listener,
1378  bool autoclean = true);
1379 
1406  void
1408  ConfigurationSetNameListener* listener);
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
ConfigAdmin(coil::Properties &configsets)
コンストラクタ
bool isActive()
コンフィギュレーションセットのアクティブ化確認
Definition: ConfigAdmin.h:979
coil::vstring & changedParameters()
変更されたパラメータのリスト
Definition: ConfigAdmin.h:907
bool unbindParameter(const char *param_name)
コンフィギュレーションパラメータの解除
void setOnActivateSet(OnActivateSetCallback *cb)
void update(const char *config_set, const char *config_param)
コンフィギュレーションパラメータの更新(名称指定)
const coil::Properties & getConfigurationSet(const char *config_id)
指定したIDのコンフィギュレーションセットの取得
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
const std::vector< coil::Properties * > & getConfigurationSets()
全コンフィギュレーションセットの取得
void setOnAddConfigurationSet(OnAddConfigurationAddCallback *cb)
void update()
コンフィギュレーションパラメータの更新 (アクティブコンフィギュレーションセット)
void removeConfigurationSetListener(ConfigurationSetListenerType type, ConfigurationSetListener *listener)
ConfigurationSetListener を削除する
const char * getActiveId()
アクティブ・コンフィギュレーションセットIDの取得
Definition: ConfigAdmin.h:928
void update(const char *config_set)
コンフィギュレーションパラメータの更新(ID指定)
void setOnUpdateParam(OnUpdateParamCallback *cb)
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)
コンフィギュレーションパラメータの更新(名称指定)時にコールされる
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 を追加する
const coil::Properties & getActiveConfigurationSet()
アクティブ・コンフィギュレーションセットを取得
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
coil::Properties Properties
Definition: RTC.h:72
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
仮想デストラクタ