1 package era.mi.logic;
\r
3 import java.util.Arrays;
\r
6 * stdlogic according to IEEE 1164
\r
12 public static Bit and(Bit a, Bit b)
\r
17 public Bit and(Bit other)
\r
19 return fromTable(AND_TABLE, this, other);
\r
22 public static Bit or(Bit a, Bit b)
\r
27 public Bit or(Bit other)
\r
29 return fromTable(OR_TABLE, this, other);
\r
32 public static Bit xor(Bit a, Bit b)
\r
37 public Bit xor(Bit other)
\r
39 return fromTable(XOR_TABLE, this, other);
\r
57 public Bit[] makeArray(int length)
\r
59 Bit[] bits = new Bit[length];
\r
60 Arrays.fill(bits, this);
\r
64 public Bit combineWith(Bit other)
\r
66 return fromTable(JOIN_TABLE, this, other);
\r
69 public static Bit combine(Bit a, Bit b)
\r
71 return a.combineWith(b);
\r
74 private static Bit fromTable(Bit[][] table, Bit a, Bit b)
\r
76 return table[a.ordinal()][b.ordinal()];
\r
80 private static Bit[][] JOIN_TABLE =
\r
81 { { U, U, U, U, U },
\r
83 { U, X, ZERO, X, ZERO },
\r
84 { U, X, X, ONE, ONE },
\r
85 { U, X, ZERO, ONE, Z } };
\r
87 private static Bit[][] AND_TABLE =
\r
88 { { U, U, ZERO, U, U },
\r
89 { U, X, ZERO, X, X },
\r
90 { ZERO, ZERO, ZERO, ZERO, ZERO },
\r
91 { U, X, ZERO, ONE, X },
\r
92 { U, X, ZERO, X, X } };
\r
94 private static Bit[][] OR_TABLE =
\r
95 { { U, U, U, ONE, U },
\r
96 { U, X, X, ONE, X },
\r
97 { U, X, ZERO, ONE, X },
\r
98 { ONE, ONE, ONE, ONE, ONE },
\r
99 { U, X, X, ONE, X } };
\r
101 private static Bit[][] XOR_TABLE =
\r
102 { { U, U, U, U, U },
\r
103 { U, X, X, X, X },
\r
104 { U, X, ZERO, ONE, X },
\r
105 { U, X, ONE, ZERO, X },
\r
106 { U, X, X, X, X } };
\r