+
+#ifndef _BYPASS_H_
+#define _BYPASS_H_
+
+#include "logiccontrol.h"
+#include <iostream>
+#include <limits.h>
+#include "control.h"
+
+namespace PlaQui {
+namespace Model {
+
+class ByPass:public LogicControl {
+public:
+ ByPass():LogicControl(1,1) { control = NULL; }
+ virtual ~ByPass() {}
+
+ virtual bool get_output() {
+ LogicControl *mi_entrada;
+ bool mi_salida = false;
+ // Si tengo conectado algo a mi salida, es porque
+ // le tengo que consultar a el.
+ // Si no tengo nadia a mi salida, es porque tengo
+ // que consultar a mis entradas
+ if (control == NULL) {
+ // No tengo nadie a mi salida!, pregunto a mis entradas, si es
+ // que tengo!!
+ if (in_list.begin() != in_list.end()) {
+ mi_entrada = (LogicControl *)(*in_list.begin());
+ mi_salida = mi_entrada->get_output();
+ } else {
+ mi_salida = true; // Paso true por defecto
+ }
+ } else {
+ mi_salida = control->get_output();
+ }
+
+ return mi_salida;
+ }
+ /** Setea el objeto a controlar
+ *
+ * El ByPass puede ser utilizado para consultar el estado
+ * de un elemento Control (utilizado en el slot output de
+ * la lógica de control) o para que un elemento de Control
+ * le pregunte por que valor tiene que tener a su entrada.
+ * Si Control == NULL se asume que esta funcionando como entrada
+ * y en caso contrario como salida de un objeto Control.
+ * \param NULL No controla a nadie
+ * \param Objeto Controla al objeto pasado
+ */
+ void set_control(Control *c) { control = c; }
+protected:
+ /// Objeto a controlar
+ Control *control;
+};
+
+}
+}
+
+#endif // _OR_H_
+