]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
- Agrego los primeros archivos pertenecientes al modelo. Nada funcional ni
authorRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 20 Oct 2003 02:59:28 +0000 (02:59 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 20 Oct 2003 02:59:28 +0000 (02:59 +0000)
  clarificados aun.
- Sigo actualizando el diagrama de clases

Model/include/elementoplanta.h [new file with mode: 0644]
Model/include/iconector.h [new file with mode: 0644]
Model/include/rgb.h [new file with mode: 0644]
Model/src/elementoplanta.cpp [new file with mode: 0644]
Model/src/iconector.cpp [new file with mode: 0644]
docs/clases.dia

diff --git a/Model/include/elementoplanta.h b/Model/include/elementoplanta.h
new file mode 100644 (file)
index 0000000..502c265
--- /dev/null
@@ -0,0 +1,46 @@
+
+
+#ifndef _ELEMENTO_PLANTA_H_
+#define _ELEMENTO_PLANTA_H_
+
+#include "iconector.h"
+#include "rgb.h"
+
+namespace PlaQui {
+
+class ElementoPlanta:public IConector {
+public:
+       /// Constructor
+       ElementoPlanta();
+       virtual ~ElementoPlanta();
+
+       // 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
+       virtual void simulate() = 0;
+
+       /// Setea el nuevo color del fluido
+       void setColor(const RGB &c) { fluid_color = c; }
+       /// Retorna el actual color del fluido
+       const RGB &getColor() { return fluid_color; }
+
+       /// Recibe un mensage
+       virtual void recieve_msg(int msg, IConector *who);
+
+       /// Mensages manejados por los elementos de la planta
+       enum {
+               MSG_QUERY_MAX_FLOW = IConector::MSG_LAST, ///< pregunta por el maximo flujo
+               MSG_LAST
+       };
+protected:
+       RGB fluid_color;
+};
+
+}
+
+#endif
+
diff --git a/Model/include/iconector.h b/Model/include/iconector.h
new file mode 100644 (file)
index 0000000..bbb3c25
--- /dev/null
@@ -0,0 +1,74 @@
+
+
+#ifndef _I_CONECTOR_H_
+#define _I_CONECTOR_H_
+
+#include <list>
+
+namespace PlaQui {
+
+/** Conector genérico de elementos
+ */
+class IConector {
+public:
+       /// Constructor
+       IConector();
+       /// Destructor
+       virtual ~IConector();
+
+       /** Envía un mensage a los elementos conectados
+        *
+        *  Esvía un mensage a los elementos conectados a la entrada o
+        *  a la salida.
+        *  \param where Donde enviar el mensage, IConector::IN o IConector::OUT
+        *  \param msg Mensage a enviar
+        *  \return Respuesta al mensage. Se interpreta dependiendo del mensage
+        */
+       int send_msg(int where, int msg);
+       
+       /// Recive un mensage
+       virtual void recieve_msg(int msg, IConector *who);
+
+       /** Conecta un objeto con otro
+        *
+        *  \param place IConector::IN o IConecor::OUT para conectar a la entrada o salida.
+        *  \param obj Objeto a conectar
+        *  \return true si se pudo conectar
+        */
+       bool connect(IConector *obj, int place);
+
+       /// Constantes de posición donde conectar
+       enum {
+               IN, ///< conectar a la entrada
+               OUT ///< conectar a la salida
+       };
+
+       /** Mensages a este nivel
+        *
+        *  Las clases descendientes que quieran definir sus mensajes deben utilizar
+        *  el valor de IConector::MSG_LAST como valor para el primer msg, a fin
+        *  de evitar solapamiento de mensajes.
+        *  Por ejemplo, si tenemos una clase B con un mensaje TEST se declararía
+        *  como :
+        *  \verbatim
+        *      class B:public IConector {
+        *              enum {
+        *                      MSG_TEST=IConector::MSG_LAST,
+        *                      MSG_LAST
+        *      };
+        *  \endverbatim
+        */
+       enum {
+               MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje
+               MSG_LAST
+       };
+protected:
+       std::list<IConector *> entradas;
+       std::list<IConector *> salidas;
+       unsigned int cant_entradas;
+       unsigned int cant_salidas;
+};
+
+}
+
+#endif // _I_CONECTOR_H_
diff --git a/Model/include/rgb.h b/Model/include/rgb.h
new file mode 100644 (file)
index 0000000..4a851e0
--- /dev/null
@@ -0,0 +1,35 @@
+
+
+#ifndef _RGB_H_
+#define _RGB_H_
+
+typedef unsigned char color;
+
+/** Representación de un color en codificación RGB */
+class RGB {
+public:
+       RGB() { my_r=my_g=my_b=0; }
+       RGB(color _r, color _g, color _b) {
+               my_r = _r;
+               my_g = _g;
+               my_b = _b;
+       }
+       
+       RGB &operator = (const RGB &c) {
+               if (this == &c) return (*this);
+               my_r = c.r();
+               my_g = c.g();
+               my_b = c.b();
+               return (*this);
+       }
+
+       color r() const { return my_r; }
+       color g() const { return my_g; }
+       color b() const { return my_b; }
+
+private:
+       color my_r, my_g, my_b;
+};
+
+#endif // _RGB_H_
+
diff --git a/Model/src/elementoplanta.cpp b/Model/src/elementoplanta.cpp
new file mode 100644 (file)
index 0000000..244ea6e
--- /dev/null
@@ -0,0 +1,26 @@
+
+
+#include "elementoplanta.h"
+
+using namespace PlaQui;
+
+ElementoPlanta::ElementoPlanta()
+{
+}
+
+ElementoPlanta::~ElementoPlanta()
+{
+}
+       
+void ElementoPlanta::recieve_msg(int msg, IConector *who)
+{
+       switch (msg) {
+               case MSG_QUERY_MAX_FLOW:
+                       /// TODO
+                       return;
+               break;
+               default:
+                       IConector::recieve_msg(msg, who);
+       }
+}
+
diff --git a/Model/src/iconector.cpp b/Model/src/iconector.cpp
new file mode 100644 (file)
index 0000000..778da63
--- /dev/null
@@ -0,0 +1,70 @@
+
+
+#include "iconector.h"
+
+using namespace PlaQui;
+
+IConector::IConector()
+{
+       cant_entradas = cant_salidas = 0;
+}
+
+IConector::~IConector()
+{
+       // Limpio las listas. Los objetos no se destruyen!!
+       entradas.clear();
+       salidas.clear();
+}
+
+int IConector::send_msg(int where, int msg)
+{
+       // Recorro toda la lista y envío el mensage a cada
+       // elemento conectado
+       std::list<IConector *>::iterator it;
+       switch (where) {
+               case IN:
+                       for(it=entradas.begin(); it!=entradas.end(); it++)
+                               (*it)->recieve_msg(msg, this);
+                       break;
+               case OUT:
+                       for(it=salidas.begin(); it!=salidas.end(); it++)
+                               (*it)->recieve_msg(msg, this);
+       }
+
+       // TODO : ver el tema de los valores de retorno!!
+       return 0;
+}
+
+void IConector::recieve_msg(int msg, IConector *who)
+{
+       // Manejo los mensages que yo conozco
+       switch (msg) {
+               case MSG_DISCONECT:
+                       // FIXME: sacar el elemento who de la lista!
+                       return;
+       }
+}
+
+bool IConector::connect(IConector *obj, int place)
+{
+       switch (place) {
+               case IN:
+                       if (entradas.size() <= cant_entradas) {
+                               entradas.push_back(obj);
+                               cant_entradas++;
+                       } else {
+                               return false; // no se pudo conectar!
+                       }
+               case OUT:
+                       if (salidas.size() <= cant_salidas) {
+                               salidas.push_back(obj);
+                               cant_salidas++;
+                       } else {
+                               return false; // no se pudo conectar!
+                       }
+}
+
+       // se pudo conectar sin problemas
+       return true;
+}
+
index 4ab224cdf9d926be1c85775a5e604a5dae33092e..afa02f86e531a0b1f431e8dd5fefa912106b36d9 100644 (file)
Binary files a/docs/clases.dia and b/docs/clases.dia differ