NAMD
Public Member Functions | List of all members
dlloader::DLLoader< T > Class Template Reference

#include <ComputeMgr.h>

Inheritance diagram for dlloader::DLLoader< T >:
dlloader::DLLoaderInterface< T >

Public Member Functions

 DLLoader (std::string pathToLib, std::string allocClassSymbol="allocator", std::string deleteClassSymbol="deleter")
 
 ~DLLoader ()=default
 
void DLOpenLib () override
 
void DLCloseLib () override
 
std::shared_ptr< T > DLGetInstance () override
 
std::string LibName () const override
 
- Public Member Functions inherited from dlloader::DLLoaderInterface< T >
virtual ~DLLoaderInterface ()=default
 

Detailed Description

template<typename T>
class dlloader::DLLoader< T >

Definition at line 63 of file ComputeMgr.h.

Constructor & Destructor Documentation

◆ DLLoader()

template<typename T >
dlloader::DLLoader< T >::DLLoader ( std::string  pathToLib,
std::string  allocClassSymbol = "allocator",
std::string  deleteClassSymbol = "deleter" 
)
inline

Definition at line 85 of file dlloader.h.

88  :
89  mPathToLib(std::move(pathToLib)),
90  mAllocClassSymbol(std::move(allocClassSymbol)),
91  mDeleteClassSymbol(std::move(deleteClassSymbol)) {}

◆ ~DLLoader()

template<typename T >
dlloader::DLLoader< T >::~DLLoader ( )
default

Member Function Documentation

◆ DLCloseLib()

template<typename T >
void dlloader::DLLoader< T >::DLCloseLib ( )
inlineoverridevirtual

Implements dlloader::DLLoaderInterface< T >.

Definition at line 98 of file dlloader.h.

Referenced by dlloader::DLLoader< T >::DLGetInstance().

98  {
99  if (dlclose(mHandle) != 0) {
100  throw std::runtime_error(std::string{dlerror()});
101  }
102  }

◆ DLGetInstance()

template<typename T >
std::shared_ptr<T> dlloader::DLLoader< T >::DLGetInstance ( )
inlineoverridevirtual

Implements dlloader::DLLoaderInterface< T >.

Definition at line 103 of file dlloader.h.

References dlloader::DLLoader< T >::DLCloseLib().

103  {
104  using allocClass = T *(*)();
105  using deleteClass = void (*)(T *);
106  auto allocFunc = reinterpret_cast<allocClass>(dlsym(mHandle, mAllocClassSymbol.c_str()));
107  auto deleteFunc = reinterpret_cast<deleteClass>(dlsym(mHandle, mDeleteClassSymbol.c_str()));
108  if (!allocFunc || !deleteFunc) {
109  try {
110  DLCloseLib();
111  throw std::runtime_error(std::string{dlerror()});
112  } catch (...) {
113  throw;
114  }
115  throw std::runtime_error(std::string{dlerror()});
116  }
117  return std::shared_ptr<T>(allocFunc(), [deleteFunc](T* p){deleteFunc(p);});
118  }
void DLCloseLib() override
Definition: dlloader.h:98

◆ DLOpenLib()

template<typename T >
void dlloader::DLLoader< T >::DLOpenLib ( )
inlineoverridevirtual

Implements dlloader::DLLoaderInterface< T >.

Definition at line 93 of file dlloader.h.

93  {
94  if (!(mHandle = dlopen(mPathToLib.c_str(), RTLD_NOW|RTLD_LAZY|RTLD_DEEPBIND))) {
95  throw std::runtime_error(std::string{dlerror()});
96  }
97  }

◆ LibName()

template<typename T >
std::string dlloader::DLLoader< T >::LibName ( ) const
inlineoverridevirtual

Implements dlloader::DLLoaderInterface< T >.

Definition at line 119 of file dlloader.h.

119  {
120  return mPathToLib;
121  }

The documentation for this class was generated from the following files: