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