]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/include/bypass.h
Agrego primer version muy chota de lo que va a ser el Simulador
[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 class ByPass:public LogicControl {
14 public:
15         ByPass():LogicControl(1,1) { control = NULL; }
16         virtual ~ByPass() {}
17
18         virtual bool get_output() {
19                 LogicControl *mi_entrada;
20                 bool mi_salida = false;
21                 // Si tengo conectado algo a mi salida, es porque
22                 // le tengo que consultar a el.
23                 // Si no tengo nadia a mi salida, es porque tengo 
24                 // que consultar a mis entradas
25                 if (control == NULL) {
26                         // No tengo nadie a mi salida!, pregunto a mis entradas, si es
27                         // que tengo!!
28                         if (in_list.begin() != in_list.end()) {
29                                 mi_entrada = (LogicControl *)(*in_list.begin());
30                                 mi_salida = mi_entrada->get_output();
31                         } else {
32                                 mi_salida = true; // Paso true por defecto
33                         }
34                 } else {
35                         mi_salida = control->get_output();
36                 }
37
38                 return mi_salida;
39         }
40         /** Setea el objeto a controlar
41          *
42          *  El ByPass puede ser utilizado para consultar el estado
43          *  de un elemento Control (utilizado en el slot output de
44          *  la lógica de control) o para que un elemento de Control
45          *  le pregunte por que valor tiene que tener a su entrada.
46          *  Si Control == NULL se asume que esta funcionando como entrada
47          *  y en caso contrario como salida de un objeto Control.
48          *  \param NULL No controla a nadie
49          *  \param Objeto Controla al objeto pasado
50          */
51         void set_control(Control *c) { control = c; }
52 protected:
53         /// Objeto a controlar
54         Control *control;
55 };
56
57 }
58 }
59
60 #endif // _OR_H_
61