ALib C++ Library
Library Version: 2402 R1
Documentation generated by doxygen
Loading...
Searching...
No Matches
PluginContainer< pTPlugin, pTPriorities > Class Template Reference

Description:

template<typename pTPlugin, typename pTPriorities>
class alib::lang::PluginContainer< pTPlugin, pTPriorities >

This class usually is used as a base class for types that need to manage simple plug-ins. Within ALib itself, for example classes Configuration and Compiler inherit from this class.

Plug-ins are organized with a prioritization. This means, that plug-ins which are inserted with a higher priority are 'asked' first, and those with a lower value become 'asked' only if higher prioritized plug-ins did not answer.
However, a derived class can deviate from this behavior. Using the typical ALib class design, all internal fields are protected, hence freely accessible by derived classes.

Template Parameters
pTPluginThe type of the plug-ins managed. This type is publicly exposed as TPlugin.
pTPrioritiesThe enumeration type providing the default "plug-in slots" and priorities of the plug-ins managed. This type is publicly exposed as TPriorities.

Definition at line 53 of file lang/plugins.hpp.

#include <plugins.hpp>

Collaboration diagram for PluginContainer< pTPlugin, pTPriorities >:
[legend]

Inner Type Index:

struct  Slot
 

Public Type Index:

using TPlugin = pTPlugin
 
using TPriorities = pTPriorities
 

Public Method Index:

 ~PluginContainer ()
 
integer CountPlugins ()
 
TPluginGetPlugin (integer number)
 
TPluginGetPlugin (TPriorities priority)
 
template<typename TPluginType >
TPluginType * GetPluginTypeSafe ()
 
template<typename TPluginType >
TPluginType * GetPluginTypeSafe (TPriorities priority)
 
bool HasPlugins ()
 
void InsertPlugin (TPlugin *plugin, TPriorities priority, lang::Responsibility responsibility=lang::Responsibility::KeepWithSender)
 
void RemovePlugin (integer idx)
 
bool RemovePlugin (TPlugin *plugIn)
 
TPluginRemovePlugin (TPriorities priority)
 

Type Definition Details:

◆ TPlugin

template<typename pTPlugin , typename pTPriorities >
using TPlugin = pTPlugin

This exposes the template parameter pTPlugin to the outer world.

Definition at line 61 of file lang/plugins.hpp.

◆ TPriorities

template<typename pTPlugin , typename pTPriorities >
using TPriorities = pTPriorities

This exposes the template parameter pTPlugin to the outer world.

Definition at line 64 of file lang/plugins.hpp.

Field Details:

◆ plugins

template<typename pTPlugin , typename pTPriorities >
std::vector<Slot> plugins
protected

The plug-ins we have attached in descending priority order.

Definition at line 81 of file lang/plugins.hpp.

Constructor(s) / Destructor Details::

◆ ~PluginContainer()

template<typename pTPlugin , typename pTPriorities >
~PluginContainer ( )
inline

Destructor. All plug-ins that were inserted with parameter responsibility set to Responsibility::Transfer will be deleted.

Definition at line 91 of file lang/plugins.hpp.

Method Details:

◆ CountPlugins()

template<typename pTPlugin , typename pTPriorities >
integer CountPlugins ( )
inline

Returns the number of plug-ins attached.

Returns
The quantity of attached plug-ins.

Definition at line 237 of file lang/plugins.hpp.

◆ GetPlugin() [1/2]

template<typename pTPlugin , typename pTPriorities >
TPlugin * GetPlugin ( integer number)
inline

Returns the plug-in with the given internal number. Valid numbers are 0..[CountPlugins]. No internal checks for valid plug-in numbers are made.

Parameters
numberThe number of the plug-in requested.
Returns
The plug-in requested or nullptr if not available.

Definition at line 249 of file lang/plugins.hpp.

◆ GetPlugin() [2/2]

template<typename pTPlugin , typename pTPriorities >
TPlugin * GetPlugin ( TPriorities priority)
inline

Returns the plug-in with the given priority. If the plug-in does not exist, nullptr is returned.

