]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/include/simulator.h
definitivamente tengo que aprender a documentar en alguna de esas cosas raras que...
[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 <sstream>
9 #include "pump.h"
10 #include "splitter.h"
11 #include "union.h"
12 #include "conduct.h"
13 #include "tank.h"
14 #include "exclusa.h"
15 #include "drainage.h"
16 #include "iconector.h"
17 #include "libxml/parser.h"
18
19 namespace PlaQui {
20 namespace Model {
21
22 class Simulator {
23 public:
24         Simulator(const std::string &filename);
25         ~Simulator();
26
27         void add_pump(const std::string &name, float max_flow, RGB color);
28         void add_union(const std::string &name, float max_flow);
29         void add_splitter(const std::string &name, float max_flow);
30         void add_conduct(const std::string &name, float max_flow);
31         void add_exclusa(const std::string &name, bool open);
32         void add_tank(const std::string &name, float capacity, float initial, RGB color);
33         void add_drainage(const std::string &name);
34
35         /** Retorna el estado de todos los items como un XML */
36         std::string get_state_as_xml();
37
38         /** Conecta 2 elementos
39          *
40          *  Esta funcion conecta el elemanto name1 con el elemento name2.
41          *  El parámetro flag define donde se conecta name2 respecto de name1.
42          *  Es decir, si flag = IConector::OUT, name2 se conecta a la salida de
43          *  name1
44          *  \return true si se pudo conectar
45          */
46         bool connect(const std::string &name1, const std::string &name2, int flag);
47
48         void simulate();
49
50         /// Tipos de elementos
51         enum {PUMP, UNION, SPLITTER, CONDUCT, EXCLUSA, TANK, DRAINAGE};
52
53         bool set_open(const std::string &name, bool open = true);
54 protected:
55         // Los mantengo en listas separadas para ahorrar
56         // CPU y no tener que usar dinamic_cast
57         std::list<Pump *> pump_lst;
58         std::list<Union *> union_lst;
59         std::list<Splitter *> split_lst;
60         std::list<Conduct *> conduct_lst;
61         std::list<Tank *> tank_lst;
62         std::list<Drainage *> drainage_lst;
63         std::list<Exclusa *> exclusa_lst;
64
65         // Tambien tengo una lista generica!
66         std::list<PlantItem *> items;
67
68         // Utilidades
69         IConector *find(const std::string &name);
70
71         // Conecta todos los items desde el XML
72         void do_connections(xmlNodePtr nodo);
73
74         // Carga del XML
75         void loadBomba(xmlNodePtr nodo);
76         void loadConduct(xmlNodePtr nodo);
77         void loadExclusa(xmlNodePtr nodo);
78         void loadTank(xmlNodePtr nodo);
79         void loadUnion(xmlNodePtr nodo);
80         void loadDrain(xmlNodePtr nodo);
81
82         RGB loadRGB(xmlNodePtr nodo);
83
84         // Frame. Define el orden para los cuadros del XML
85         unsigned long int frame;
86 };
87
88 }
89 }
90
91 #endif // _SIMULADOR_H_
92