← Documentation
ADS-IDAC Engine 5.0.0
Procedures.h
Go to the documentation of this file.
1#pragma once
2
10
11#include <boost/serialization/vector.hpp>
12#include <boost/serialization/unique_ptr.hpp>
13#include <boost/serialization/map.hpp>
14#include <boost/serialization/string.hpp>
15#include <boost/serialization/base_object.hpp>
16#include <boost/archive/text_iarchive.hpp>
17#include <boost/archive/text_oarchive.hpp>
18#include <memory>
19#include "ProcedureStep.h"
20#include "ProcedureStepInfo.h"
21#include <map>
22#include <vector>
23#include <cstdint>
24#include <stdexcept>
25#include <boost/serialization/export.hpp>
26#include <boost/serialization/split_member.hpp>
27#include "../Global/SharedConfig.h"
28
30{
31public:
32 Procedures();
33 virtual ~Procedures();
35 void readInfoFromFile();
57 void setObjectiveStepMultiplier(double);
59 void setMonitoringStepMultiplier(double);
61 void setDiagnosisStepMultiplier(double);
62 std::string getEntryProcedureName();
63 std::string getEntryStepName();
64 void setStepTransferTime(double);
65 double getStepTransferTime();
66 void setProcedureTransferTime(double);
68 void clearProcedures();
69 void saveProceduresToFile(std::ofstream &);
70 void retrieveProceduresFromFile(std::ifstream &);
71 std::vector<std::unique_ptr<ProcedureStep>> procedure_step;
72 std::map<std::string, ProcedureStep *> procedure_map;
73 std::vector<std::unique_ptr<ProcedureStepInfo>> list_of_procedural_step;
74
75private:
88
89 // State overlay: the archive carries EXECUTION STATE only. Definitions
90 // (multipliers, step names/descriptions, the entry-point list) live in
91 // the process-local master registered with adsidac::set_shared_procedures
92 // and are re-seeded at load; procedure_map is rebuilt from the seeded
93 // steps, never serialized (it holds raw pointers into procedure_step).
94 // save() writes the step count as a structure guard; load() refuses a
95 // count mismatch, because state applied to the wrong book must die loudly.
97 BOOST_SERIALIZATION_SPLIT_MEMBER()
98 template<class Archive>
99 void save(Archive &ar, const unsigned int) const {
100 const uint32_t n_steps = static_cast<uint32_t>(procedure_step.size());
101 ar & n_steps;
102 for (const auto& sp : procedure_step)
103 ar & *sp;
104 }
105 template<class Archive>
106 void load(Archive &ar, const unsigned int) {
107 if (const Procedures* master = adsidac::shared_procedures();
108 master != nullptr && master != this)
109 seedFromMaster(*master);
110 uint32_t n_steps = 0;
111 ar & n_steps;
112 if (n_steps != procedure_step.size())
113 throw std::runtime_error(
114 "Procedures state overlay: archive has " + std::to_string(n_steps)
115 + " steps but the loaded procedure book has "
116 + std::to_string(procedure_step.size())
117 + " — configuration inputs do not match the snapshot");
118 for (auto& sp : procedure_step)
119 ar & *sp;
120 }
121 void seedFromMaster(const Procedures& master);
122};
123
124
125BOOST_CLASS_EXPORT_KEY(Procedures)
void setPrerequisiteStepMultiplier(double)
Definition: Procedures.cpp:74
double getVerificationStepMultiplier()
Definition: Procedures.cpp:65
void copyProceduresFromRestartInfoForRestart(Procedures &)
Definition: Procedures.cpp:212
double getDiagnosisStepMultiplier()
Definition: Procedures.cpp:66
void copyProceduresToRestartInfoForRestart(Procedures &)
Definition: Procedures.cpp:192
void copyProcedures(Procedures &)
Definition: Procedures.cpp:138
std::string getEntryProcedureName()
Definition: Procedures.cpp:168
std::vector< std::unique_ptr< ProcedureStep > > procedure_step
Definition: Procedures.h:71
void setAbnormalProcedureMultiplier(double)
Definition: Procedures.cpp:69
void save(Archive &ar, const unsigned int) const
Definition: Procedures.h:99
void setAlarmResponseProcedureMultiplier(double)
Definition: Procedures.cpp:72
double getObjectiveStepMultiplier()
Definition: Procedures.cpp:62
double getAlarmResponseProcedureMultiplier()
Definition: Procedures.cpp:61
double getPrerequisiteStepMultiplier()
Definition: Procedures.cpp:63
void retrieveProceduresFromFile(std::ifstream &)
Definition: Procedures.cpp:272
double getMentalProcedureMultiplier()
Definition: Procedures.cpp:57
void readInfoFromFile()
Definition: Procedures.cpp:78
double getNormalProcedureMultiplier()
Definition: Procedures.cpp:56
std::map< std::string, ProcedureStep * > procedure_map
Definition: Procedures.h:72
double diagnosis_step_multiplier
Definition: Procedures.h:87
double getProcedureTransferTime()
Definition: Procedures.cpp:55
double abnormal_procedure_multiplier
Definition: Procedures.h:79
void setObjectiveStepMultiplier(double)
Definition: Procedures.cpp:73
void setProcedureTransferTime(double)
Definition: Procedures.cpp:54
double optimal_recovery_procedure_multiplier
Definition: Procedures.h:80
void setNormalProcedureMultiplier(double)
Definition: Procedures.cpp:67
double getAbnormalProcedureMultiplier()
Definition: Procedures.cpp:58
double objective_step_multiplier
Definition: Procedures.h:83
double functional_recovery_procedure_multiplier
Definition: Procedures.h:81
double getOptimalRecoveryProcedureMultiplier()
Definition: Procedures.cpp:59
void initiationForSimulation()
Definition: Procedures.cpp:42
double alarm_response_procedure_multiplier
Definition: Procedures.h:82
double getFunctionalRecoveryProcedureMultipler()
Definition: Procedures.cpp:60
double getMonitoringStepMultiplier()
Definition: Procedures.cpp:64
void seedFromMaster(const Procedures &master)
Definition: Procedures.cpp:237
double getStepTransferTime()
Definition: Procedures.cpp:53
double verification_step_multiplier
Definition: Procedures.h:86
double prerequisite_step_multiplier
Definition: Procedures.h:84
double step_transfer_time
Definition: Procedures.h:76
void setStepTransferTime(double)
Definition: Procedures.cpp:52
void clearProceduresForRestart()
Definition: Procedures.cpp:188
void setDiagnosisStepMultiplier(double)
Definition: Procedures.cpp:77
void setVerificationStepMultiplier(double)
Definition: Procedures.cpp:76
void setOptimalRecoveryProcedureMultiplier(double)
Definition: Procedures.cpp:70
friend class boost::serialization::access
Definition: Procedures.h:96
std::string getEntryStepName()
Definition: Procedures.cpp:175
double normal_procedure_multiplier
Definition: Procedures.h:77
void clearProcedures()
Definition: Procedures.cpp:182
void setMentalProcedureMultiplier(double)
Definition: Procedures.cpp:68
double mental_procedure_multiplier
Definition: Procedures.h:78
virtual ~Procedures()
Definition: Procedures.cpp:38
void load(Archive &ar, const unsigned int)
Definition: Procedures.h:106
std::vector< std::unique_ptr< ProcedureStepInfo > > list_of_procedural_step
Definition: Procedures.h:73
void setFunctionalRecoveryProcedureMultipler(double)
Definition: Procedures.cpp:71
void setMonitoringStepMultiplier(double)
Definition: Procedures.cpp:75
double procedure_transfer_time
Definition: Procedures.h:76
double monitoring_step_multiplier
Definition: Procedures.h:85
void saveProceduresToFile(std::ofstream &)
Definition: Procedures.cpp:246
const Procedures * shared_procedures()