+ public Gate getGate(byte lut, boolean xlut) {
+ for(Gate g : knownGates)
+ if (g.setLut(lut, xlut))
+ return g;
+ return unknownGate;
+ }
+
+ public Gate unknownGate = new Circle("?");
+ public Gate[] knownGates =
+ new Gate[] {
+ new And(),
+ new Or(),
+ new Circle("0") { public boolean result(boolean x, boolean y, boolean z) { return false; } },
+ new Circle("1") { public boolean result(boolean x, boolean y, boolean z) { return true; } },
+ new Circle("x") { public boolean result(boolean x, boolean y, boolean z) { return x; } },
+ new Circle("y") { public boolean result(boolean x, boolean y, boolean z) { return y; } },
+ new Circle("z") { public boolean result(boolean x, boolean y, boolean z) { return z; } },
+ new Circle("~x") { public boolean result(boolean x, boolean y, boolean z) { return !x; } },
+ new Circle("~y") { public boolean result(boolean x, boolean y, boolean z) { return !y; } },
+ new Circle("~z") { public boolean result(boolean x, boolean y, boolean z) { return !z; } }
+ };
+