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.

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