20 #include <boost/noncopyable.hpp>
22 #ifndef MC_RTC_BUILD_STATIC
47 virtual const char *
what() const noexcept
override {
return what_.c_str(); }
59 static std::mutex
MTX;
85 LTDLHandle(
const std::string & class_name,
const std::string & path,
const std::string & rpath,
bool verbose);
96 template<
typename SymT>
100 inline bool valid()
const {
return valid_; }
103 inline const std::vector<std::string> &
classes()
const {
return classes_; }
106 inline const std::string &
path()
const {
return path_; }
115 #ifndef MC_RTC_BUILD_STATIC
119 bool global_ =
false;
121 std::vector<std::string> classes_;
173 const std::vector<std::string> & paths,
179 static unsigned int init_count_;
201 const std::vector<std::string> & paths,
244 template<
typename RetT,
typename... Args>
245 void register_object(
const std::string & name, std::function<RetT *(
const Args &...)> callback);
253 template<
typename... Args>
271 void (*delete_fn_)(T *) =
nullptr;
286 template<
typename... Args>
294 std::unordered_map<std::string, ObjectDeleter>
deleters_;
297 template<
typename... Args>
298 T *
create(
const std::string & name, Args... args);
301 template<
typename... Args>
305 template<
typename... Args>
311 #include <mc_rtc/loader.hpp>
#define MC_RTC_LOADER_DLLAPI
Definition: loader_api.h:50
std::shared_ptr< LTDLHandle > LTDLHandlePtr
Definition: loader.h:127
Generic data store.
Definition: DataStore.h:133
Wrapper around lt_dlhandle.
Definition: loader.h:73
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:103
const std::string & path() const
Definition: loader.h:106
bool valid() const
Definition: loader.h:100
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:59
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:133
static callback_t default_cb
Definition: loader.h:140
static bool init()
Initialize ltdl.
static std::string debug_suffix
Definition: loader.h:143
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:136
std::function< void(const std::string &, LTDLHandle &)> callback_t
Definition: loader.h:137
ObjectDeleter(void(*fn)(T *))
ObjectDeleter()
Definition: loader.h:266
ltdl wrapper for factory-like classes
Definition: loader.h:187
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:292
std::string get_object_runtime_directory(const std::string &name) const noexcept
std::unique_ptr< T, ObjectDeleter > unique_ptr
Definition: loader.h:274
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:293
std::string class_name
Definition: loader.h:290
void set_verbosity(bool verbose)
std::shared_ptr< T > create_object(const std::string &name, Args... args)
bool verbose
Definition: loader.h:291
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:294