]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Model/include/plantitem.h
Bug en splitter arreglaro, ahora emite el flujo correcto en cada iteracion
[z.facultad/75.42/plaqui.git] / Model / include / plantitem.h
index 1e28b0bc0fb6adbf824d7c338f97a3d2fb67462e..2cfb5b67fa235c43ea8999986ba9a7aace15f385 100644 (file)
@@ -6,48 +6,78 @@
 #include <string>
 #include "iconector.h"
 #include "rgb.h"
 #include <string>
 #include "iconector.h"
 #include "rgb.h"
+#include <sstream>
 
 namespace PlaQui {
 
 namespace Model {
 
 namespace PlaQui {
 
 namespace Model {
-                               
+
+/** Elementos simulables en una planta
+ *
+ *  Todo elemento que pueda ser simulado en la planta debe
+ *  descender de esta clase.
+ */
 class PlantItem:public IConector {
 public:
 class PlantItem:public IConector {
 public:
-       /// Constructor
+       /** Constructor
+        *
+        *  \param _name Nombre único que identifica el objeto
+        */
        PlantItem(const std::string &_name);
        PlantItem(const std::string &_name);
+       /// FIXME : agregar el nombre!
        PlantItem(unsigned ins, unsigned outs);
        PlantItem(unsigned ins, unsigned outs);
+       /// Destructor
        virtual ~PlantItem();
 
        // FIXME: ver que parametros seran necesarios
        virtual ~PlantItem();
 
        // FIXME: ver que parametros seran necesarios
+       // TODO : ver si no son inutiles!!!
        virtual void send_fluid() {}
        virtual void receive_fluid() {}
 
        virtual void send_fluid() {}
        virtual void receive_fluid() {}
 
-       /// Hace que los elementos de la plata actualicen su flujo en esta etapa
-       virtual void update() = 0;
-       /// Hace la simulación de esta iteración
+       /** Ejecuta la fase de actualización.
+        *
+        *  Durante la fase de actualización los objetos se comunican entre
+        *  sí para determinar cual es el flujo que manejan en una iteración.
+        */
+       virtual void update(int dir=OUT) = 0;
+       /** Hace la simulación de esta iteración
+        *
+        *  Por simulacion se entiende que el modelo debe avisar a las vistas
+        *  que ya está actualizado para que el usuario vea los resultados.
+        */
        virtual void simulate() = 0;
 
        /// Setea el nuevo color del fluido
        virtual void simulate() = 0;
 
        /// Setea el nuevo color del fluido
-       void setColor(const RGB &c) { fluid_color = c; }
+       void set_color(const RGB &c) { fluid_color = c; }
        /// Retorna el actual color del fluido
        /// Retorna el actual color del fluido
-       const RGB &getColor() { return fluid_color; }
+       const RGB &get_color() { return fluid_color; }
 
 
+       /** Recive un mensage y lo procesa
+        *  
+        *  \see IConector::recieve_msg
+        */
        virtual void recieve_msg(int msg, IConector *who, void *data);
 
        /// Mensages manejados por los elementos de la planta
        enum {
        virtual void recieve_msg(int msg, IConector *who, void *data);
 
        /// Mensages manejados por los elementos de la planta
        enum {
-               MSG_QUERY_MAX_FLOW = IConector::MSG_LAST, ///< pregunta por el maximo flujo
+               MSG_QUERY_MAX_FLOW_OUT = IConector::MSG_LAST, ///< flujo maximo a la salida
+               MSG_QUERY_MAX_FLOW_IN, ///< flujo maximo a la entrada
                MSG_RESPONSE_MAX_FLOW, ///< responde al mensage QUERY_MAX_FLOW. data == float
                MSG_LAST
        };
 
        /// Devuelve el nombre de la instancia
        std::string get_name() const { return name; }
                MSG_RESPONSE_MAX_FLOW, ///< responde al mensage QUERY_MAX_FLOW. data == float
                MSG_LAST
        };
 
        /// Devuelve el nombre de la instancia
        std::string get_name() const { return name; }
+       
+       /// Retorna el flujo actual que maneja el objeto.
+       float get_actual_flow() { return actual_flow; }
+       virtual void get_state_as_xml(std::stringstream &out); 
 protected:
        RGB fluid_color;
        // es de solo lectura
        std::string name;
        bool updated;
 protected:
        RGB fluid_color;
        // es de solo lectura
        std::string name;
        bool updated;
+       float actual_flow;
 private:
        // Hago que no se puedan copiar objetos ElementosPlanta
        PlantItem(const PlantItem &):IConector(0,0) {}
 private:
        // Hago que no se puedan copiar objetos ElementosPlanta
        PlantItem(const PlantItem &):IConector(0,0) {}