Skip to content

Commit a824e3a

Browse files
committed
cras_cpp_common: test_utils: Fixed compatibility with ros/class_loader#207 .
1 parent a9aad8b commit a824e3a

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

cras_cpp_common/include/cras_cpp_common/test_utils/preloading_class_loader.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@
1111

1212
#include <string>
1313

14+
#include <Poco/SharedLibrary.h>
15+
1416
#include <class_loader/class_loader.hpp>
1517
#include <pluginlib/class_loader.hpp>
1618

1719
#include <cras_cpp_common/type_utils.hpp>
1820

21+
#include "cras_cpp_common/filter_utils/filter_chain.hpp"
22+
1923
/*
2024
* In the classes where you need to use this classloader, insert the following code at the very beginning of the CPP
2125
* file:
@@ -47,6 +51,12 @@ class PreloadingClassLoader : public class_loader::ClassLoader
4751
const auto baseType = cras::getTypeName<Base>();
4852
auto metaObject = new class_loader::impl::MetaObject<Impl, Base>(implType, baseType);
4953
metaObject->addOwningClassLoader(this);
54+
// The following block is needed since class_loader 0.5.1
55+
{
56+
metaObject->setAssociatedLibraryPath("");
57+
auto& loaded = class_loader::impl::getLoadedLibraryVector();
58+
loaded.emplace_back("", new Poco::SharedLibrary("linux-vdso.so.1"));
59+
}
5060
class_loader::impl::getFactoryMapForBaseClass<Base>()[implType] = metaObject;
5161
}
5262

@@ -56,6 +66,14 @@ class PreloadingClassLoader : public class_loader::ClassLoader
5666
const auto implType = cras::getTypeName<Impl>();
5767
auto metaObject = class_loader::impl::getFactoryMapForBaseClass<Base>()[implType];
5868
metaObject->removeOwningClassLoader(this);
69+
// The following block is needed since class_loader 0.5.1
70+
{
71+
auto& loaded = class_loader::impl::getLoadedLibraryVector();
72+
const auto it = std::find_if(loaded.begin(), loaded.end(),
73+
[](const class_loader::impl::LibraryPair& pair) { return pair.first == ""; });
74+
if (it != loaded.end())
75+
loaded.erase(it);
76+
}
5977
class_loader::impl::getFactoryMapForBaseClass<Base>().erase(implType);
6078
delete metaObject;
6179
}

0 commit comments

Comments
 (0)