]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Model/src/iconector.cpp
* Se agregan #ifdef DEBUG a los simulate() del modelo, para poder sacar
[z.facultad/75.42/plaqui.git] / Model / src / iconector.cpp
index 778da631f30ff81278423fa95ee28e182d18a5fb..7cbdd5670720b38622cd605abf8ec9abf1e95543 100644 (file)
@@ -2,46 +2,46 @@
 
 #include "iconector.h"
 
-using namespace PlaQui;
+using namespace PlaQui::Model;
 
-IConector::IConector()
+IConector::IConector(unsigned in, unsigned out)
 {
-       cant_entradas = cant_salidas = 0;
+       in_slots = in;
+       out_slots = out;
 }
 
 IConector::~IConector()
 {
        // Limpio las listas. Los objetos no se destruyen!!
-       entradas.clear();
-       salidas.clear();
+       in_list.clear();
+       out_list.clear();
 }
 
-int IConector::send_msg(int where, int msg)
+void IConector::send_msg(int where, int msg, void *data)
 {
        // Recorro toda la lista y envío el mensage a cada
-       // elemento conectado
+       // elemento conectado en "where"
        std::list<IConector *>::iterator it;
        switch (where) {
                case IN:
-                       for(it=entradas.begin(); it!=entradas.end(); it++)
-                               (*it)->recieve_msg(msg, this);
+                       for(it=in_list.begin(); it!=in_list.end(); it++)
+                               (*it)->recieve_msg(msg, this, data);
                        break;
                case OUT:
-                       for(it=salidas.begin(); it!=salidas.end(); it++)
-                               (*it)->recieve_msg(msg, this);
+                       for(it=out_list.begin(); it!=out_list.end(); it++)
+                               (*it)->recieve_msg(msg, this, data);
        }
-
-       // TODO : ver el tema de los valores de retorno!!
-       return 0;
 }
 
-void IConector::recieve_msg(int msg, IConector *who)
+void IConector::recieve_msg(int msg, IConector *who, void *data)
 {
        // Manejo los mensages que yo conozco
        switch (msg) {
                case MSG_DISCONECT:
-                       // FIXME: sacar el elemento who de la lista!
-                       return;
+                       // Elimino el objeto de las listas, si es que
+                       // existe en alguna de las dos.
+                       in_list.remove(who);
+                       out_list.remove(who);
        }
 }
 
@@ -49,20 +49,19 @@ bool IConector::connect(IConector *obj, int place)
 {
        switch (place) {
                case IN:
-                       if (entradas.size() <= cant_entradas) {
-                               entradas.push_back(obj);
-                               cant_entradas++;
+                       if (in_list.size() <= in_slots) {
+                               in_list.push_back(obj);
                        } else {
                                return false; // no se pudo conectar!
                        }
+               break;
                case OUT:
-                       if (salidas.size() <= cant_salidas) {
-                               salidas.push_back(obj);
-                               cant_salidas++;
+                       if (out_list.size() <= out_slots) {
+                               out_list.push_back(obj);
                        } else {
                                return false; // no se pudo conectar!
                        }
-}
+       }
 
        // se pudo conectar sin problemas
        return true;