namespace PlaQui {
+namespace Model {
/** Conector genérico de elementos
+ *
+ * El conector es un interfaz común que permite a objetos de distinto
+ * tipo comunicarse entre sí sin la necesidad de conocerse.
+ * Maneja una lista de elementos conectados a uno, que pueden estar
+ * tanto conectados a una entrada como a una salida.
*/
class IConector {
public:
- /// Constructor
- IConector();
+ /** Constructor
+ *
+ * \param in Cantidad de entradas
+ * \param out Cantidad de salidas
+ */
+ IConector(unsigned in, unsigned out);
/// Destructor
virtual ~IConector();
/** Envía un mensage a los elementos conectados
*
- * Esvía un mensage a los elementos conectados a la entrada o
+ * Envía un mensage a los elementos conectados a la entrada o
* a la salida.
* \param where Donde enviar el mensage, IConector::IN o IConector::OUT
* \param msg Mensage a enviar
- * \return Respuesta al mensage. Se interpreta dependiendo del mensage
+ * \param data dato opcional a mandar, según el mensage que se envíe
*/
- int send_msg(int where, int msg);
+ void send_msg(int where, int msg, void *data=NULL);
- /// Recive un mensage
- virtual void recieve_msg(int msg, IConector *who);
+ /** Recibe un mensage
+ *
+ * Este procedimiento atiende los mensages enviados por otros objetos.
+ * El mensage \e msg es enviado por \e who, quien puede enviar opcionalmente
+ * un dato en \e data. El campo \e data debe ser interpretado en forma
+ * correcta dependiendo del mensage enviado.
+ * El objeto que recibe un mensage puede, de ser necesario, responder al
+ * objeto que lo envió llamando directamente al método recieve_msg del objeto
+ * \e who. No se recomienda enviar un mensage mediante send_msg ya que puede
+ * ocacionar que objetos que no esten esperando una respuesta se comporte de
+ * manera indeterminada.
+ * \param msg ID del mensage enviado.
+ * \param who Objeto que envía el mensage.
+ * \param data Dato opcional a enviar.
+ */
+ virtual void recieve_msg(int msg, IConector *who, void *data);
/** Conecta un objeto con otro
*
MSG_LAST
};
protected:
- std::list<IConector *> entradas;
- std::list<IConector *> salidas;
- unsigned int cant_entradas;
- unsigned int cant_salidas;
+ /// Lista de objetos conectados a las entradas
+ std::list<IConector *> in_list;
+ /// Lista de objetos conectados a las salidas
+ std::list<IConector *> out_list;
+ /// Cantidad de entradas disponibles
+ unsigned int in_slots;
+ /// Canitidad de salidas disponibles
+ unsigned int out_slots;
+
+private:
+ // Oculto copia entre clases
+ IConector() {}
+ IConector(const IConector &) {}
+ IConector &operator = (const IConector &) { return (*this); }
};
-}
+} // namespace Model
+} // namespace PlaQui
#endif // _I_CONECTOR_H_
+