Parameters
priorityThe priority of the plug-in to return.
Returns
The plug-in requested or nullptr if not available.

Definition at line 262 of file lang/plugins.hpp.

◆ GetPluginTypeSafe() [1/2]

template<typename pTPlugin , typename pTPriorities >
template<typename TPluginType >
TPluginType * GetPluginTypeSafe ( )
inline

Searches the list of plug-ins for the first found with type TPluginType .

Template Parameters
TPluginTypeThe type of the plugin to search.
Returns
The plug-in of requested type. nullptr if not available.

Definition at line 295 of file lang/plugins.hpp.

◆ GetPluginTypeSafe() [2/2]

template<typename pTPlugin , typename pTPriorities >
template<typename TPluginType >
TPluginType * GetPluginTypeSafe ( TPriorities priority)
inline

Same as GetPlugin, but converts the plug-in found to the template type, which has to be explicitly provided with the invocation of this method.

A type-check is performed using standard C++ dynamic_cast mechanics. If the plugin has a different type, nullptr is returned.

Template Parameters
TPluginTypeThe type of the plugin to search.
Parameters
priorityThe priority of the plug-in to return.
Returns
The plug-in of requested type and priority. nullptr if not available.

Definition at line 283 of file lang/plugins.hpp.

Here is the call graph for this function:

◆ HasPlugins()

template<typename pTPlugin , typename pTPriorities >
bool HasPlugins ( )
inline

Checks if any plug-in is attached. This is useful if optional configuration objects are used. In case no plug-in was attached (by a third party), the effort to declare and search a variable can be omitted.

Returns
true if this object has any plugin set, false otherwise.

Definition at line 228 of file lang/plugins.hpp.

Here is the call graph for this function:

◆ InsertPlugin()

template<typename pTPlugin , typename pTPriorities >
void InsertPlugin ( TPlugin * plugin,
TPriorities priority,
lang::Responsibility responsibility = lang::Responsibility::KeepWithSender )
inline

Adds the given plug-in to the list of plug-ins.. Higher numbers for parameter priority, prioritize this plug-in against those with lower values.

Default values may be provided in case template type TPriorities is an arithmetical enumeration .

Parameters
pluginThe plug-in to insert.
priorityThe priority of the plug-in.
responsibilityIf Responsibility::Transfer, the given plugin will be deleted with destruction of this object. Defaults to Responsibility::KeepWithSender which denotes that the life-cycle of the given external buffer is managed elsewhere.

Definition at line 119 of file lang/plugins.hpp.

◆ RemovePlugin() [1/3]

template<typename pTPlugin , typename pTPriorities >
void RemovePlugin ( integer idx)
inline

Remove the plug-in at the given idx from the list of plug-ins.

Responsibility for deletion of removed plug-ins is passed to the remover in case the plug-in was inserted with parameter responsibility set to Responsibility::Transfer .

Parameters
idxThe index of the plug-in to remove.

Definition at line 181 of file lang/plugins.hpp.

Here is the call graph for this function:

◆ RemovePlugin() [2/3]

template<typename pTPlugin , typename pTPriorities >
bool RemovePlugin ( TPlugin * plugIn)
inline

Remove the given plug-in from the list of plug-ins.

Responsibility for deletion of removed plug-ins is passed to the remover in case the plug-in was inserted with parameter responsibility set to Responsibility::Transfer .

Parameters
plugInThe plug-in to be removed.
Returns
true if the plug-in was removed, else false, which indicates that the given plug-in was not found.

Definition at line 156 of file lang/plugins.hpp.

◆ RemovePlugin() [3/3]

template<typename pTPlugin , typename pTPriorities >
TPlugin * RemovePlugin ( TPriorities priority)
inline

Remove the plug-in with the given priority.

Responsibility for deletion of removed plug-ins is passed to the remover in case the plug-in was inserted with parameter responsibility set to Responsibility::Transfer .

Parameters
priorityThe priority of the plug-in to remove.
Returns
true if the plug-in was removed, else false, which indicates that no plug-in with the given priority was found.

Definition at line 200 of file lang/plugins.hpp.


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