17 #ifndef CYBER_CLASS_LOADER_UTILITY_CLASS_LOADER_UTILITY_H_ 18 #define CYBER_CLASS_LOADER_UTILITY_CLASS_LOADER_UTILITY_H_ 40 namespace class_loader {
48 std::map<std::string, utility::AbstractClassFactoryBase*>;
51 std::vector<std::pair<std::string, SharedLibraryPtr>>;
59 const std::string& typeid_base_class_name);
68 template <
typename Derived,
typename Base>
70 const std::string& base_class_name);
71 template <
typename Base>
73 template <
typename Base>
76 template <
typename Derived,
typename Base>
78 const std::string& base_class_name) {
79 AINFO <<
"registerclass:" << class_name <<
"," << base_class_name <<
"," 90 factory_map[class_name] = new_class_factory_obj;
94 template <
typename Base>
100 if (factoryMap.find(class_name) != factoryMap.end()) {
102 factoryMap[class_name]);
106 Base* classobj =
nullptr;
107 if (factory && factory->
IsOwnedBy(loader)) {
114 template <
typename Base>
120 std::vector<std::string> classes;
121 for (
auto& class_factory : factoryMap) {
123 if (factory && factory->
IsOwnedBy(loader)) {
124 classes.emplace_back(class_factory.first);
136 #endif // CYBER_CLASS_LOADER_UTILITY_CLASS_LOADER_UTILITY_H_
std::recursive_mutex & GetClassFactoryMapMapMutex()
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
Definition: class_factory.h:55
std::map< std::string, ClassClassFactoryMap > BaseToClassFactoryMapMap
Definition: class_loader_utility.h:49
bool LoadLibrary(const std::string &library_path, ClassLoader *loader)
Base * CreateClassObj(const std::string &class_name, ClassLoader *loader)
Definition: class_loader_utility.h:95
std::string GetCurLoadingLibraryName()
void SetRelativeLibraryPath(const std::string &library_path)
void RegisterClass(const std::string &class_name, const std::string &base_class_name)
Definition: class_loader_utility.h:77
Definition: class_factory.h:70
std::recursive_mutex & GetLibPathSharedLibMutex()
void AddOwnedClassLoader(ClassLoader *loader)
Definition: class_factory.h:31
LibPathSharedLibVector & GetLibPathSharedLibVector()
std::vector< AbstractClassFactoryBase * > ClassFactoryVector
Definition: class_loader_utility.h:52
ClassLoader * GetCurActiveClassLoader()
void UnloadLibrary(const std::string &library_path, ClassLoader *loader)
BaseToClassFactoryMapMap & GetClassFactoryMapMap()
bool IsLibraryLoadedByAnybody(const std::string &library_path)
ClassClassFactoryMap & GetClassFactoryMapByBaseClass(const std::string &typeid_base_class_name)
std::shared_ptr< SharedLibrary > SharedLibraryPtr
Definition: class_loader_utility.h:46
virtual Base * CreateObj() const =0
bool IsLibraryLoaded(const std::string &library_path, ClassLoader *loader)
std::vector< std::string > GetValidClassNames(ClassLoader *loader)
Definition: class_loader_utility.h:115
bool IsOwnedBy(const ClassLoader *loader)
void SetCurLoadingLibraryName(const std::string &library_name)
std::vector< std::pair< std::string, SharedLibraryPtr > > LibPathSharedLibVector
Definition: class_loader_utility.h:51
std::map< std::string, utility::AbstractClassFactoryBase * > ClassClassFactoryMap
Definition: class_loader_utility.h:48
#define AINFO
Definition: log.h:42
void SetCurActiveClassLoader(ClassLoader *loader)
Definition: class_loader.h:35