42 lines
783 B
C
42 lines
783 B
C
|
#pragma once
|
||
|
|
||
|
namespace vlc
|
||
|
{
|
||
|
struct VLC_LIBRARY_API Library
|
||
|
{
|
||
|
using LibraryHandle = void*;
|
||
|
|
||
|
LibraryHandle _handle = nullptr;
|
||
|
|
||
|
Library() = default;
|
||
|
~Library();
|
||
|
|
||
|
Library(const Library&) = delete;
|
||
|
Library& operator = (const Library&) = delete;
|
||
|
|
||
|
Library(Library&& src)
|
||
|
{
|
||
|
std::swap(_handle, src._handle);
|
||
|
}
|
||
|
|
||
|
Library& operator = (Library&& src)
|
||
|
{
|
||
|
std::swap(_handle, src._handle);
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
explicit operator bool() const
|
||
|
{
|
||
|
return _handle != nullptr;
|
||
|
}
|
||
|
|
||
|
bool load(const char* name, bool auto_ext = true);
|
||
|
void* symbol(const char* name);
|
||
|
|
||
|
template<typename F> F get(const char* name)
|
||
|
{
|
||
|
return reinterpret_cast<F>(symbol(name));
|
||
|
}
|
||
|
};
|
||
|
}
|