]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/src/iconector.cpp
se mejora la conexion entre compuertas, se salvan en el XML, hay un par de cosas...
[z.facultad/75.42/plaqui.git] / Model / src / iconector.cpp
1
2
3 #include "iconector.h"
4 #include <iostream>
5 using namespace PlaQui::Model;
6
7 IConector::IConector(unsigned in, unsigned out)
8 {
9         in_slots = in;
10         out_slots = out;
11 }
12
13 IConector::~IConector()
14 {
15         // Limpio las listas. Los objetos no se destruyen!!
16         in_list.clear();
17         out_list.clear();
18 }
19
20 void IConector::send_msg(int where, int msg, void *data)
21 {
22         // Recorro toda la lista y envío el mensage a cada
23         // elemento conectado en "where"
24         std::list<IConector *>::iterator it;
25         switch (where) {
26                 case IN:
27                         for(it=in_list.begin(); it!=in_list.end(); it++)
28                                 (*it)->recieve_msg(msg, this, data);
29                         break;
30                 case OUT:
31                         for(it=out_list.begin(); it!=out_list.end(); it++) {
32                                 (*it)->recieve_msg(msg, this, data);
33                         }
34         }
35 }
36
37 void IConector::recieve_msg(int msg, IConector *who, void *data)
38 {
39         // Manejo los mensages que yo conozco
40         switch (msg) {
41                 case MSG_DISCONECT:
42                         // Elimino el objeto de las listas, si es que
43                         // existe en alguna de las dos.
44                         in_list.remove(who);
45                         out_list.remove(who);
46         }
47 }
48
49 bool IConector::connect(IConector *obj, int place)
50 {
51         switch (place) {
52                 case IN:
53                         if (in_list.size() <= in_slots) {
54                                 in_list.push_back(obj);
55                         } else {
56                                 return false; // no se pudo conectar!
57                         }
58                 break;
59                 case OUT:
60                         if (out_list.size() <= out_slots) {
61                                 out_list.push_back(obj);
62                         } else {
63                                 return false; // no se pudo conectar!
64                         }
65         }
66
67         // se pudo conectar sin problemas
68         return true;
69 }
70