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 59 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 79 of file dlloader.h.

82  :
83  mPathToLib(std::move(pathToLib)),
84  mAllocClassSymbol(std::move(allocClassSymbol)),
85  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 92 of file dlloader.h.

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

92  {
93  if (dlclose(mHandle) != 0) {
94  throw std::runtime_error(std::string{dlerror()});
95  }
96  }

◆ DLGetInstance()

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

Implements dlloader::DLLoaderInterface< T >.

Definition at line 97 of file dlloader.h.

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

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

◆ DLOpenLib()

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

Implements dlloader::DLLoaderInterface< T >.

Definition at line 87 of file dlloader.h.

87  {
88  if (!(mHandle = dlopen(mPathToLib.c_str(), RTLD_NOW|RTLD_LAZY))) {
89  throw std::runtime_error(std::string{dlerror()});
90  }
91  }

◆ LibName()

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

Implements dlloader::DLLoaderInterface< T >.

Definition at line 113 of file dlloader.h.

113  {
114  return mPathToLib;
115  }

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