OpenRTM-aist 2.1.0
読み取り中…
検索中…
一致する文字列を見つけられません
ModuleManager.h
[詳解]
1// -*- C++ -*-
20#ifndef RTC_MODULEMANAGER_H
21#define RTC_MODULEMANAGER_H
22
23
24// ACE includes
25#include <coil/DynamicLib.h>
26
27// RTC includes
28#include <rtm/Manager.h>
29#include <coil/Properties.h>
30#include <rtm/ObjectManager.h>
31
32// STL includes
33#include <string>
34#include <utility>
35#include <vector>
36#include <map>
37
38#define CONFIG_EXT "manager.modules.config_ext"
39#define CONFIG_PATH "manager.modules.config_path"
40#define DETECT_MOD "manager.modules.detect_loadable"
41#define MOD_LOADPTH "manager.modules.load_path"
42#define INITFUNC_SFX "manager.modules.init_func_suffix"
43#define INITFUNC_PFX "manager.modules.init_func_prefix"
44#define ALLOW_ABSPATH "manager.modules.abs_path_allowed"
45#define ALLOW_URL "manager.modules.download_allowed"
46#define MOD_DWNDIR "manager.modules.download_dir"
47#define MOD_DELMOD "manager.modules.download_cleanup"
48#define MOD_PRELOAD "manager.modules.preload"
49
50namespace RTC
51{
72 {
73 using vProperties = std::vector<coil::Properties>;
74 public:
96 explicit ModuleManager(coil::Properties& prop);
97
110
118 struct Error
119 {
120 explicit Error(std::string _reason)
121 : reason(std::move(_reason)) {}
122 std::string reason;
123 };
124
133 struct NotFound
134 {
135 explicit NotFound(std::string _name)
136 : name(std::move(_name)) {}
137 std::string name;
138 };
139
149 : public NotFound
150 {
151 explicit FileNotFound(const std::string& _name)
152 : NotFound(_name) {}
153 };
154
164 : public NotFound
165 {
166 explicit ModuleNotFound(const std::string& _name)
167 : NotFound(_name) {}
168 };
169
179 : public NotFound
180 {
181 explicit SymbolNotFound(const std::string& _name)
182 : NotFound(_name) {}
183 };
184
194 : public Error
195 {
196 explicit NotAllowedOperation(const std::string& _reason)
197 : Error(_reason) {}
198 };
199
209 : public Error
210 {
211 explicit InvalidArguments(const std::string& _reason)
212 : Error(_reason) {}
213 };
214
224 : public Error
225 {
226 explicit InvalidOperation(const std::string& _reason)
227 : Error(_reason) {}
228 };
229 using ModuleInitFunc = void (*)(Manager*);
230
276 std::string load(const std::string& file_name);
328 std::string load(coil::Properties& prop);
329
330
358 std::string load(const std::string& file_name,
359 const std::string& init_func);
391 std::string load(coil::Properties& prop,
392 const std::string& init_func);
393
394
412 void unload(const std::string& file_name);
413
427 void unloadAll();
428
436 void* symbol(const std::string& file_name, const std::string& func_name);
437
455 void setLoadpath(const std::vector<std::string>& load_path);
456
474 inline std::vector<std::string> getLoadPath()
475 {
476 return m_loadPath;
477 }
478
496 void addLoadpath(const std::vector<std::string>& load_path);
497
515 std::vector<coil::Properties> getLoadedModules();
516
535 std::vector<coil::Properties> getLoadableModules();
536
550 inline void allowAbsolutePath()
551 {
552 m_absoluteAllowed = true;
553 }
554
569 {
570 m_absoluteAllowed = false;
571 }
572
591 {
592 m_downloadAllowed = true;
593 }
594
609 {
610 m_downloadAllowed = false;
611 }
612
636 std::string findFile(const std::string& fname,
637 const std::vector<std::string>& load_path);
638
660 bool fileExist(const std::string& filename);
661
683 std::string getInitFuncName(const std::string& file_path);
684
685 protected:
694
702 void getModuleList(const std::string& lang, coil::vstring& modules);
703
711 void addNewFile(const std::string& fpath, coil::vstring& modules, const std::string& lang);
712
720 void getModuleProfiles(const std::string& lang,
721 const coil::vstring& modules, vProperties& modprops);
722
731
740 {
741 coil::Properties properties;
742 coil::DynamicLib dll;
743 };
744
745 using StringVector = std::vector<std::string>;
746 using StringVectorItr = StringVector::iterator;
747 using StringVectorConstItr = StringVector::const_iterator;
748
749 using DllMap = std::vector<DLLEntity>;
750 using DllMapItr = DllMap::iterator;
751 using DllMapConstItr = DllMap::const_iterator;
752
753
761 coil::Properties& m_properties;
762
771 {
772 std::string m_filepath;
773 public:
774 explicit DllPred(const char* filepath)
775 {
776 m_filepath = coil::replaceString(filepath, "\\", "/");
777 m_filepath = coil::replaceString(m_filepath, "//", "/");
778 }
779 explicit DllPred(const DLLEntity* dll)
780 {
781 m_filepath = coil::replaceString(dll->properties["file_path"], "\\", "/");
782 m_filepath = coil::replaceString(m_filepath, "//", "/");
783 }
784 bool operator()(DLLEntity* dllentity)
785 {
786 std::string file_path = coil::replaceString(
787 dllentity->properties.getProperty("file_path"), "\\", "/");
788 file_path = coil::replaceString(file_path, "//", "/");
789 return m_filepath == file_path;
790 }
791 };
800
833
841 std::string m_initFuncSuffix;
842
850 std::string m_initFuncPrefix;
851
860
869 {
870 public:
871 UnloadPred() = default;
873 {
874 dll->dll.close();
875 delete dll;
876 }
877 };
878
879 vProperties m_modprofs;
880 std::map<std::string, coil::vstring> m_loadfailmods;
881
882 }; // class ModuleManager
883} // namespace RTC
884
885#endif // RTC_MODULEMANAGER_H
-*- C++ -*-
Object management class
オブジェクト管理用クラス
Definition ObjectManager.h:52
Logger クラス
Definition SystemLogger.h:101
Manager クラス
Definition Manager.h:91
ロード済みモジュールリスト
Definition ModuleManager.h:771
DllPred(const char *filepath)
Definition ModuleManager.h:774
DllPred(const DLLEntity *dll)
Definition ModuleManager.h:779
bool operator()(DLLEntity *dllentity)
Definition ModuleManager.h:784
モジュールアンロードファンクタ
Definition ModuleManager.h:869
void operator()(DLLEntity *dll)
Definition ModuleManager.h:872
モジュールマネージャクラス
Definition ModuleManager.h:72
void(*)(Manager *) ModuleInitFunc
Definition ModuleManager.h:229
StringVector m_loadPath
モジュール・ロード・パス・リスト
Definition ModuleManager.h:808
std::string m_initFuncPrefix
初期実行関数プリフィックス
Definition ModuleManager.h:850
void addLoadpath(const std::vector< std::string > &load_path)
モジュールロードパスを追加する
std::string load(const std::string &file_name)
モジュールのロード
StringVector::iterator StringVectorItr
Definition ModuleManager.h:746
std::string load(coil::Properties &prop, const std::string &init_func)
モジュールのロード、初期化
void disallowAbsolutePath()
モジュールの絶対パス指定禁止
Definition ModuleManager.h:568
void unload(const std::string &file_name)
モジュールのアンロード
void * symbol(const std::string &file_name, const std::string &func_name)
モジュールのシンボルの参照
std::map< std::string, coil::vstring > m_loadfailmods
Definition ModuleManager.h:880
ObjectManager< const char *, DLLEntity, DllPred > m_modules
ロード済みモジュールリスト
Definition ModuleManager.h:799
ModuleManager(coil::Properties &prop)
コンストラクタ
std::vector< std::string > getLoadPath()
モジュールロードパスを取得する
Definition ModuleManager.h:474
void allowAbsolutePath()
モジュールの絶対パス指定許可
Definition ModuleManager.h:550
std::vector< coil::Properties > getLoadedModules()
ロード済みのモジュールリストを取得する
coil::vstring m_supported_languages
サポートするRTCの実装言語
Definition ModuleManager.h:859
std::string load(const std::string &file_name, const std::string &init_func)
モジュールのロード、初期化
void getModuleProfiles(const std::string &lang, const coil::vstring &modules, vProperties &modprops)
指定言語、ファイルリストからモジュールのプロパティを返す
std::vector< DLLEntity > DllMap
Definition ModuleManager.h:749
DllMap::iterator DllMapItr
Definition ModuleManager.h:750
void disallowModuleDownload()
モジュールのURL指定禁止
Definition ModuleManager.h:608
std::string findFile(const std::string &fname, const std::vector< std::string > &load_path)
LoadPath からのファイルの検索
void removeInvalidModules()
無効なモジュールプロファイルを削除する
std::string getInitFuncName(const std::string &file_path)
初期化関数シンボルを生成する
bool m_absoluteAllowed
モジュール絶対パス指定許可フラグ
Definition ModuleManager.h:832
void addNewFile(const std::string &fpath, coil::vstring &modules, const std::string &lang)
キャッシュに無いパスだけmodulesに追加する
void allowModuleDownload()
モジュールのURL指定許可
Definition ModuleManager.h:590
void unloadAll()
全モジュールのアンロード
DllMap::const_iterator DllMapConstItr
Definition ModuleManager.h:751
std::vector< coil::Properties > getLoadableModules()
ロード可能モジュールリストを取得する
void setLoadpath(const std::vector< std::string > &load_path)
モジュールロードパスを指定する
coil::Properties & m_properties
Module Manager プロパティ
Definition ModuleManager.h:761
void getModuleList(const std::string &lang, coil::vstring &modules)
指定言語におけるロードパス上のローダブルなファイルリストを返す
bool m_downloadAllowed
モジュールURL指定許可フラグ
Definition ModuleManager.h:824
bool fileExist(const std::string &filename)
ファイルが存在するかどうかのチェック
StringVector::const_iterator StringVectorConstItr
Definition ModuleManager.h:747
std::string m_initFuncSuffix
初期実行関数サフィックス
Definition ModuleManager.h:841
StringVector m_configPath
コンフィギュレーション・パス・リスト
Definition ModuleManager.h:816
~ModuleManager()
デストラクタ
vProperties m_modprofs
Definition ModuleManager.h:879
std::vector< std::string > StringVector
Definition ModuleManager.h:745
std::string load(coil::Properties &prop)
モジュールのロード
Logger rtclog
ロガーストリーム
Definition ModuleManager.h:730
RTコンポーネント
DLL管理用構造体
Definition ModuleManager.h:740
coil::Properties properties
Definition ModuleManager.h:741
coil::DynamicLib dll
Definition ModuleManager.h:742
ファイル・オープン失敗例外処理用構造体
Definition ModuleManager.h:119
std::string reason
Definition ModuleManager.h:122
Error(std::string _reason)
Definition ModuleManager.h:120
指定ファイル不明例外処理用構造体
Definition ModuleManager.h:150
FileNotFound(const std::string &_name)
Definition ModuleManager.h:151
指定引数不正時例外処理用構造体
Definition ModuleManager.h:210
InvalidArguments(const std::string &_reason)
Definition ModuleManager.h:211
指定操作不正時例外処理用構造体
Definition ModuleManager.h:225
InvalidOperation(const std::string &_reason)
Definition ModuleManager.h:226
指定モジュール不明例外処理用構造体
Definition ModuleManager.h:165
ModuleNotFound(const std::string &_name)
Definition ModuleManager.h:166
指定操作禁止時例外処理用構造体
Definition ModuleManager.h:195
NotAllowedOperation(const std::string &_reason)
Definition ModuleManager.h:196
未実装部,指定モジュール不明例外処理用構造体
Definition ModuleManager.h:134
std::string name
Definition ModuleManager.h:137
NotFound(std::string _name)
Definition ModuleManager.h:135
指定シンボル不明例外処理用構造体
Definition ModuleManager.h:180
SymbolNotFound(const std::string &_name)
Definition ModuleManager.h:181