56#ifndef OPENSWMM_ENGINE_PLUGIN_FACTORY_HPP
57#define OPENSWMM_ENGINE_PLUGIN_FACTORY_HPP
61#include <unordered_map>
120 void discover(std::function<
void(const std::
string&)> warn_cb = {});
130 const std::string& path,
131 std::function<
void(
const std::string&)> warn_cb = {}
149 const std::string& id_or_path,
150 std::function<
void(
const std::string&)> warn_cb = {}
193 const std::vector<PluginSpec>& specs,
194 std::function<
void(
const std::string&)> warn_cb = {}
212 const std::vector<IInputPlugin*>&
input_plugins() const noexcept {
return input_plugins_; }
213 const std::vector<IOutputPlugin*>&
output_plugins() const noexcept {
return output_plugins_; }
214 const std::vector<IReportPlugin*>&
report_plugins() const noexcept {
return report_plugins_; }
215 const std::vector<IStateIOPlugin*>&
state_io_plugins() const noexcept {
return state_io_plugins_; }
218 return static_cast<int>(input_plugins_.size()
219 + output_plugins_.size()
220 + report_plugins_.size()
221 + state_io_plugins_.size());
243 void* handle =
nullptr;
244 IPluginComponentInfo* info =
nullptr;
253 std::unordered_map<std::string, std::size_t> registry_;
259 std::vector<LibEntry> libs_;
260 std::vector<IInputPlugin*> input_plugins_;
261 std::vector<IOutputPlugin*> output_plugins_;
262 std::vector<IReportPlugin*> report_plugins_;
263 std::vector<IStateIOPlugin*> state_io_plugins_;
264 std::vector<std::vector<std::string>> init_args_;
270 void scan_directory(
const std::string& dir_path,
271 std::function<
void(
const std::string&)> warn_cb);
283 void register_builtin_infos();
292 void validate_filter_invariant(IPluginComponentInfo* info,
293 const std::string& source_path,
294 std::function<
void(
const std::string&)> warn_cb);
296 static bool is_file_path(
const std::string& str);
297 static bool is_shared_library(
const std::string& filename);
298 static std::string get_library_directory();
300 static void* platform_load(
const std::string& path);
301 static void platform_unload(
void* handle)
noexcept;
302 static void* platform_sym(
void* handle,
const char* sym)
noexcept;
303 static std::string platform_error() noexcept;
Interface for output-writing plugins.
Definition IOutputPlugin.hpp:73
Describes a plugin component: metadata, capabilities, and factory methods.
Definition IPluginComponentInfo.hpp:195
Interface for report-writing plugins.
Definition IReportPlugin.hpp:61
Interface for state / hot-start IO plugins.
Definition IStateIOPlugin.hpp:69
IPluginComponentInfo * find_component(const std::string &id_or_path, std::function< void(const std::string &)> warn_cb={})
Resolve a plugin identifier to its component info.
Definition PluginFactory.cpp:316
int prepare_all(SimulationContext &ctx)
Definition PluginFactory.cpp:488
int validate_all(SimulationContext &ctx)
Definition PluginFactory.cpp:464
~PluginFactory()
Definition PluginFactory.cpp:82
IPluginComponentInfo * load_library(const std::string &path, std::function< void(const std::string &)> warn_cb={})
Load a single shared library and register it in the component registry.
Definition PluginFactory.cpp:247
PluginFactory(PluginFactory &&) noexcept=default
void add_input_plugin(IInputPlugin *plugin)
Definition PluginFactory.cpp:572
void add_output_plugin(IOutputPlugin *plugin, std::vector< std::string > args={})
Definition PluginFactory.cpp:562
int write_summary_all(SimulationContext &ctx)
Definition PluginFactory.cpp:549
void discover(std::function< void(const std::string &)> warn_cb={})
Scan standard directories for compatible plugin libraries.
Definition PluginFactory.cpp:204
const std::vector< IReportPlugin * > & report_plugins() const noexcept
Definition PluginFactory.hpp:214
int load_plugins(const std::vector< PluginSpec > &specs, std::function< void(const std::string &)> warn_cb={})
Load plugins from a list of specs (from [PLUGINS] section).
Definition PluginFactory.cpp:372
bool empty() const noexcept
Definition PluginFactory.hpp:224
void unload_all()
Definition PluginFactory.cpp:584
const std::vector< IStateIOPlugin * > & state_io_plugins() const noexcept
Definition PluginFactory.hpp:215
PluginFactory(const PluginFactory &)=delete
int initialize_all(SimulationContext &ctx)
Definition PluginFactory.cpp:413
int finalize_all(SimulationContext &ctx)
Definition PluginFactory.cpp:528
const std::vector< IInputPlugin * > & input_plugins() const noexcept
Definition PluginFactory.hpp:212
void add_state_io_plugin(IStateIOPlugin *plugin)
Definition PluginFactory.cpp:576
const std::vector< IOutputPlugin * > & output_plugins() const noexcept
Definition PluginFactory.hpp:213
int update_all(const SimulationSnapshot &snapshot)
Definition PluginFactory.cpp:507
PluginFactory & operator=(const PluginFactory &)=delete
int plugin_count() const noexcept
Definition PluginFactory.hpp:217
std::vector< ComponentEntry > discovered_components() const
Definition PluginFactory.cpp:344
void add_report_plugin(IReportPlugin *plugin)
Definition PluginFactory.cpp:568
PluginFactory()
Construct and auto-discover plugins in standard directories.
Definition PluginFactory.cpp:77
PluginType
Identifies a plugin capability.
Definition IPluginComponentInfo.hpp:75
Definition NodeCoupling.cpp:16
List all discovered component info entries.
Definition PluginFactory.hpp:159
std::string id
Definition PluginFactory.hpp:160
bool has_state_io
Definition PluginFactory.hpp:165
bool has_output
Definition PluginFactory.hpp:163
bool is_builtin
Definition PluginFactory.hpp:174
std::string version
Definition PluginFactory.hpp:161
bool has_input
Definition PluginFactory.hpp:162
IPluginComponentInfo * info
Definition PluginFactory.hpp:166
bool has_report
Definition PluginFactory.hpp:164
One plugin entry from the [PLUGINS] section.
Definition SimulationContext.hpp:132
Central, reentrant simulation context.
Definition SimulationContext.hpp:353
Complete simulation state snapshot at one output time step.
Definition SimulationSnapshot.hpp:117