59 -> std::expected<const DynamicLibrary *, rtp::Error>
61 return this->getOrLoadInternal(path).transform(
62 [](
const std::shared_ptr<DynamicLibrary> &libPtr)
70 -> std::expected<std::shared_ptr<DynamicLibrary>,
rtp::Error>
72 return this->getOrLoadInternal(path);
76 -> std::expected<std::unique_ptr<DynamicLibrary>,
rtp::Error>
79 if (!handle.has_value()) [[unlikely]]
81 "Failed to load dynamic library at " \
82 "'{}': '{}'", path, handle.error())};
84 return std::make_unique<DynamicLibrary>(handle.value());
92 -> std::expected<std::shared_ptr<DynamicLibrary>,
rtp::Error>
94 const std::string pathStr{path};
99 std::shared_lock lock{this->_mutex};
100 auto it = this->_libraries.find(pathStr);
101 if (it != this->_libraries.end()) [[likely]]
106 std::unique_lock lock{this->_mutex};
107 auto it = this->_libraries.find(pathStr);
108 if (it != this->_libraries.end()) [[unlikely]]
112 if (!handle.has_value()) [[unlikely]]
113 return std::unexpected{
115 "Failed to load dynamic library at " \
116 "'{}': '{}'", path, handle.error())};
118 auto lib = std::make_shared<DynamicLibrary>(handle.value());
119 this->_libraries.emplace(std::string{path}, lib);
Declarations for platform-specific dynamic library handling.
Declaration of the Dynamic Library Manager.
Comprehensive error object with severity and retry tracking.
static auto failure(ErrorCode code, std::format_string< Args... > fmt, Args &&...args) -> Error
Create a failure-level error.
Represents a dynamically loaded library.
auto get(std::string_view name) const -> std::expected< T, rtp::Error >
Get a symbol from the dynamic library.
auto loadShared(std::string_view path) -> std::expected< std::shared_ptr< DynamicLibrary >, rtp::Error >
Shared API.
auto load(std::string_view path) -> std::expected< const DynamicLibrary *, rtp::Error >
Main API.
static auto loadStandalone(std::string_view path) -> std::expected< std::unique_ptr< DynamicLibrary >, rtp::Error >
Isolated API (Factory).
auto getOrLoadInternal(std::string_view path) -> std::expected< std::shared_ptr< DynamicLibrary >, rtp::Error >
Get an existing library or load it if not present.
static auto open(std::string_view path) -> std::expected< void *, rtp::Error >
Open a dynamic library from the given path.
@ LibraryLoadFailed
Failed to load dynamic library.