10 /** Conector genérico de elementos
15 IConector(unsigned in, unsigned out);
19 /** Envía un mensage a los elementos conectados
21 * Esvía un mensage a los elementos conectados a la entrada o
23 * \param where Donde enviar el mensage, IConector::IN o IConector::OUT
24 * \param msg Mensage a enviar
25 * \return Respuesta al mensage. Se interpreta dependiendo del mensage
27 int send_msg(int where, int msg);
30 virtual void recieve_msg(int msg, IConector *who);
32 /** Conecta un objeto con otro
34 * \param place IConector::IN o IConecor::OUT para conectar a la entrada o salida.
35 * \param obj Objeto a conectar
36 * \return true si se pudo conectar
38 bool connect(IConector *obj, int place);
40 /// Constantes de posición donde conectar
42 IN, ///< conectar a la entrada
43 OUT ///< conectar a la salida
46 /** Mensages a este nivel
48 * Las clases descendientes que quieran definir sus mensajes deben utilizar
49 * el valor de IConector::MSG_LAST como valor para el primer msg, a fin
50 * de evitar solapamiento de mensajes.
51 * Por ejemplo, si tenemos una clase B con un mensaje TEST se declararía
54 * class B:public IConector {
56 * MSG_TEST=IConector::MSG_LAST,
62 MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje
66 /// Lista de objetos conectados a las entradas
67 std::list<IConector *> in_list;
68 /// Lista de objetos conectados a las salidas
69 std::list<IConector *> out_list;
70 /// Cantidad de entradas disponibles
71 unsigned int in_slots;
72 /// Canitidad de salidas disponibles
73 unsigned int out_slots;
76 // Oculto copia entre clases
78 IConector(const IConector &) {}
79 IConector &operator = (const IConector &) { return (*this); }
84 #endif // _I_CONECTOR_H_