20 #include <boost/noncopyable.hpp>
22 #ifndef MC_RTC_BUILD_STATIC
47 virtual const char *
what() const noexcept
override {
return what_.c_str(); }
58 {
static std::mutex
MTX; };
83 LTDLHandle(
const std::string & class_name,
const std::string & path,
const std::string & rpath,
bool verbose);
94 template<
typename SymT>
98 inline bool valid()
const {
return valid_; }
101 inline const std::vector<std::string> &
classes()
const {
return classes_; }
104 inline const std::string &
path()
const {
return path_; }
113 #ifndef MC_RTC_BUILD_STATIC
117 bool global_ =
false;
119 std::vector<std::string> classes_;
171 const std::vector<std::string> & paths,
177 static unsigned int init_count_;
199 const std::vector<std::string> & paths,
242 template<
typename RetT,
typename... Args>
243 void register_object(
const std::string & name, std::function<RetT *(
const Args &...)> callback);
251 template<
typename... Args>
269 void (*delete_fn_)(T *) =
nullptr;
284 template<
typename... Args>
292 std::unordered_map<std::string, ObjectDeleter>
deleters_;
295 template<
typename... Args>
296 T *
create(
const std::string & name, Args... args);
299 template<
typename... Args>
303 template<
typename... Args>
309 #include <mc_rtc/loader.hpp>
#define MC_RTC_LOADER_DLLAPI
Definition: loader_api.h:50
std::shared_ptr< LTDLHandle > LTDLHandlePtr
Definition: loader.h:125
Generic data store.
Definition: DataStore.h:125
Wrapper around lt_dlhandle.
Definition: loader.h:71
LTDLHandle(const std::string &class_name, const std::string &path, const std::string &rpath, bool verbose)
const std::vector< std::string > & classes() const
Definition: loader.h:101
const std::string & path() const
Definition: loader.h:104
bool valid() const
Definition: loader.h:98
LTDLHandle & operator=(const LTDLHandle &)=delete
SymT get_symbol(const std::string &name)
LTDLHandle(const LTDLHandle &)=delete
Holds a global mutex for all LTDL operations.
Definition: loader.h:58
static std::mutex MTX
Definition: loader.h:58
Exception thrown by loader interface.
Definition: loader.h:43
virtual const char * what() const noexcept override
Definition: loader.h:47
LoaderException(const std::string &what)
Definition: loader.h:45
General wrapper for ltdl functionnalities.
Definition: loader.h:131
static callback_t default_cb
Definition: loader.h:138
static bool init()
Initialize ltdl.
static std::string debug_suffix
Definition: loader.h:141
static bool close()
Close ltdl. Does nothing until the last call.
static void load_libraries(const std::string &class_name, const std::vector< std::string > &paths, handle_map_t &out, bool verbose, callback_t cb)
Provide libraries handles for the libraries in paths.
std::map< std::string, LTDLHandlePtr > handle_map_t
Definition: loader.h:134
std::function< void(const std::string &, LTDLHandle &)> callback_t
Definition: loader.h:135
ObjectDeleter(void(*fn)(T *))
ObjectDeleter()
Definition: loader.h:264
ltdl wrapper for factory-like classes
Definition: loader.h:185
T * create(const std::string &name, Args... args)
T * create_from_callbacks(const std::string &name, Args... args)
void load_libraries(const std::vector< std::string > &paths, Loader::callback_t cb=Loader::default_cb)
Loader::handle_map_t handles_
Definition: loader.h:290
std::string get_object_runtime_directory(const std::string &name) const noexcept
std::unique_ptr< T, ObjectDeleter > unique_ptr
Definition: loader.h:272
T * create_from_handles(const std::string &name, Args... args)
bool has_object(const std::string &name) const
mc_rtc::DataStore callbacks_
Definition: loader.h:291
std::string class_name
Definition: loader.h:288
void set_verbosity(bool verbose)
std::shared_ptr< T > create_object(const std::string &name, Args... args)
bool verbose
Definition: loader.h:289
std::vector< std::string > objects() const
void register_object(const std::string &name, std::function< RetT *(const Args &...)> callback)
ObjectLoader(const std::string &class_name, const std::vector< std::string > &paths, bool verbose, Loader::callback_t cb=Loader::default_cb)
unique_ptr create_unique_object(const std::string &name, Args... args)
std::unordered_map< std::string, ObjectDeleter > deleters_
Definition: loader.h:292