5#ifndef LINE_SOLVERS_MAP_ENV_GATE_H
6#define LINE_SOLVERS_MAP_ENV_GATE_H
57 std::string
mode =
"default";
60 bool off()
const {
return mode ==
"off"; }
65 static const std::vector<qn::Feature> t = {qn::Feature::MAP, qn::Feature::MMAP,
66 qn::Feature::MMPP2, qn::Feature::MPH};
73 for (std::size_t i = 0; i < t.size(); ++i)
74 if (t[i] == f)
return true;
86 for (std::size_t i = 0; i <
tokens.size(); ++i) {
111 if (cfg.off())
return d;
115 for (std::size_t i = 0; i < r.
missing.size(); ++i)
134 if (solver ==
"SolverFLD" || solver ==
"SolverFluid")
return "fluid";
135 if (solver ==
"SolverCTMC")
return "ctmc";
136 return std::string();
149 return solver ==
"SolverFLD" || solver ==
"SolverFluid" || solver ==
"SolverCTMC" ||
150 solver ==
"SolverLDES" || solver ==
"SolverJMT";
A subset of the registry: MATLAB's SolverFeatureSet, whose list is a flag per field.
A network plus its refreshed NetworkStruct.
The language-feature gate: what a MODEL uses against what a SOLVER declares.
FeatureSet used_lang_features(const NetworkStruct< T > &sn)
Feature
One language feature.
SupportResult feature_set_supports(const std::string &solver, const FeatureSet &declared, const FeatureSet &used)
SolverFeatureSet.supports: is every feature the model uses declared?
const char * feature_name(Feature f)
The canonical registry name, byte for byte the MATLAB field name.
MapEnvDecision needs_map_env(const qn::FeatureSet &declared, const qn::NetworkStruct< T > &sn, const MapEnvConfig &cfg=MapEnvConfig())
needsMapEnv: does this model need the environment image, and would the image make it solvable?
bool is_map_env_token(qn::Feature f)
True when f is one of the four.
std::string map_env_stage_backend(const std::string &solver)
Which ENV stage backend a solver's name maps to, or empty when it has none.
const std::vector< qn::Feature > & map_env_tokens()
The four process names an environment image can represent; the order is the registry's.
bool supports_transient_analysis(const std::string &solver)
supportsTransientAnalysis: does this solver produce transient averages?
Conservation laws of a layered queueing network, enumerated from its structure.
The outcome of the gate: the verdict, the offending features, the message.
std::vector< Feature > missing
used but not declared, in registry order
The caller-facing map_env knobs, options.config.map_env and friends.
std::size_t max_stages
0 = the transform's own default cap
What the gate decided, and what it decided it about.
std::vector< qn::Feature > tokens
The unsupported features, in registry order; all four-token when needed.
std::string token_names() const
Those names, comma-separated, for a message.