11 /** Conector genérico de elementos
16 IConector(unsigned in, unsigned out);
20 /** Envía un mensage a los elementos conectados
22 * Esvía un mensage a los elementos conectados a la entrada o
24 * \param where Donde enviar el mensage, IConector::IN o IConector::OUT
25 * \param msg Mensage a enviar
27 void send_msg(int where, int msg);
31 * Este procedimiento atiende los mensages enviados por otros objetos.
32 * El mensage \e msg es enviado por \e who, quien puede enviar opcionalmente
33 * un dato en \e data. El campo \e data debe ser interpretado en forma
34 * correcta dependiendo del mensage enviado.
35 * El objeto que recibe un mensage puede, de ser necesario, responder al
36 * objeto que lo envió llamando directamente al método recieve_msg del objeto
37 * \e who. No se recomienda enviar un mensage mediante send_msg ya que puede
38 * ocacionar que objetos que no esten esperando una respuesta se comporte de
39 * manera indeterminada.
40 * \param msg ID del mensage enviado.
41 * \param who Objeto que envía el mensage.
42 * \param data Dato opcional a enviar.
44 virtual void recieve_msg(int msg, IConector *who, void *data);
46 /** Conecta un objeto con otro
48 * \param place IConector::IN o IConecor::OUT para conectar a la entrada o salida.
49 * \param obj Objeto a conectar
50 * \return true si se pudo conectar
52 bool connect(IConector *obj, int place);
54 /// Constantes de posición donde conectar
56 IN, ///< conectar a la entrada
57 OUT ///< conectar a la salida
60 /** Mensages a este nivel
62 * Las clases descendientes que quieran definir sus mensajes deben utilizar
63 * el valor de IConector::MSG_LAST como valor para el primer msg, a fin
64 * de evitar solapamiento de mensajes.
65 * Por ejemplo, si tenemos una clase B con un mensaje TEST se declararía
68 * class B:public IConector {
70 * MSG_TEST=IConector::MSG_LAST,
76 MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje
80 /// Lista de objetos conectados a las entradas
81 std::list<IConector *> in_list;
82 /// Lista de objetos conectados a las salidas
83 std::list<IConector *> out_list;
84 /// Cantidad de entradas disponibles
85 unsigned int in_slots;
86 /// Canitidad de salidas disponibles
87 unsigned int out_slots;
90 // Oculto copia entre clases
92 IConector(const IConector &) {}
93 IConector &operator = (const IConector &) { return (*this); }
99 #endif // _I_CONECTOR_H_