Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>//Импорт библиотеки string для использования класса string и
- его методов
- #include <iostream>//Импорт библиотеки iostream для использования объектов
- потока ввода и вывода cin и cout
- #include "Base.h"//Импорт заголовчного файла для использования класса Base и
- его методов
- #include "App.h"//Импорт заголовчного файла для использования класса App и его
- методов
- #include "Sub2.h"//Импорт заголовчного файла для использования класса Sub2 и
- его методов
- #include "Sub3.h"//Импорт заголовчного файла для использования класса Sub3 и
- его методов
- #include "Sub4.h"//Импорт заголовчного файла для использования класса Sub4 и
- его методов
- #include "Sub5.h"//Импорт заголовчного файла для использования класса Sub5 и
- его методов
- #include "Sub6.h"//Импорт заголовчного файла для использования класса Sub6 и
- его методов
- using namespace std;//Использование пространства имен Standart
- string inline operator*(string s, int count){
- string res;
- for(int i=0;i<count;i++) res+=s;
- return res;
- }
- App::App(Base* head) {
- root = new Sub1(head);
- root->set_class_id(1);
- }//Присваивание закрым полям значения параметров
- void App::build_tree_objs() {//Реализация методов build_tree_objs
- string obj_name1,obj_name2;//Объявление имен объектов для считывания
- данных
- int n;//Объявление перменной для считывания чисел: номер класса,
- статус готовности
- cin >> obj_name1;//Считывание данных в переменную obj_name1
- root->set_obj_name(obj_name1);//Установка имени объекта с помощью
- метода set_obj_name
- cin >> obj_name1;//Считывание данных в переменную obj_name1
- while (obj_name1 != "endtree") {//Цикл для создания дерева
- if(!root->find_obj(obj_name1)){
- root->set_state(0);
- cout<<"Object tree";
- root->print_tree();
- cout<<"\nThe head object "<<obj_name1<<" is not
- found";
- exit(0);
- return;
- }
- cin>>obj_name2>>n;
- switch(n){
- case 2:
- ob2=new Sub2(root-
- >find_obj(obj_name1),obj_name2);
- ob2->set_class_id(2);
- break;
- case 3:
- ob3=new Sub3(root-
- >find_obj(obj_name1),obj_name2);
- ob3->set_class_id(3);
- break;
- case 4:
- ob4=new Sub4(root-
- >find_obj(obj_name1),obj_name2);
- ob4->set_class_id(4);
- break;
- case 5:
- ob5=new Sub5(root-
- >find_obj(obj_name1),obj_name2);
- ob5->set_class_id(5);
- break;
- case 6:
- ob6=new Sub6(root-
- >find_obj(obj_name1),obj_name2);
- ob6->set_class_id(6);
- break;
- default:
- break;
- }
- cin >> obj_name1;//Считывание данных в переменную obj_name1
- }
- cin>>obj_name1;
- while(obj_name1!="end_of_connections"){
- cin>>obj_name2;
- Base*f = root->find_obj(obj_name1);
- set_connect_by_class_id(f,root->find_obj(obj_name2),f-
- >get_class_id());
- cin>>obj_name1;
- }
- }
- void App::set_state_tree(){
- string obj_name;
- int class_number;
- while(cin>>obj_name>>class_number){
- root->get_obj_by_name(obj_name)-
- >set_state(class_number);
- }
- }
- void App::call_system(){
- string system_command,obj_path;
- cin>>system_command;
- while(system_command!="END"){
- cin>>obj_path;
- Base* f = root->find_obj(obj_path);
- if(system_command =="SET"){
- if(f){
- cout<<"\nObject is set: "<<f->get_obj_name();
- root->set_curr_obj(f);
- }
- else cout<<"\nObject is not found: " <<f-
- >get_curr_obj()->get_obj_name()<<" "<<obj_path;
- }
- else if(system_command =="FIND"){
- cout<<'\n'<<obj_path<<string(" ")*5;
- if(f) cout<<"Object name: "<<f->get_obj_name();
- else cout<<"Object is not found";
- }
- cin>>system_command;
- }
- }
- void App::set_connect_by_class_id(Base* s, Base* d, int class_id){
- void (Base::*signal_par)(string&) = NULL;
- void (Base::*handler_par)(string) = NULL;
- switch(class_id)
- {
- case 1:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub1::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub1::handler);
- break;
- case 2:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub2::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub2::handler);
- break;
- case 3:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub3::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub3::handler);
- break;
- case 4:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub4::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub4::handler);
- break;
- case 5:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub5::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub5::handler);
- break;
- case 6:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub6::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub6::handler);
- break;
- default:
- break;
- }
- s->set_connect(signal_par,d,handler_par);
- }
- void App::delete_connect_by_class_id(Base* s, Base* d, int class_id){
- void (Base::*signal_par)(string&) = NULL;
- void (Base::*handler_par)(string) = NULL;
- switch(class_id)
- {
- case 1:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub1::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub1::handler);
- break;
- case 2:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub2::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub2::handler);
- break;
- case 3:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub3::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub3::handler);
- break;
- case 4:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub4::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub4::handler);
- break;
- case 5:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub5::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub5::handler);
- break;
- case 6:
- signal_par = static_cast<void(Base::*)
- (string&)>(&Sub6::signal);
- handler_par = static_cast<void(Base::*)
- (string)>(&Sub6::handler);
- break;
- default:
- break;
- }
- s->delete_connect(signal_par,d,handler_par);
- }
- void App::call_signal_handler_system()
- {
- string system_command, obj_path, add_string;
- void (Base:: * signal_par)(string&) = NULL;
- void (Base:: * handler_par)(string) = NULL;
- cin >> system_command;
- while (system_command != "END") {
- cin >> obj_path;
- Base* f = root->find_obj(obj_path);
- if (system_command == "EMIT")
- {
- getline(cin, add_string);
- if (f)
- {
- switch (f->get_class_id())
- {
- case 1:
- signal_par = static_cast<void
- (Base::*)(string&)>(&Sub1::signal);
- break;
- case 2:
- signal_par = static_cast<void
- (Base::*)(string&)>(&Sub2::signal);
- break;
- case 3:
- signal_par = static_cast<void
- (Base::*)(string&)>(&Sub3::signal);
- break;
- case 4:
- signal_par = static_cast<void
- (Base::*)(string&)>(&Sub4::signal);
- break;
- case 5:
- signal_par = static_cast<void
- (Base::*)(string&)>(&Sub5::signal);
- break;
- case 6:
- signal_par = static_cast<void
- (Base::*)(string&)>(&Sub6::signal);
- break;
- default:
- break;
- }
- f->output_signal(signal_par, add_string);
- }
- else cout << "\nObject " << obj_path << " not found";
- }
- else if (system_command == "SET_CONNECT")
- {
- cin >> add_string;
- if (f) {
- Base* d = root->find_obj(add_string);
- if (d)set_connect_by_class_id(f, d, f-
- >get_class_id());
- else cout << "\nHandler object " << add_string
- << " not found";
- }
- else cout << "\nObject " << obj_path << " not found";
- }
- else if (system_command == "DELETE_CONNECT")
- {
- cin >> add_string;
- if (f) {
- Base* d = root->find_obj(add_string);
- if (d)delete_connect_by_class_id(f, d, f-
- >get_class_id());
- else cout << "\nHandler object " << add_string
- << " not found";
- }
- else cout << "\nObject " << obj_path << " not found";
- }
- else if (system_command == "SET_CONDITION")
- {
- cin >> add_string;
- if (f)f->set_state(stoi(add_string));
- else cout << "\nObject " << obj_path << " not found";
- }
- cin >> system_command;
- }
- }
- int App::exec_app() {//Реализация exec_app
- cout<<"Object tree";
- root->print_tree();//Печать дерева
- root->set_tree_as_ready();
- call_signal_handler_system();
- //cout<<"\nThe tree of objects and their readiness";
- //root->print_status_tree();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement