]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/include/simulator.h
Se corrige bug que hacia que se cuelque la aplicacion cuando no se estaba conectado
[z.facultad/75.42/plaqui.git] / Model / include / simulator.h
1
2
3 #ifndef _SIMULADOR_H_
4 #define _SIMULADOR_H_
5
6 #include <list>
7 #include <string>
8 #include "pump.h"
9 #include "splitter.h"
10 #include "union.h"
11 #include "conduct.h"
12 #include "tank.h"
13 #include "exclusa.h"
14 #include "drainage.h"
15 #include "iconector.h"
16 #include "libxml/parser.h"
17
18 namespace PlaQui {
19 namespace Model {
20
21 class Simulator {
22 public:
23         Simulator(const std::string &filename);
24         ~Simulator();
25
26         void add_pump(const std::string &name);
27         void add_union(const std::string &name);
28         void add_splitter(const std::string &name);
29         void add_conduct(const std::string &name);
30         void add_exclusa(const std::string &name);
31         void add_tank(const std::string &name);
32         void add_drainage(const std::string &name);
33
34         /** Conecta 2 elementos
35          *
36          *  Esta funcion conecta el elemanto name1 con el elemento name2.
37          *  El parámetro flag define donde se conecta name2 respecto de name1.
38          *  Es decir, si flag = IConector::OUT, name2 se conecta a la salida de
39          *  name1
40          *  \return true si se pudo conectar
41          */
42         bool connect(const std::string &name1, const std::string &name2, int flag);
43
44         void simulate();
45
46         /// Tipos de elementos
47         enum {PUMP, UNION, SPLITTER, CONDUCT, EXCLUSA, TANK, DRAINAGE};
48
49         bool pump_deactivate(const std::string &name);
50 protected:
51         // Los mantengo en listas separadas para ahorrar
52         // CPU y no tener que usar dinamic_cast
53         std::list<Pump *> pump_lst;
54         std::list<Union *> union_lst;
55         std::list<Splitter *> split_lst;
56         std::list<Conduct *> conduct_lst;
57         std::list<Tank *> tank_lst;
58         std::list<Drainage *> drainage_lst;
59         std::list<Exclusa *> exclusa_lst;
60
61         // Tambien tengo una lista generica!
62         std::list<PlantItem *> items;
63
64         // Utilidades
65         IConector *find(const std::string &name);
66
67         // Carga del XML
68         void loadBomba(xmlNodePtr nodo);
69         void loadCodo(xmlNodePtr nodo);
70         void loadConduct(xmlNodePtr nodo);
71         void loadExclusa(xmlNodePtr nodo);
72         void loadTank(xmlNodePtr nodo);
73         void loadUnion(xmlNodePtr nodo);
74 };
75
76 }
77 }
78
79 #endif // _SIMULADOR_H_
80