irccd  3.0.3
Public Member Functions | List of all members
irccd::daemon::plugin_loader Class Referenceabstract

Abstract interface for searching plugins. More...

#include <plugin.hpp>

Inheritance diagram for irccd::daemon::plugin_loader:
irccd::daemon::dynlib_plugin_loader irccd::js::plugin_loader irccd::test::test_plugin_loader

Public Member Functions

 plugin_loader (std::vector< std::string > directories={}, std::vector< std::string > extensions={}) noexcept
 
virtual ~plugin_loader ()=default
 
virtual auto is_supported (std::string_view path) noexcept -> bool
 
virtual auto open (std::string_view id, std::string_view file) -> std::shared_ptr< plugin >=0
 
virtual auto find (std::string_view id) -> std::shared_ptr< plugin >
 

Detailed Description

Abstract interface for searching plugins.

This class is used to make loading of plugins extensible, the plugin_service knows some predefined plugins loaders and use them to search for available plugins.

This makes easier to implement new plugins or new ways of loading them.

See also
dynlib_plugin_loader
js_plugin_loader

Constructor & Destructor Documentation

◆ plugin_loader()

irccd::daemon::plugin_loader::plugin_loader ( std::vector< std::string >  directories = {},
std::vector< std::string >  extensions = {} 
)
noexcept

Construct the loader with a predefined set of directories and extensions.

If directories is not specified, a sensible default list of system and user paths are searched.

Precondition
!extensions.empty()
Parameters
directoriesoptional list of directories to search
extensionsoptional list of extensions

◆ ~plugin_loader()

virtual irccd::daemon::plugin_loader::~plugin_loader ( )
virtualdefault

Virtual destructor defaulted.

Reimplemented in irccd::js::plugin_loader.

Member Function Documentation

◆ find()

virtual auto irccd::daemon::plugin_loader::find ( std::string_view  id) -> std::shared_ptr< plugin >
virtual

Search for a plugin named by this id.

Parameters
idthe plugin id
Returns
the plugin
Exceptions
plugin_erroron errors

Reimplemented in irccd::test::test_plugin_loader.

◆ is_supported()

virtual auto irccd::daemon::plugin_loader::is_supported ( std::string_view  path) -> bool
virtualnoexcept

Tells if the plugin should be opened by checking file extension.

Parameters
paththe path
Returns
true if the extension matches

◆ open()

virtual auto irccd::daemon::plugin_loader::open ( std::string_view  id,
std::string_view  file 
) -> std::shared_ptr< plugin >
pure virtual

Try to open the plugin specified by path.

The implementation must test if the plugin is suitable for opening, by testing extension for example.

Parameters
idthe plugin identifier
filethe file path
Returns
the plugin
Exceptions
plugin_erroron errors

Implemented in irccd::daemon::dynlib_plugin_loader, irccd::test::test_plugin_loader, and irccd::js::plugin_loader.


The documentation for this class was generated from the following file: