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
26 void send_msg(int where, int msg);
30 * Este procedimiento atiende los mensages enviados por otros objetos.
31 * El mensage \e msg es enviado por \e who, quien puede enviar opcionalmente
32 * un dato en \e data. El campo \e data debe ser interpretado en forma
33 * correcta dependiendo del mensage enviado.
34 * El objeto que recibe un mensage puede, de ser necesario, responder al
35 * objeto que lo envió llamando directamente al método recieve_msg del objeto
36 * \e who. No se recomienda enviar un mensage mediante send_msg ya que puede
37 * ocacionar que objetos que no esten esperando una respuesta se comporte de
38 * manera indeterminada.
39 * \param msg ID del mensage enviado.
40 * \param who Objeto que envía el mensage.
41 * \param data Dato opcional a enviar.
43 virtual void recieve_msg(int msg, IConector *who, void *data);
45 /** Conecta un objeto con otro
47 * \param place IConector::IN o IConecor::OUT para conectar a la entrada o salida.
48 * \param obj Objeto a conectar
49 * \return true si se pudo conectar
51 bool connect(IConector *obj, int place);
53 /// Constantes de posición donde conectar
55 IN, ///< conectar a la entrada
56 OUT ///< conectar a la salida
59 /** Mensages a este nivel
61 * Las clases descendientes que quieran definir sus mensajes deben utilizar
62 * el valor de IConector::MSG_LAST como valor para el primer msg, a fin
63 * de evitar solapamiento de mensajes.
64 * Por ejemplo, si tenemos una clase B con un mensaje TEST se declararía
67 * class B:public IConector {
69 * MSG_TEST=IConector::MSG_LAST,
75 MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje
79 /// Lista de objetos conectados a las entradas
80 std::list<IConector *> in_list;
81 /// Lista de objetos conectados a las salidas
82 std::list<IConector *> out_list;
83 /// Cantidad de entradas disponibles
84 unsigned int in_slots;
85 /// Canitidad de salidas disponibles
86 unsigned int out_slots;
89 // Oculto copia entre clases
91 IConector(const IConector &) {}
92 IConector &operator = (const IConector &) { return (*this); }
97 #endif // _I_CONECTOR_H_