16 #ifndef CYBER_CLASS_LOADER_CLASS_LOADER_H_ 17 #define CYBER_CLASS_LOADER_CLASS_LOADER_H_ 30 namespace class_loader {
37 explicit ClassLoader(
const std::string& library_path);
44 template <
typename Base>
46 template <
typename Base>
47 std::shared_ptr<Base>
CreateClassObj(
const std::string& class_name);
48 template <
typename Base>
52 template <
typename Base>
53 void OnClassObjDeleter(
Base* obj);
56 std::string library_path_;
57 int loadlib_ref_count_;
58 std::mutex loadlib_ref_count_mutex_;
59 int classobj_ref_count_;
60 std::mutex classobj_ref_count_mutex_;
63 template <
typename Base>
65 return (utility::GetValidClassNames<Base>(
this));
68 template <
typename Base>
70 std::vector<std::string> valid_classes = GetValidClassNames<Base>();
71 return (std::find(valid_classes.begin(), valid_classes.end(), class_name) !=
75 template <
typename Base>
77 const std::string& class_name) {
82 Base* class_object = utility::CreateClassObj<Base>(class_name,
this);
83 if (class_object ==
nullptr) {
84 AWARN <<
"CreateClassObj failed, ensure class has been registered. " 86 return std::shared_ptr<Base>();
89 std::lock_guard<std::mutex> lck(classobj_ref_count_mutex_);
90 classobj_ref_count_ = classobj_ref_count_ + 1;
91 std::shared_ptr<Base> classObjSharePtr(
92 class_object, std::bind(&ClassLoader::OnClassObjDeleter<Base>,
this,
93 std::placeholders::_1));
94 return classObjSharePtr;
97 template <
typename Base>
98 void ClassLoader::OnClassObjDeleter(
Base* obj) {
103 std::lock_guard<std::mutex> lck(classobj_ref_count_mutex_);
105 --classobj_ref_count_;
111 #endif // CYBER_CLASS_LOADER_CLASS_LOADER_H_
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
std::shared_ptr< Base > CreateClassObj(const std::string &class_name)
Definition: class_loader.h:76
ClassLoader(const std::string &library_path)
std::vector< std::string > GetValidClassNames()
Definition: class_loader.h:64
const std::string GetLibraryPath() const
#define AWARN
Definition: log.h:43
bool IsClassValid(const std::string &class_name)
Definition: class_loader.h:69
Definition: class_loader.h:35