44#ifndef OPENSWMM_ENGINE_PLUGIN_FACTORY_HPP
45#define OPENSWMM_ENGINE_PLUGIN_FACTORY_HPP
53 class IPluginComponentInfo;
56 struct SimulationContext;
57 struct SimulationSnapshot;
102 std::function<
void(const std::
string&)> warn_cb = {}
157 return output_plugins_;
162 return report_plugins_;
167 return static_cast<int>(output_plugins_.size() + report_plugins_.size());
185 std::vector<std::string> args = {});
198 void* handle =
nullptr;
199 IPluginComponentInfo* info =
nullptr;
203 std::vector<LibEntry> libs_;
204 std::vector<IOutputPlugin*> output_plugins_;
205 std::vector<IReportPlugin*> report_plugins_;
206 std::vector<std::vector<std::string>> init_args_;
212 static void* platform_load(
const std::string& path);
213 static void platform_unload(
void* handle)
noexcept;
214 static void* platform_sym(
void* handle,
const char* sym)
noexcept;
215 static std::string platform_error() noexcept;
Interface for output-writing plugins.
Definition IOutputPlugin.hpp:57
Manages all dynamically loaded plugins for one engine instance.
Definition PluginFactory.hpp:72
int prepare_all(SimulationContext &ctx)
Call prepare() on all plugins (open output files, write headers).
Definition PluginFactory.cpp:227
int validate_all(SimulationContext &ctx)
Call validate() on all plugins.
Definition PluginFactory.cpp:208
~PluginFactory()
Definition PluginFactory.cpp:41
PluginFactory(PluginFactory &&) noexcept=default
void add_output_plugin(IOutputPlugin *plugin, std::vector< std::string > args={})
Inject a pre-created output plugin instance (takes ownership).
Definition PluginFactory.cpp:301
int write_summary_all(SimulationContext &ctx)
Call write_summary() on all report plugins.
Definition PluginFactory.cpp:284
const std::vector< IReportPlugin * > & report_plugins() const noexcept
All loaded report plugin instances.
Definition PluginFactory.hpp:161
int load_plugins(const std::vector< PluginSpec > &specs, std::function< void(const std::string &)> warn_cb={})
Load all plugins listed in the given specs.
Definition PluginFactory.cpp:94
bool empty() const noexcept
True if no plugins have been loaded.
Definition PluginFactory.hpp:171
void unload_all()
Unload all plugins and close library handles.
Definition PluginFactory.cpp:315
PluginFactory(const PluginFactory &)=delete
int initialize_all(SimulationContext &ctx)
Call initialize() on all output and report plugins.
Definition PluginFactory.cpp:167
int finalize_all(SimulationContext &ctx)
Call finalize() on all plugins.
Definition PluginFactory.cpp:267
const std::vector< IOutputPlugin * > & output_plugins() const noexcept
All loaded output plugin instances.
Definition PluginFactory.hpp:156
int update_all(const SimulationSnapshot &snapshot)
Deliver a snapshot to all output AND report plugins.
Definition PluginFactory.cpp:246
PluginFactory & operator=(const PluginFactory &)=delete
int plugin_count() const noexcept
Total number of loaded plugins (output + report).
Definition PluginFactory.hpp:166
void add_report_plugin(IReportPlugin *plugin)
Inject a pre-created report plugin instance (takes ownership).
Definition PluginFactory.cpp:307
Definition Controls.cpp:24
One plugin entry from the [PLUGINS] section.
Definition SimulationContext.hpp:99
Central, reentrant simulation context.
Definition SimulationContext.hpp:141
Complete simulation state snapshot at one output time step.
Definition SimulationSnapshot.hpp:90