Advertisement
selebry

Untitled

Jun 10th, 2022
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.65 KB | None | 0 0
  1. #include <string>//Импорт библиотеки string для использования класса string и
  2. его методов
  3. #include <iostream>//Импорт библиотеки iostream для использования объектов
  4. потока ввода и вывода cin и cout
  5. #include "Base.h"//Импорт заголовчного файла для использования класса Base и
  6. его методов
  7. #include "App.h"//Импорт заголовчного файла для использования класса App и его
  8. методов
  9. #include "Sub2.h"//Импорт заголовчного файла для использования класса Sub2 и
  10. его методов
  11. #include "Sub3.h"//Импорт заголовчного файла для использования класса Sub3 и
  12. его методов
  13. #include "Sub4.h"//Импорт заголовчного файла для использования класса Sub4 и
  14. его методов
  15. #include "Sub5.h"//Импорт заголовчного файла для использования класса Sub5 и
  16. его методов
  17. #include "Sub6.h"//Импорт заголовчного файла для использования класса Sub6 и
  18. его методов
  19. using namespace std;//Использование пространства имен Standart
  20. string inline operator*(string s, int count){
  21. string res;
  22. for(int i=0;i<count;i++) res+=s;
  23. return res;
  24. }
  25. App::App(Base* head) {
  26. root = new Sub1(head);
  27. root->set_class_id(1);
  28. }//Присваивание закрым полям значения параметров
  29. void App::build_tree_objs() {//Реализация методов build_tree_objs
  30. string obj_name1,obj_name2;//Объявление имен объектов для считывания
  31. данных
  32. int n;//Объявление перменной для считывания чисел: номер класса,
  33. статус готовности
  34. cin >> obj_name1;//Считывание данных в переменную obj_name1
  35. root->set_obj_name(obj_name1);//Установка имени объекта с помощью
  36. метода set_obj_name
  37. cin >> obj_name1;//Считывание данных в переменную obj_name1
  38. while (obj_name1 != "endtree") {//Цикл для создания дерева
  39. if(!root->find_obj(obj_name1)){
  40. root->set_state(0);
  41. cout<<"Object tree";
  42. root->print_tree();
  43. cout<<"\nThe head object "<<obj_name1<<" is not
  44. found";
  45. exit(0);
  46. return;
  47. }
  48. cin>>obj_name2>>n;
  49. switch(n){
  50. case 2:
  51. ob2=new Sub2(root-
  52. >find_obj(obj_name1),obj_name2);
  53. ob2->set_class_id(2);
  54. break;
  55. case 3:
  56. ob3=new Sub3(root-
  57. >find_obj(obj_name1),obj_name2);
  58. ob3->set_class_id(3);
  59. break;
  60. case 4:
  61. ob4=new Sub4(root-
  62. >find_obj(obj_name1),obj_name2);
  63. ob4->set_class_id(4);
  64. break;
  65. case 5:
  66. ob5=new Sub5(root-
  67. >find_obj(obj_name1),obj_name2);
  68. ob5->set_class_id(5);
  69. break;
  70. case 6:
  71. ob6=new Sub6(root-
  72. >find_obj(obj_name1),obj_name2);
  73. ob6->set_class_id(6);
  74. break;
  75. default:
  76. break;
  77. }
  78. cin >> obj_name1;//Считывание данных в переменную obj_name1
  79. }
  80. cin>>obj_name1;
  81. while(obj_name1!="end_of_connections"){
  82. cin>>obj_name2;
  83. Base*f = root->find_obj(obj_name1);
  84. set_connect_by_class_id(f,root->find_obj(obj_name2),f-
  85. >get_class_id());
  86. cin>>obj_name1;
  87. }
  88.  
  89. }
  90. void App::set_state_tree(){
  91. string obj_name;
  92. int class_number;
  93. while(cin>>obj_name>>class_number){
  94. root->get_obj_by_name(obj_name)-
  95. >set_state(class_number);
  96. }
  97. }
  98. void App::call_system(){
  99. string system_command,obj_path;
  100. cin>>system_command;
  101. while(system_command!="END"){
  102. cin>>obj_path;
  103. Base* f = root->find_obj(obj_path);
  104. if(system_command =="SET"){
  105. if(f){
  106. cout<<"\nObject is set: "<<f->get_obj_name();
  107. root->set_curr_obj(f);
  108. }
  109. else cout<<"\nObject is not found: " <<f-
  110. >get_curr_obj()->get_obj_name()<<" "<<obj_path;
  111. }
  112. else if(system_command =="FIND"){
  113. cout<<'\n'<<obj_path<<string(" ")*5;
  114. if(f) cout<<"Object name: "<<f->get_obj_name();
  115. else cout<<"Object is not found";
  116. }
  117. cin>>system_command;
  118. }
  119. }
  120. void App::set_connect_by_class_id(Base* s, Base* d, int class_id){
  121. void (Base::*signal_par)(string&) = NULL;
  122. void (Base::*handler_par)(string) = NULL;
  123. switch(class_id)
  124. {
  125. case 1:
  126. signal_par = static_cast<void(Base::*)
  127. (string&)>(&Sub1::signal);
  128. handler_par = static_cast<void(Base::*)
  129. (string)>(&Sub1::handler);
  130. break;
  131. case 2:
  132. signal_par = static_cast<void(Base::*)
  133. (string&)>(&Sub2::signal);
  134. handler_par = static_cast<void(Base::*)
  135. (string)>(&Sub2::handler);
  136. break;
  137. case 3:
  138. signal_par = static_cast<void(Base::*)
  139. (string&)>(&Sub3::signal);
  140. handler_par = static_cast<void(Base::*)
  141. (string)>(&Sub3::handler);
  142. break;
  143. case 4:
  144. signal_par = static_cast<void(Base::*)
  145. (string&)>(&Sub4::signal);
  146. handler_par = static_cast<void(Base::*)
  147. (string)>(&Sub4::handler);
  148. break;
  149. case 5:
  150. signal_par = static_cast<void(Base::*)
  151. (string&)>(&Sub5::signal);
  152. handler_par = static_cast<void(Base::*)
  153. (string)>(&Sub5::handler);
  154. break;
  155. case 6:
  156. signal_par = static_cast<void(Base::*)
  157. (string&)>(&Sub6::signal);
  158. handler_par = static_cast<void(Base::*)
  159. (string)>(&Sub6::handler);
  160. break;
  161. default:
  162. break;
  163. }
  164. s->set_connect(signal_par,d,handler_par);
  165. }
  166. void App::delete_connect_by_class_id(Base* s, Base* d, int class_id){
  167. void (Base::*signal_par)(string&) = NULL;
  168. void (Base::*handler_par)(string) = NULL;
  169. switch(class_id)
  170. {
  171. case 1:
  172. signal_par = static_cast<void(Base::*)
  173. (string&)>(&Sub1::signal);
  174. handler_par = static_cast<void(Base::*)
  175. (string)>(&Sub1::handler);
  176. break;
  177. case 2:
  178. signal_par = static_cast<void(Base::*)
  179. (string&)>(&Sub2::signal);
  180. handler_par = static_cast<void(Base::*)
  181. (string)>(&Sub2::handler);
  182. break;
  183. case 3:
  184. signal_par = static_cast<void(Base::*)
  185. (string&)>(&Sub3::signal);
  186. handler_par = static_cast<void(Base::*)
  187. (string)>(&Sub3::handler);
  188. break;
  189. case 4:
  190. signal_par = static_cast<void(Base::*)
  191. (string&)>(&Sub4::signal);
  192. handler_par = static_cast<void(Base::*)
  193. (string)>(&Sub4::handler);
  194. break;
  195. case 5:
  196. signal_par = static_cast<void(Base::*)
  197. (string&)>(&Sub5::signal);
  198. handler_par = static_cast<void(Base::*)
  199. (string)>(&Sub5::handler);
  200. break;
  201. case 6:
  202. signal_par = static_cast<void(Base::*)
  203. (string&)>(&Sub6::signal);
  204. handler_par = static_cast<void(Base::*)
  205. (string)>(&Sub6::handler);
  206. break;
  207. default:
  208. break;
  209. }
  210. s->delete_connect(signal_par,d,handler_par);
  211. }
  212. void App::call_signal_handler_system()
  213. {
  214. string system_command, obj_path, add_string;
  215. void (Base:: * signal_par)(string&) = NULL;
  216. void (Base:: * handler_par)(string) = NULL;
  217. cin >> system_command;
  218. while (system_command != "END") {
  219. cin >> obj_path;
  220. Base* f = root->find_obj(obj_path);
  221. if (system_command == "EMIT")
  222. {
  223. getline(cin, add_string);
  224. if (f)
  225. {
  226. switch (f->get_class_id())
  227. {
  228. case 1:
  229. signal_par = static_cast<void
  230. (Base::*)(string&)>(&Sub1::signal);
  231. break;
  232. case 2:
  233. signal_par = static_cast<void
  234. (Base::*)(string&)>(&Sub2::signal);
  235. break;
  236. case 3:
  237. signal_par = static_cast<void
  238. (Base::*)(string&)>(&Sub3::signal);
  239. break;
  240. case 4:
  241. signal_par = static_cast<void
  242. (Base::*)(string&)>(&Sub4::signal);
  243. break;
  244. case 5:
  245. signal_par = static_cast<void
  246. (Base::*)(string&)>(&Sub5::signal);
  247. break;
  248. case 6:
  249. signal_par = static_cast<void
  250. (Base::*)(string&)>(&Sub6::signal);
  251. break;
  252. default:
  253. break;
  254. }
  255. f->output_signal(signal_par, add_string);
  256. }
  257. else cout << "\nObject " << obj_path << " not found";
  258. }
  259. else if (system_command == "SET_CONNECT")
  260. {
  261. cin >> add_string;
  262. if (f) {
  263. Base* d = root->find_obj(add_string);
  264. if (d)set_connect_by_class_id(f, d, f-
  265. >get_class_id());
  266. else cout << "\nHandler object " << add_string
  267. << " not found";
  268. }
  269. else cout << "\nObject " << obj_path << " not found";
  270. }
  271. else if (system_command == "DELETE_CONNECT")
  272. {
  273. cin >> add_string;
  274. if (f) {
  275. Base* d = root->find_obj(add_string);
  276. if (d)delete_connect_by_class_id(f, d, f-
  277. >get_class_id());
  278. else cout << "\nHandler object " << add_string
  279. << " not found";
  280. }
  281. else cout << "\nObject " << obj_path << " not found";
  282. }
  283. else if (system_command == "SET_CONDITION")
  284. {
  285. cin >> add_string;
  286. if (f)f->set_state(stoi(add_string));
  287. else cout << "\nObject " << obj_path << " not found";
  288. }
  289. cin >> system_command;
  290. }
  291. }
  292. int App::exec_app() {//Реализация exec_app
  293. cout<<"Object tree";
  294. root->print_tree();//Печать дерева
  295. root->set_tree_as_ready();
  296. call_signal_handler_system();
  297. //cout<<"\nThe tree of objects and their readiness";
  298. //root->print_status_tree();
  299. return 0;
  300. }
  301.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement