]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/include/bypass.h
* Se mejora la deteccion de conexiones en el constructor
[z.facultad/75.42/plaqui.git] / Model / include / bypass.h
1
2 #ifndef _BYPASS_H_
3 #define _BYPASS_H_
4
5 #include "logiccontrol.h"
6 #include <iostream>
7 #include <limits.h>
8 #include "control.h"
9
10 namespace PlaQui {
11 namespace Model {
12
13 /** Paso directo de dato
14  *
15  *  Este elemento tiene la funcionalidad para trabajar como entrada
16  *  o salida de un elemento conectado.
17  *  Si el elemento es utilizado como entrada, a este se le conecta
18  *  lógica de control a su entrada. Cuando el elemento al que sirve
19  *  requiere saber su estado, llama al método get_output de este objeto
20  *  y este le responde segun corresponda.
21  *  Si este objeto es utilizado como salida, se le debe asignar un
22  *  elemento a quién controlar. Cuando la lógica de control llama
23  *  al get_output de éste objeto, éste le consulta al objeto a quién
24  *  controla para pasar el dato al circuito lógico.
25  *  \see Pump
26  *  \see Exclusa
27  */
28 class ByPass:public LogicControl {
29 public:
30         ByPass():LogicControl(1,1) { control = NULL; }
31         virtual ~ByPass() {}
32
33         virtual bool get_output() {
34                 LogicControl *mi_entrada;
35                 bool mi_salida = false;
36                 // Si tengo asignado un objeto a quien controlar, es porque
37                 // le tengo que consultar a el.
38                 // Si no, es porque tengo que consultar a mis entradas
39                 if (control == NULL) {
40                         // No tcontrolo a nadie!, pregunto a mi entradas, si es
41                         // que tengo!!
42                         if (in_list.begin() != in_list.end()) {
43                                 mi_entrada = (LogicControl *)(*in_list.begin());
44                                 mi_salida = mi_entrada->get_output();
45                         } else {
46                                 mi_salida = true; // Paso true por defecto
47                         }
48                 } else {
49                         mi_salida = control->get_output();
50                 }
51
52                 return mi_salida;
53         }
54         /** Setea el objeto a controlar
55          *
56          *  El ByPass puede ser utilizado para consultar el estado
57          *  de un elemento Control (utilizado en el slot output de
58          *  la lógica de control) o para que un elemento de Control
59          *  le pregunte por que valor tiene que tener a su entrada.
60          *  Si Control == NULL se asume que esta funcionando como entrada
61          *  y en caso contrario como salida de un objeto Control.
62          *  \param NULL No controla a nadie
63          *  \param Objeto Controla al objeto pasado
64          */
65         void set_control(Control *c) { control = c; }
66 protected:
67         /// Objeto a controlar
68         Control *control;
69 };
70
71 }
72 }
73
74 #endif // _BYPASS_H_
75