← Documentation
ADS-IDAC Engine 5.0.0
ManeuverAction.cpp
Go to the documentation of this file.
1// ManeuverAction.cpp: implementation of the ManeuverAction class.
2//
4
5#include "ManeuverAction.h"
6#include "../Scheduler/Scheduler.h"
7#include "../Branch/BranchRecord.h"
8#include <boost/serialization/export.hpp>
9#include "../Global/SimulationContext.h"
10#include <boost/archive/binary_oarchive.hpp>
11#include <boost/archive/binary_iarchive.hpp>
12BOOST_CLASS_EXPORT_IMPLEMENT(ManeuverAction)
13using namespace std;
14
15
17// Construction/Destruction
19
21{
22
23}
24
26{
27 this->clearManeuverAction();
28}
30 string file_name;
31 string str;
32 int i, nummber_of_unit;
33 if(_operator == sim::Operator::ODM){
34 file_name = g_sim.SScheduler.getODMDirectory();
35 file_name += "//KB_ODM_Maneuver_Actions.txt";
36 }
37 else if(_operator == sim::Operator::OAT){
38 file_name = g_sim.SScheduler.getOATDirectory();
39 file_name += "//KB_OAT_Maneuver_Actions.txt";
40 }
41 else{//_operator == sim::Operator::OCT
42 file_name = g_sim.SScheduler.getOCTDirectory();
43 file_name += "//KB_OCT_Maneuver_Actions.txt";
44 }
45 ifstream fin(file_name.c_str(), ios::in);
46 if(!fin.is_open()){
47 ofstream fout("err messages.txt", ios::app);
48 cout << "ManeuverAction::readInfoFromFile: could not open file maneuverProcedures.txt"<< endl;
49 fout << r5pars_.timesno << " ManeuverAction::readInfoFromFile: could not open file maneuverProcedures.txt\n";
50 fout.close();
51 r5pars_.sim_err = true;
52 g_sim.Branch_center.setTempESMessage("ManeuverAction::readInfoFromFile err.");
54 return;
55 }
56 fin >> str >> nummber_of_unit;
57 for(i = 0; i < nummber_of_unit; i++){
58 auto pmu_pt = make_unique<ManeuverActionUnit>();
59 pmu_pt->readInfoFromFile(fin);
60 this->maneuver_list.push_back(std::move(pmu_pt));
61 }
62 fin.close();
63}
65 for(auto& src : _pm.maneuver_list){
66 auto pmu_pt = make_unique<ManeuverActionUnit>();
67 pmu_pt->copyManeuverActionUnit(*src);
68 this->maneuver_list.push_back(std::move(pmu_pt));
69 }
70}
72 fout << "ManeuverAction " << this->maneuver_list.size() << ' ';
73 for(auto& item : this->maneuver_list){
74 item->saveManeuverActionUnitToFile(fout);
75 }
76}
78 int i, num;
79 string str;
80 fin >> str >> num;
81 if (str != "ManeuverAction"){
82 ofstream fout("err messages.txt", ios::app);
83 cout << "ManeuverAction::retrieveManeuverActionFromFile File retrieval error in previous function" << endl;
84 fout << r5pars_.timesno << " ManeuverAction::retrieveManeuverActionFromFile File retrieval error in previous function\n";
85 fout.close();
86 r5pars_.sim_err = true;
87 g_sim.Branch_center.setTempESMessage("ManeuverAction::retrieveManeuverActionFromFile Prior error");
89 return;
90 }
91 for(i = 0; i < num; i++){
92 auto pmu_pt = make_unique<ManeuverActionUnit>();
93 pmu_pt->retrieveManeuverActionUnitFromFile(fin);
94 this->maneuver_list.push_back(std::move(pmu_pt));
95 }
96}
98 for(auto& item : this->maneuver_list){
99 if(item->getStateOfActivation() == sim::State::Active){
100 item->executeManeuverControl(_operator);
101 }
102 }
103}
105 maneuver_list.clear();
106}
108 bool found = false;
109 int activated_state;
110 auto maneuver_list_itr = this->maneuver_list.begin();
111 auto maneuver_list_itr_end = this->maneuver_list.end();
112 while((maneuver_list_itr != maneuver_list_itr_end) && !found){
113 if((*maneuver_list_itr)->getManeuverName() == _name){
114 activated_state = (*maneuver_list_itr)->getStateOfActivation();
115 if(activated_state == sim::None || activated_state == sim::State::Done){
116 (*maneuver_list_itr)->setStateOfActivation(sim::State::Active);
117 }
118 else{
119 //do nothing
120 }
121 found = true;
122 }
123 else{
124 maneuver_list_itr++;
125 }
126 }
127}
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
void setTempTypeOfConsequence(Consequence)
Stores the consequence of the end state the running sequence will get.
void setTempESMessage(std::string)
Stores the description of the end state the running sequence will get if it is terminated (set by mod...
void activateManeuverUnit(std::string)
void readInfoFromFile(int)
void clearManeuverAction()
void retrieveManeuverActionFromFile(std::ifstream &)
void saveManeuverActionToFile(std::ofstream &)
void copyManeuverAction(ManeuverAction &)
virtual ~ManeuverAction()
std::vector< std::unique_ptr< ManeuverActionUnit > > maneuver_list
void checkAndExecuteManeuverUnit(Operator &)
std::string getOATDirectory()
Definition: Scheduler.cpp:622
std::string getOCTDirectory()
Definition: Scheduler.cpp:625
std::string getODMDirectory()
Definition: Scheduler.cpp:619
struct @0 r5pars_
constexpr int ODM
Definition: SimConstants.h:145
constexpr int OAT
Definition: SimConstants.h:144
constexpr int Done
Definition: SimConstants.h:123
constexpr int Active
Definition: SimConstants.h:118
constexpr int None
Definition: SimConstants.h:75
Scheduler SScheduler
Simulation scheduling, parses CLI options.
BranchRecord Branch_center
Dynamic event tree state.