OpenSWMM Engine  6.0.0-alpha.3
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.3)
Loading...
Searching...
No Matches
PluginDiscovery.hpp
Go to the documentation of this file.
1
20
21#ifndef OPENSWMM_PLUGIN_DISCOVERY_HPP
22#define OPENSWMM_PLUGIN_DISCOVERY_HPP
23
24#include <string>
25#include <vector>
26
28
29/* =========================================================================
30 * Export macro
31 *
32 * The engine target sets WINDOWS_EXPORT_ALL_SYMBOLS OFF and relies on explicit
33 * export macros (see src/engine/CMakeLists.txt). On ELF/Mach-O the target's
34 * CXX_VISIBILITY_PRESET is `default`, so omitting the macro still exports the
35 * symbol — which is why the unannotated declarations below linked fine on
36 * Linux/macOS while failing on Windows with:
37 * error LNK2001: unresolved external symbol openswmm::discover_all_filters
38 * Block is byte-identical to the one in openswmm_engine.h / openswmm_2d.h;
39 * identical macro redefinition is well-defined, so including those alongside
40 * this header is safe.
41 * ========================================================================= */
42
43#ifdef OPENSWMM_ENGINE_STATIC
44# define SWMM_ENGINE_API
45#else
46# ifdef _WIN32
47# ifdef openswmm_engine_EXPORTS
48# define SWMM_ENGINE_API __declspec(dllexport)
49# else
50# define SWMM_ENGINE_API __declspec(dllimport)
51# endif
52# else
53# define SWMM_ENGINE_API __attribute__((visibility("default")))
54# endif
55#endif
56
57namespace openswmm {
58
69 std::string plugin_id;
70 std::string plugin_version;
71 std::string plugin_caption;
73
79 bool is_builtin = false;
80};
81
96SWMM_ENGINE_API std::vector<DiscoveredFilter> discover_all_filters();
97
116 std::string plugin_id;
117 std::string plugin_version;
118 std::string plugin_caption;
119 std::vector<PluginRole> roles;
120 std::vector<FileFilter> filters;
121
135 bool is_builtin = false;
136};
137
153SWMM_ENGINE_API std::vector<DiscoveredPlugin> discover_plugins_by_id();
154
155} /* namespace openswmm */
156
157#endif /* OPENSWMM_PLUGIN_DISCOVERY_HPP */
Interface that describes a plugin component — metadata and factory methods.
Definition NodeCoupling.cpp:15
std::vector< DiscoveredPlugin > discover_plugins_by_id()
Enumerate every discovered plugin, grouped by plugin_id.
Definition PluginDiscovery.cpp:39
std::vector< DiscoveredFilter > discover_all_filters()
Enumerate every FileFilter advertised by every discovered plugin.
Definition PluginDiscovery.cpp:19
#define SWMM_ENGINE_API
Definition openswmm_2d.h:37
A FileFilter paired with the plugin id and version that emitted it.
Definition PluginDiscovery.hpp:68
bool is_builtin
Definition PluginDiscovery.hpp:79
std::string plugin_caption
IPluginComponentInfo::caption() — human-readable.
Definition PluginDiscovery.hpp:71
std::string plugin_id
IPluginComponentInfo::id() of the source plugin.
Definition PluginDiscovery.hpp:69
std::string plugin_version
IPluginComponentInfo::version() of the source plugin.
Definition PluginDiscovery.hpp:70
FileFilter filter
The advertised filter.
Definition PluginDiscovery.hpp:72
A plugin grouped by id with all the roles and filters it advertises.
Definition PluginDiscovery.hpp:115
std::string plugin_version
IPluginComponentInfo::version()
Definition PluginDiscovery.hpp:117
std::string plugin_id
IPluginComponentInfo::id()
Definition PluginDiscovery.hpp:116
std::string plugin_caption
IPluginComponentInfo::caption()
Definition PluginDiscovery.hpp:118
std::vector< FileFilter > filters
Every filter the plugin advertises.
Definition PluginDiscovery.hpp:120
std::vector< PluginRole > roles
Distinct roles advertised across all filters.
Definition PluginDiscovery.hpp:119
bool is_builtin
True when the plugin was registered as an engine built-in (via PluginFactory::register_builtin_infos)...
Definition PluginDiscovery.hpp:135
A file-format filter advertised by a plugin.
Definition IPluginComponentInfo.hpp:115