17#ifndef CYBER_CLASS_LOADER_UTILITY_CLASS_LOADER_UTILITY_H_
18#define CYBER_CLASS_LOADER_UTILITY_CLASS_LOADER_UTILITY_H_
40namespace 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);
68template <
typename Derived,
typename Base>
70 const std::string& base_class_name);
71template <
typename Base>
73template <
typename Base>
76template <
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;
94template <
typename Base>
100 if (factoryMap.find(class_name) != factoryMap.end()) {
102 factoryMap[class_name]);
106 Base* classobj =
nullptr;
107 if (factory && factory->
IsOwnedBy(loader)) {
114template <
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);
for library load,createclass object
void SetRelativeLibraryPath(const std::string &library_path)
void AddOwnedClassLoader(ClassLoader *loader)
bool IsOwnedBy(const ClassLoader *loader)
virtual Base * CreateObj() const =0
void RegisterClass(const std::string &class_name, const std::string &base_class_name)
ClassClassFactoryMap & GetClassFactoryMapByBaseClass(const std::string &typeid_base_class_name)
LibPathSharedLibVector & GetLibPathSharedLibVector()
std::map< std::string, utility::AbstractClassFactoryBase * > ClassClassFactoryMap
std::string GetCurLoadingLibraryName()
BaseToClassFactoryMapMap & GetClassFactoryMapMap()
std::vector< std::string > GetValidClassNames(ClassLoader *loader)
bool LoadLibrary(const std::string &library_path, ClassLoader *loader)
bool IsLibraryLoadedByAnybody(const std::string &library_path)
std::vector< std::pair< std::string, SharedLibraryPtr > > LibPathSharedLibVector
Base * CreateClassObj(const std::string &class_name, ClassLoader *loader)
std::recursive_mutex & GetClassFactoryMapMapMutex()
void SetCurActiveClassLoader(ClassLoader *loader)
void UnloadLibrary(const std::string &library_path, ClassLoader *loader)
void SetCurLoadingLibraryName(const std::string &library_name)
std::shared_ptr< SharedLibrary > SharedLibraryPtr
std::recursive_mutex & GetLibPathSharedLibMutex()
bool IsLibraryLoaded(const std::string &library_path, ClassLoader *class_loader)
std::vector< AbstractClassFactoryBase * > ClassFactoryVector
ClassLoader * GetCurActiveClassLoader()
std::map< std::string, ClassClassFactoryMap > BaseToClassFactoryMapMap