#include <string>
#include "iconector.h"
#include "rgb.h"
+#include <sstream>
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:
- /// Constructor
+ /** Constructor
+ *
+ * \param _name Nombre único que identifica el objeto
+ */
PlantItem(const std::string &_name);
+ /// FIXME : agregar el nombre!
PlantItem(unsigned ins, unsigned outs);
+ /// Destructor
virtual ~PlantItem();
- // FIXME: ver que parametros seran necesarios
- 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;
+
+ /** Actualiza el color de fluido */
+ virtual void update_color();
+
+ /** 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
- void setColor(const RGB &c) { fluid_color = c; }
+ void set_color(const RGB &c) { fluid_color = c; }
/// 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 {
- 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_QUERY_COLOR,
+ MSG_RESPONSE_COLOR,
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; }
+
+ /** Genera la salida XML del estado del componente
+ *
+ * Esta función genera el estado actual de un objeto utilizando
+ * el formato XML
+ */
+ virtual void get_state_as_xml(std::stringstream &out);
protected:
RGB fluid_color;
// es de solo lectura
std::string name;
- bool updated;
+ bool updated, color_updated;
+ float actual_flow;
private:
// Hago que no se puedan copiar objetos ElementosPlanta
PlantItem(const PlantItem &):IConector(0,0) {}