Apollo 10.0
自动驾驶开放平台
apollo::cyber::class_loader::ClassLoader类 参考

for library load,createclass object 更多...

#include <class_loader.h>

apollo::cyber::class_loader::ClassLoader 的协作图:

Public 成员函数

 ClassLoader (const std::string &library_path)
 
virtual ~ClassLoader ()
 
bool IsLibraryLoaded ()
 
bool LoadLibrary ()
 
int UnloadLibrary ()
 
const std::string GetLibraryPath () const
 
template<typename Base >
std::vector< std::string > GetValidClassNames ()
 
template<typename Base >
std::shared_ptr< BaseCreateClassObj (const std::string &class_name)
 
template<typename Base >
bool IsClassValid (const std::string &class_name)
 

详细描述

for library load,createclass object

在文件 class_loader.h35 行定义.

构造及析构函数说明

◆ ClassLoader()

apollo::cyber::class_loader::ClassLoader::ClassLoader ( const std::string &  library_path)
explicit

在文件 class_loader.cc21 行定义.

22 : library_path_(library_path),
23 loadlib_ref_count_(0),
24 classobj_ref_count_(0) {
26}

◆ ~ClassLoader()

apollo::cyber::class_loader::ClassLoader::~ClassLoader ( )
virtual

在文件 class_loader.cc28 行定义.

成员函数说明

◆ CreateClassObj()

template<typename Base >
std::shared_ptr< Base > apollo::cyber::class_loader::ClassLoader::CreateClassObj ( const std::string &  class_name)

在文件 class_loader.h76 行定义.

77 {
78 if (!IsLibraryLoaded()) {
80 }
81
82 Base* class_object = utility::CreateClassObj<Base>(class_name, this);
83 if (class_object == nullptr) {
84 AWARN << "CreateClassObj failed, ensure class has been registered. "
85 << "classname: " << class_name << ",lib: " << GetLibraryPath();
86 return std::shared_ptr<Base>();
87 }
88
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;
95}
Definition base.h:20
const std::string GetLibraryPath() const
#define AWARN
Definition log.h:43

◆ GetLibraryPath()

const std::string apollo::cyber::class_loader::ClassLoader::GetLibraryPath ( ) const

在文件 class_loader.cc62 行定义.

62{ return library_path_; }

◆ GetValidClassNames()

template<typename Base >
std::vector< std::string > apollo::cyber::class_loader::ClassLoader::GetValidClassNames ( )

在文件 class_loader.h64 行定义.

64 {
65 return (utility::GetValidClassNames<Base>(this));
66}

◆ IsClassValid()

template<typename Base >
bool apollo::cyber::class_loader::ClassLoader::IsClassValid ( const std::string &  class_name)

在文件 class_loader.h69 行定义.

69 {
70 std::vector<std::string> valid_classes = GetValidClassNames<Base>();
71 return (std::find(valid_classes.begin(), valid_classes.end(), class_name) !=
72 valid_classes.end());
73}

◆ IsLibraryLoaded()

bool apollo::cyber::class_loader::ClassLoader::IsLibraryLoaded ( )

在文件 class_loader.cc30 行定义.

30 {
31 return utility::IsLibraryLoaded(library_path_, this);
32}
bool IsLibraryLoaded(const std::string &library_path, ClassLoader *class_loader)

◆ LoadLibrary()

bool apollo::cyber::class_loader::ClassLoader::LoadLibrary ( )

在文件 class_loader.cc34 行定义.

34 {
35 std::lock_guard<std::mutex> lck(loadlib_ref_count_mutex_);
36 ++loadlib_ref_count_;
37 AINFO << "Begin LoadLibrary: " << library_path_;
38 return utility::LoadLibrary(library_path_, this);
39}
#define AINFO
Definition log.h:42
bool LoadLibrary(const std::string &library_path, ClassLoader *loader)

◆ UnloadLibrary()

int apollo::cyber::class_loader::ClassLoader::UnloadLibrary ( )

在文件 class_loader.cc41 行定义.

41 {
42 std::lock_guard<std::mutex> lckLib(loadlib_ref_count_mutex_);
43 std::lock_guard<std::mutex> lckObj(classobj_ref_count_mutex_);
44
45 if (classobj_ref_count_ > 0) {
46 AINFO << "There are still classobjs have not been deleted, "
47 "classobj_ref_count_: "
48 << classobj_ref_count_;
49 } else {
50 --loadlib_ref_count_;
51 if (loadlib_ref_count_ == 0) {
52 utility::UnloadLibrary(library_path_, this);
53 } else {
54 if (loadlib_ref_count_ < 0) {
55 loadlib_ref_count_ = 0;
56 }
57 }
58 }
59 return loadlib_ref_count_;
60}
void UnloadLibrary(const std::string &library_path, ClassLoader *loader)

该类的文档由以下文件生成: