]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/include/plantitem.h
- Se agregan mas comentarios a las clases
[z.facultad/75.42/plaqui.git] / Model / include / plantitem.h
1
2
3 #ifndef _ELEMENTO_PLANTA_H_
4 #define _ELEMENTO_PLANTA_H_
5
6 #include <string>
7 #include "iconector.h"
8 #include "rgb.h"
9
10 namespace PlaQui {
11
12 namespace Model {
13
14 /** Elementos simulables en una planta
15  *
16  *  Todo elemento que pueda ser simulado en la planta debe
17  *  descender de esta clase.
18  */
19 class PlantItem:public IConector {
20 public:
21         /** Constructor
22          *
23          *  \param _name Nombre único que identifica el objeto
24          */
25         PlantItem(const std::string &_name);
26         /// FIXME : agregar el nombre!
27         PlantItem(unsigned ins, unsigned outs);
28         /// Destructor
29         virtual ~PlantItem();
30
31         // FIXME: ver que parametros seran necesarios
32         // TODO : ver si no son inutiles!!!
33         virtual void send_fluid() {}
34         virtual void receive_fluid() {}
35
36         /** Ejecuta la fase de actualización.
37          *
38          *  Durante la fase de actualización los objetos se comunican entre
39          *  sí para determinar cual es el flujo que manejan en una iteración.
40          */
41         virtual void update() = 0;
42         /** Hace la simulación de esta iteración
43          *
44          *  Por simulacion se entiende que el modelo debe avisar a las vistas
45          *  que ya está actualizado para que el usuario vea los resultados.
46          */
47         virtual void simulate() = 0;
48
49         /// Setea el nuevo color del fluido
50         void setColor(const RGB &c) { fluid_color = c; }
51         /// Retorna el actual color del fluido
52         const RGB &getColor() { return fluid_color; }
53
54         /** Recive un mensage y lo procesa
55          *  
56          *  \see IConector::recieve_msg
57          */
58         virtual void recieve_msg(int msg, IConector *who, void *data);
59
60         /// Mensages manejados por los elementos de la planta
61         enum {
62                 MSG_QUERY_MAX_FLOW = IConector::MSG_LAST, ///< preguntar por el máximo flujo
63                 MSG_RESPONSE_MAX_FLOW, ///< responde al mensage QUERY_MAX_FLOW. data == float
64                 MSG_LAST
65         };
66
67         /// Devuelve el nombre de la instancia
68         std::string get_name() const { return name; }
69 protected:
70         RGB fluid_color;
71         // es de solo lectura
72         std::string name;
73         bool updated;
74 private:
75         // Hago que no se puedan copiar objetos ElementosPlanta
76         PlantItem(const PlantItem &):IConector(0,0) {}
77         PlantItem &operator = (const PlantItem &) { return (*this); }
78 };
79
80 }
81 }
82
83 #endif
84