shiva::dll
plugins_registry:
Description
This class allows you to store plugin creation symbols through its template CreatorSignature parameter. Through this class you are able to retrieve the number of plugins, apply a functor on each of the symbols (as creates the plugin for example).
Diagram

plugins_registry API
template <typename CreatorSignature>
class plugins_registry;
load_all_symbols
bool load_all_symbols() noexcept;
Return value
Possible name
Description
success
boolean
true if all the symbols of all the libraries have been correctly loaded
false if a symbol from one of the libraries was not loaded
false if the plugins_directory doesn't exist
Example
bool success = plugins_registry.load_all_symbols();
if (!success) {
/* The loading of symbols failed */
}
Notes
This function allows you to load symbols from the template to create the object. The symbols are loaded recursively from the folder you specified in the object's constructor.
If one of the symbols could not be correctly loaded the function does not stop and proceeds to load the next plugin. If when browsing folders a corrupted file is spotted the function switch to loading the next plugin.
nb_plugins
size_t nb_plugins() const noexcept;
Return value
Possible name
Description
nb_plugins
size_t
numbers of plugins
Example
size_t nb_plugins = plugins_registry.nb_plugins();
if (nb_plugins < 4) {
//! Oh no, i was exepcting at least 4 plugins
}
apply_on_each_symbols
template <typename TFunctor>
void apply_on_each_symbols(TFunctor &&functor);
Template parameters
Name
Description
functor
TFunctor
represents the functor to apply on each of the loaded symbols.
Example
auto functor = [this](auto &&symbol) {
auto res = symbol(/* parmeters for the creation of the object */);
// res -> object created by the symbol creator
// manipulate res or put it in a container for example.
this->container_object.push_back(std::move(res));
};
plugins_registry_.apply_on_each_symbols(functor);
Notes
This function applies the functor as a parameter to each of the symbols that were previously loaded by the load_all_symbols function.
helpers
Functions Name
Description
check if a specific path is a shared library
is_shared_library
static inline bool is_shared_library(const fs::path &path) noexcept;
Parameters
Name
Description
path
fs::path
the path to be tested
Return value
Possible name
Description
result
boolean
true if the path is a shared_library
false otherwise
Example
// result is true
bool result = shiva::helpers::is_shared_library(shiva::fs::path("path/libfoo.so"));
// result is false
result = shiva::helpers::is_shared_library(shiva::fs::path("path/libbar"));
if (!result) {
/* The path given as parameter doesn't seem's to be a shared_library */
}
Notes
check if the path passed in parameter is a shared library
Last updated