Apollo 10.0
自动驾驶开放平台
class_loader_manager.cc
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2018 The Apollo Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *****************************************************************************/
17
18namespace apollo {
19namespace cyber {
20namespace class_loader {
21
23
25
26ClassLoader* ClassLoaderManager::GetClassLoaderByLibPath(
27 const std::string& library_path) {
28 return libpath_loader_map_[library_path];
29}
30
31std::vector<ClassLoader*> ClassLoaderManager::GetAllValidClassLoaders() {
32 std::vector<ClassLoader*> class_loaders;
33 for (auto& lib_class_loader : libpath_loader_map_) {
34 class_loaders.emplace_back(lib_class_loader.second);
35 }
36 return class_loaders;
37}
38
39std::vector<std::string> ClassLoaderManager::GetAllValidLibPath() {
40 std::vector<std::string> libpath;
41 for (auto& lib_class_loader : libpath_loader_map_) {
42 if (lib_class_loader.second != nullptr) {
43 libpath.emplace_back(lib_class_loader.first);
44 }
45 }
46 return libpath;
47}
48
49bool ClassLoaderManager::IsLibraryValid(const std::string& library_name) {
50 std::vector<std::string> valid_libraries = GetAllValidLibPath();
51 return (valid_libraries.end() != std::find(valid_libraries.begin(),
52 valid_libraries.end(),
53 library_name));
54}
55
56bool ClassLoaderManager::LoadLibrary(const std::string& library_path) {
57 std::lock_guard<std::mutex> lck(libpath_loader_map_mutex_);
58 if (!IsLibraryValid(library_path)) {
59 libpath_loader_map_[library_path] =
60 new class_loader::ClassLoader(library_path);
61 }
62 return IsLibraryValid(library_path);
63}
64
65int ClassLoaderManager::UnloadLibrary(const std::string& library_path) {
66 int num_remain_unload = 0;
67 if (IsLibraryValid(library_path)) {
68 ClassLoader* class_loader = GetClassLoaderByLibPath(library_path);
69 if ((num_remain_unload = class_loader->UnloadLibrary()) == 0) {
70 libpath_loader_map_[library_path] = nullptr;
71 delete class_loader;
72 }
73 }
74 return num_remain_unload;
75}
76
78 std::vector<std::string> valid_libraries = GetAllValidLibPath();
79 for (auto& lib : valid_libraries) {
80 UnloadLibrary(lib);
81 }
82}
83} // namespace class_loader
84} // namespace cyber
85} // namespace apollo
bool IsLibraryValid(const std::string &library_path)
bool LoadLibrary(const std::string &library_path)
for library load,createclass object
class register implement
Definition arena_queue.h:37