3 #ifndef _ELEMENTO_PLANTA_H_
4 #define _ELEMENTO_PLANTA_H_
14 /** Elementos simulables en una planta
16 * Todo elemento que pueda ser simulado en la planta debe
17 * descender de esta clase.
19 class PlantItem:public IConector {
23 * \param _name Nombre único que identifica el objeto
25 PlantItem(const std::string &_name);
26 /// FIXME : agregar el nombre!
27 PlantItem(unsigned ins, unsigned outs);
31 // FIXME: ver que parametros seran necesarios
32 // TODO : ver si no son inutiles!!!
33 virtual void send_fluid() {}
34 virtual void receive_fluid() {}
36 /** Ejecuta la fase de actualización.
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.
41 virtual void update() = 0;
42 /** Hace la simulación de esta iteración
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.
47 virtual void simulate() = 0;
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; }
54 /** Recive un mensage y lo procesa
56 * \see IConector::recieve_msg
58 virtual void recieve_msg(int msg, IConector *who, void *data);
60 /// Mensages manejados por los elementos de la planta
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
67 /// Devuelve el nombre de la instancia
68 std::string get_name() const { return name; }
75 // Hago que no se puedan copiar objetos ElementosPlanta
76 PlantItem(const PlantItem &):IConector(0,0) {}
77 PlantItem &operator = (const PlantItem &) { return (*this); }