17 #ifndef CYBER_CLASS_LOADER_CLASS_LOADER_MANAGER_H_ 18 #define CYBER_CLASS_LOADER_CLASS_LOADER_MANAGER_H_ 30 namespace class_loader {
40 template <
typename Base>
41 std::shared_ptr<Base>
CreateClassObj(
const std::string& class_name);
42 template <
typename Base>
43 std::shared_ptr<Base>
CreateClassObj(
const std::string& class_name,
44 const std::string& library_path);
45 template <
typename Base>
47 template <
typename Base>
51 ClassLoader* GetClassLoaderByLibPath(
const std::string& library_path);
52 std::vector<ClassLoader*> GetAllValidClassLoaders();
53 std::vector<std::string> GetAllValidLibPath();
54 int UnloadLibrary(
const std::string& library_path);
57 std::mutex libpath_loader_map_mutex_;
58 std::map<std::string, ClassLoader*> libpath_loader_map_;
61 template <
typename Base>
63 const std::string& class_name) {
64 std::vector<ClassLoader*> class_loaders = GetAllValidClassLoaders();
65 for (
auto class_loader : class_loaders) {
66 if (class_loader->IsClassValid<
Base>(class_name)) {
67 return (class_loader->CreateClassObj<
Base>(class_name));
70 AERROR <<
"Invalid class name: " << class_name;
71 return std::shared_ptr<Base>();
74 template <
typename Base>
76 const std::string& class_name,
const std::string& library_path) {
77 ClassLoader* loader = GetClassLoaderByLibPath(library_path);
81 AERROR <<
"Could not create classobj, there is no ClassLoader in: " 83 return std::shared_ptr<Base>();
86 template <
typename Base>
88 std::vector<std::string> valid_classes = GetValidClassNames<Base>();
89 return (valid_classes.end() !=
90 std::find(valid_classes.begin(), valid_classes.end(), class_name));
93 template <
typename Base>
95 std::vector<std::string> valid_classes;
96 for (
auto class_loader : GetAllValidClassLoaders()) {
97 std::vector<std::string> class_loaders =
98 class_loader->GetValidClassNames<
Base>();
99 valid_classes.insert(valid_classes.end(), class_loaders.begin(),
100 class_loaders.end());
102 return valid_classes;
109 #endif // CYBER_CLASS_LOADER_CLASS_LOADER_MANAGER_H_
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
Definition: class_loader_manager.h:32
bool LoadLibrary(const std::string &library_path)
std::shared_ptr< Base > CreateClassObj(const std::string &class_name)
Definition: class_loader.h:76
bool IsClassValid(const std::string &class_name)
Definition: class_loader_manager.h:87
std::vector< std::string > GetValidClassNames()
Definition: class_loader_manager.h:94
virtual ~ClassLoaderManager()
#define AERROR
Definition: log.h:44
bool IsLibraryValid(const std::string &library_path)
std::shared_ptr< Base > CreateClassObj(const std::string &class_name)
Definition: class_loader_manager.h:62
Definition: class_loader.h:35