X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/98871795be266e4ea8b4662737ac618ebee0fb79..0e3cd5a760199d782d22e53ec20be11ba0e23e55:/Model/include/iconector.h diff --git a/Model/include/iconector.h b/Model/include/iconector.h index bbb3c25..828b7d2 100644 --- a/Model/include/iconector.h +++ b/Model/include/iconector.h @@ -7,27 +7,51 @@ 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 * @@ -39,7 +63,7 @@ public: /// Constantes de posición donde conectar enum { - IN, ///< conectar a la entrada + IN=0, ///< conectar a la entrada OUT ///< conectar a la salida }; @@ -50,25 +74,37 @@ public: * de evitar solapamiento de mensajes. * Por ejemplo, si tenemos una clase B con un mensaje TEST se declararía * como : - * \verbatim + * \code * class B:public IConector { * enum { * MSG_TEST=IConector::MSG_LAST, * MSG_LAST * }; - * \endverbatim + * \endcode */ enum { MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje MSG_LAST }; protected: - std::list entradas; - std::list salidas; - unsigned int cant_entradas; - unsigned int cant_salidas; + /// Lista de objetos conectados a las entradas + std::list in_list; + /// Lista de objetos conectados a las salidas + std::list 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_ +