Unix interface for using dynamic libraries. More...
#include <dynamic_library_traits_unix.hpp>
Public Types | |
| typedef void * | handle |
| Type of the system handle to the library. | |
Static Public Member Functions | |
| static handle | open (const std::string &name) |
| Open a library. | |
| static handle | auto_open (const std::string &name) |
| Open the current program. | |
| static void | close (handle h) |
| Close a library. | |
| template<class T > | |
| static T | get_symbol (handle h, const std::string &name) |
| Get a symbol from a library. | |
| static bool | have_symbol (handle h, const std::string &name) |
| Tell if a symbol is in the library. | |
| static bool | valid_handle (handle h) |
| Tell if an handle is a valid library handle. | |
Unix interface for using dynamic libraries.
Definition at line 43 of file dynamic_library_traits_unix.hpp.
| typedef void* claw::dynamic_library_traits_unix::handle |
Type of the system handle to the library.
Definition at line 47 of file dynamic_library_traits_unix.hpp.
| static handle claw::dynamic_library_traits_unix::auto_open | ( | const std::string & | name | ) | [inline, static] |
Open the current program.
| name | (not used) The name of the current program. |
Definition at line 72 of file dynamic_library_traits_unix.hpp.
References valid_handle().
{
handle h = dlopen( NULL, RTLD_LAZY );
if ( !valid_handle(h) )
throw claw::exception( dlerror() );
return h;
} // dynamic_library_traits_unix::auto_open()
| static void claw::dynamic_library_traits_unix::close | ( | handle | h | ) | [inline, static] |
Close a library.
| h | The handle of the library to close. |
Definition at line 87 of file dynamic_library_traits_unix.hpp.
{
dlclose(h);
} // dynamic_library_traits_unix::close()
| static T claw::dynamic_library_traits_unix::get_symbol | ( | handle | h, | |
| const std::string & | name | |||
| ) | [inline, static] |
Get a symbol from a library.
| h | Handle of the library. | |
| name | The name of the symbol to load. |
Definition at line 99 of file dynamic_library_traits_unix.hpp.
{
/* HACK : ISO standard doesn't allow to cast from a pointer to an object
to a pointer to a function. */
T result;
*(void**)(&result) = dlsym( h, name.c_str() );
return result;
} // dynamic_library_traits_unix::get_symbol()
| static bool claw::dynamic_library_traits_unix::have_symbol | ( | handle | h, | |
| const std::string & | name | |||
| ) | [inline, static] |
Tell if a symbol is in the library.
| h | Handle of the library. | |
| name | The name of the symbol to find. |
Definition at line 115 of file dynamic_library_traits_unix.hpp.
{
return dlsym( h, name.c_str() ) != NULL;
} // dynamic_library_traits_unix::have_symbol()
| static handle claw::dynamic_library_traits_unix::open | ( | const std::string & | name | ) | [inline, static] |
Open a library.
| name | The name of the library to open. |
Definition at line 56 of file dynamic_library_traits_unix.hpp.
References valid_handle().
{
handle h = dlopen( name.c_str(), RTLD_LAZY );
if ( !valid_handle(h) )
throw claw::exception( dlerror() );
return h;
} // dynamic_library_traits_unix::open()
| static bool claw::dynamic_library_traits_unix::valid_handle | ( | handle | h | ) | [inline, static] |
Tell if an handle is a valid library handle.
| h | The handle to test. |
Definition at line 125 of file dynamic_library_traits_unix.hpp.
Referenced by auto_open(), and open().
{
return h != NULL;
} // dynamic_library_traits_unix::valid_handle()
1.7.1