Go to the documentation of this file.
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>
97 SymT get_symbol(
const std::string & name);
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_; }
109 std::string dir()
const;
115 #ifndef MC_RTC_BUILD_STATIC
119 bool global_ =
false;
121 std::vector<std::string> classes_;
172 static void load_libraries(
const std::string & class_name,
173 const std::vector<std::string> & paths,
179 static unsigned int init_count_;
201 const std::vector<std::string> & paths,
211 bool has_object(
const std::string & name)
const;
216 std::vector<std::string>
objects()
const;
244 template<
typename RetT,
typename... Args>
245 void register_object(
const std::string & name, std::function<RetT *(
const Args &...)> callback);
253 template<
typename... Args>
254 std::shared_ptr<T>
create_object(
const std::string & name, Args... 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>
std::unique_ptr< T, ObjectDeleter > unique_ptr
Definition: loader.h:274
virtual const char * what() const noexcept override
Definition: loader.h:47
ltdl wrapper for factory-like classes
Definition: loader.h:37
void set_verbosity(bool verbose)
bool has_object(const std::string &name) const
Generic data store.
Definition: DataStore.h:132
std::shared_ptr< T > create_object(const std::string &name, Args... args)
ObjectDeleter()
Definition: loader.h:266
void load_libraries(const std::vector< std::string > &paths, Loader::callback_t cb=Loader::default_cb)
bool verbose
Definition: loader.h:291
LoaderException(const std::string &what)
Definition: loader.h:45
unique_ptr create_unique_object(const std::string &name, Args... args)
#define MC_RTC_LOADER_DLLAPI
Definition: loader_api.h:50
std::vector< std::string > objects() const
std::function< void(const std::string &, LTDLHandle &)> callback_t
Definition: loader.h:137
T * create_from_callbacks(const std::string &name, Args... args)
T * create_from_handles(const std::string &name, Args... args)
std::string get_object_runtime_directory(const std::string &name) const noexcept
static callback_t default_cb
Definition: loader.h:140
static std::string debug_suffix
Definition: loader.h:143
General wrapper for ltdl functionnalities.
Definition: loader.h:132
ObjectLoader(const std::string &class_name, const std::vector< std::string > &paths, bool verbose, Loader::callback_t cb=Loader::default_cb)
std::string class_name
Definition: loader.h:290
Exception thrown by loader interface.
Definition: loader.h:42
Loader::handle_map_t handles_
Definition: loader.h:292
const std::string & path() const
Definition: loader.h:106
Holds a global mutex for all LTDL operations.
Definition: loader.h:57
static std::mutex MTX
Definition: loader.h:59
std::unordered_map< std::string, ObjectDeleter > deleters_
Definition: loader.h:294
const std::vector< std::string > & classes() const
Definition: loader.h:103
bool valid() const
Definition: loader.h:100
mc_rtc::DataStore callbacks_
Definition: loader.h:293
void register_object(const std::string &name, std::function< RetT *(const Args &...)> callback)
T * create(const std::string &name, Args... args)
Wrapper around lt_dlhandle.
Definition: loader.h:72
std::map< std::string, LTDLHandlePtr > handle_map_t
Definition: loader.h:136
std::shared_ptr< LTDLHandle > LTDLHandlePtr
Definition: loader.h:127