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