8 #ifndef HPP_ALIB_FS_PLUGINS_PLUGINS
9 #define HPP_ALIB_FS_PLUGINS_PLUGINS 1
11 #if !defined(HPP_ALIB_MODULES) && !defined(ALIB_DOX)
17 #if !defined(HPP_ALIB_TOOLS) && !defined(ALIB_DOX)
21 #if !defined(HPP_ALIB_FEATURES) && !defined(ALIB_DOX)
25 #if !defined(HPP_ALIB_FS_COMMONENUMS_DEFS)
29 #if !defined (HPP_ALIB_ENUMS_BITWISE)
33 #if !defined (_GLIBCXX_VECTOR) && !defined(_VECTOR_)
37 #if !defined (_GLIBCXX_ALGORITHM) && !defined(_ALGORITHM_)
41 namespace aworx {
namespace lib {
namespace detail {
58 template<
typename pTPlugin,
typename pTPriorities>
129 ALIB_ASSERT_ERROR( plugin !=
nullptr,
"FSPLUGINS",
"Nullptr provided for plugin." )
131 static_assert( std::has_virtual_destructor<TPlugin>::value
133 "Can't take responsibility for plug-in destruction. TPlugin has no virtual destructor." );
136 [priority]( Slot& ppp)
139 "PluginContainer::InsertPlugin(): Plug-in with same priority exists" )
141 return ppp.priority < priority;
164 auto it= std::find_if(
plugins.begin(),
plugins.end(), [plugIn](Slot& pair)
166 return pair.plugin == plugIn;
174 ALIB_WARNING(
"PluginContainer::RemovePlugin(): Plug-in not found for removal." )
190 "FSPLUGINS: PluginContainer::RemovePlugin(): Index out of bounds: ", idx )
210 [priority, &plugin](Slot& entry)
212 if( entry.priority == priority)
214 plugin= entry.plugin;
222 "PluginContainer::RemovePlugin(): No Plug-in was removed " )
245 return static_cast<integer>(
plugins.size());
257 return plugins[static_cast<size_t>(number)].plugin;
271 [priority](Slot& pair) {
return pair.priority == priority; } );
288 template<
typename TPluginType>
291 return dynamic_cast<TPluginType*>(
GetPlugin( priority ) );
300 template<
typename TPluginType>
303 TPluginType* casted=
nullptr;
305 if( (casted= dynamic_cast<TPluginType*>( ppp.plugin )) !=
nullptr )
318 #endif // HPP_ALIB_FS_PLUGINS_PLUGINS