17#include <nlohmann/json.hpp>
20#include <yaml-cpp/yaml.h>
26template <
typename WriteFunc>
27inline void WriteToFile(
const std::string &path, WriteFunc write_content) {
28 std::ofstream file(path);
29 if (!file.is_open()) {
30 throw IOError(
"open", path,
"Failed to open file for writing");
34 throw IOError(
"write", path,
"Failed to write to file");
54 std::vector<SignalDescriptor>
inputs;
56 std::vector<SignalDescriptor>
config;
71 const std::vector<SignalDescriptor> &signals) {
72 if (signals.empty()) {
76 out << YAML::Key << key << YAML::Value << YAML::BeginSeq;
77 for (
const auto &sig : signals) {
78 out << YAML::BeginMap;
79 out << YAML::Key <<
"name" << YAML::Value << sig.name;
80 out << YAML::Key <<
"unit" << YAML::Value << sig.unit;
81 out << YAML::Key <<
"description" << YAML::Value << sig.description;
82 if (!sig.wired_to.empty()) {
83 out << YAML::Key <<
"wired_to" << YAML::Value << sig.wired_to;
85 if (sig.is_integrable) {
86 out << YAML::Key <<
"is_integrable" << YAML::Value <<
true;
94 out << YAML::Key <<
"components" << YAML::Value << YAML::BeginSeq;
96 out << YAML::BeginMap;
97 out << YAML::Key <<
"name" << YAML::Value << comp.name;
98 out << YAML::Key <<
"type" << YAML::Value << comp.type;
120 auto to_json_signals = [](
const std::vector<SignalDescriptor> &signals) {
121 nlohmann::json arr = nlohmann::json::array();
122 for (
const auto &sig : signals) {
124 jsig[
"name"] = sig.name;
125 jsig[
"unit"] = sig.unit;
126 jsig[
"description"] = sig.description;
127 if (!sig.wired_to.empty()) {
128 jsig[
"wired_to"] = sig.wired_to;
130 if (sig.is_integrable) {
131 jsig[
"is_integrable"] =
true;
138 j[
"components"] = nlohmann::json::array();
140 nlohmann::json jcomp;
141 jcomp[
"name"] = comp.name;
142 jcomp[
"type"] = comp.type;
143 jcomp[
"outputs"] = to_json_signals(comp.outputs);
144 jcomp[
"inputs"] = to_json_signals(comp.inputs);
145 jcomp[
"parameters"] = to_json_signals(comp.parameters);
146 jcomp[
"config"] = to_json_signals(comp.config);
147 j[
"components"].push_back(jcomp);
170 for (
const auto &output : comp.outputs) {
171 if (output.is_integrable) {
176 for (
const auto &input : comp.inputs) {
177 if (input.wired_to.empty()) {
188 void ToYAML(
const std::string &path)
const {
190 out << YAML::BeginMap;
193 out << YAML::Key <<
"summary" << YAML::Value << YAML::BeginMap;
194 out << YAML::Key <<
"total_outputs" << YAML::Value <<
total_outputs;
195 out << YAML::Key <<
"total_inputs" << YAML::Value <<
total_inputs;
197 out << YAML::Key <<
"total_config" << YAML::Value <<
total_config;
199 out << YAML::Key <<
"unwired_inputs" << YAML::Value <<
unwired_inputs;
212 void ToJSON(
const std::string &path)
const {
Consolidated error handling for Icarus.
Signal types and descriptors for the Icarus Signal Backplane.
File and I/O operation errors.
Definition Error.hpp:356
Definition DataDictionary.hpp:24
void WriteToFile(const std::string &path, WriteFunc write_content)
Helper to write content to a file with error handling.
Definition DataDictionary.hpp:27
Definition AggregationTypes.hpp:13
Entry for a single component.
Definition DataDictionary.hpp:49
std::string name
Full component name (e.g., "X15.MainEngine").
Definition DataDictionary.hpp:50
std::vector< SignalDescriptor > outputs
Output signals.
Definition DataDictionary.hpp:53
std::vector< SignalDescriptor > config
Discrete config (not optimizable).
Definition DataDictionary.hpp:56
std::vector< SignalDescriptor > parameters
Scalar parameters (optimizable).
Definition DataDictionary.hpp:55
std::vector< SignalDescriptor > inputs
Input ports.
Definition DataDictionary.hpp:54
std::string type
Component type (e.g., "JetEngine").
Definition DataDictionary.hpp:51
Complete catalog of simulation interface.
Definition DataDictionary.hpp:45
static void AppendSignalsToYAML(YAML::Emitter &out, const std::string &key, const std::vector< SignalDescriptor > &signals)
Definition DataDictionary.hpp:70
void ComputeStats()
Compute summary statistics from components.
Definition DataDictionary.hpp:156
std::size_t total_parameters
Definition DataDictionary.hpp:65
void ToJSON(const std::string &path) const
Export to JSON file.
Definition DataDictionary.hpp:212
std::size_t total_inputs
Definition DataDictionary.hpp:64
std::vector< ComponentEntry > components
All registered components.
Definition DataDictionary.hpp:60
std::size_t total_outputs
Definition DataDictionary.hpp:63
void ToYAML(const std::string &path) const
Export to YAML file.
Definition DataDictionary.hpp:188
nlohmann::json ToJSONValue() const
Definition DataDictionary.hpp:110
std::size_t integrable_states
Definition DataDictionary.hpp:67
void AppendComponentsToYAML(YAML::Emitter &out) const
Definition DataDictionary.hpp:93
std::size_t total_config
Definition DataDictionary.hpp:66
std::size_t unwired_inputs
Definition DataDictionary.hpp:68