OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
PluginState.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2//
3// Copyright 2026 Caleb Buahin
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
71
72#ifndef OPENSWMM_PLUGIN_STATE_HPP
73#define OPENSWMM_PLUGIN_STATE_HPP
74
75#include <cstdint>
76
77namespace openswmm {
78
83enum class PluginState : std::int32_t {
85 LOADED = 1,
91 CLOSED = 7,
92 ERROR = -1
93};
94
100inline const char* plugin_state_to_string(PluginState state) noexcept {
101 switch (state) {
102 case PluginState::UNLOADED: return "UNLOADED";
103 case PluginState::LOADED: return "LOADED";
104 case PluginState::INITIALIZED: return "INITIALIZED";
105 case PluginState::VALIDATED: return "VALIDATED";
106 case PluginState::PREPARED: return "PREPARED";
107 case PluginState::UPDATING: return "UPDATING";
108 case PluginState::FINALIZED: return "FINALIZED";
109 case PluginState::CLOSED: return "CLOSED";
110 case PluginState::ERROR: return "ERROR";
111 default: return "UNKNOWN";
112 }
113}
114
122 using PS = PluginState;
123 if (to == PS::ERROR) return true; // any state can transition to ERROR
124 switch (from) {
125 case PS::UNLOADED: return to == PS::LOADED;
126 case PS::LOADED: return to == PS::INITIALIZED || to == PS::CLOSED;
127 case PS::INITIALIZED: return to == PS::VALIDATED || to == PS::CLOSED;
128 case PS::VALIDATED: return to == PS::PREPARED || to == PS::CLOSED;
129 case PS::PREPARED: return to == PS::UPDATING || to == PS::FINALIZED;
130 case PS::UPDATING: return to == PS::PREPARED;
131 case PS::FINALIZED: return to == PS::CLOSED;
132 case PS::CLOSED: return false;
133 case PS::ERROR: return to == PS::CLOSED;
134 default: return false;
135 }
136}
137
138} /* namespace openswmm */
139
140#endif /* OPENSWMM_PLUGIN_STATE_HPP */
@ CLOSED
Resources released.
Definition SimulationContext.hpp:269
@ INITIALIZED
Initial conditions applied.
Definition SimulationContext.hpp:264
PluginState
Plugin lifecycle states.
Definition PluginState.hpp:83
@ CLOSED
Library closed and handle released.
Definition PluginState.hpp:91
@ FINALIZED
finalize() returned success; no more update() calls.
Definition PluginState.hpp:90
@ VALIDATED
validate() returned success.
Definition PluginState.hpp:87
@ PREPARED
prepare() returned success; ready to accept update() calls.
Definition PluginState.hpp:88
@ UNLOADED
Library not yet loaded (or was closed).
Definition PluginState.hpp:84
@ LOADED
Shared library opened via dlopen/LoadLibrary.
Definition PluginState.hpp:85
@ ERROR
Plugin is in an error state; not usable.
Definition PluginState.hpp:92
@ UPDATING
Currently executing an update() call (transient; not normally observed).
Definition PluginState.hpp:89
@ INITIALIZED
initialize() returned success.
Definition PluginState.hpp:86
Definition NodeCoupling.cpp:16
bool plugin_state_transition_valid(PluginState from, PluginState to) noexcept
Check whether a state transition is valid.
Definition PluginState.hpp:121
const char * plugin_state_to_string(PluginState state) noexcept
Convert a PluginState to a human-readable string.
Definition PluginState.hpp:100