1 package net.mograsim.logic.core.types;
3 import java.util.Arrays;
5 import java.util.Objects;
8 * stdlogic according to IEEE 1164
10 public enum Bit implements StrictLogicType<Bit>
12 U("U"), X("X"), ZERO("0"), ONE("1"), Z("Z");
14 private final String symbol;
16 private Bit(String symbol)
21 public boolean isBinary()
23 return this == ONE || this == ZERO;
27 public Bit and(Bit other)
29 return fromTable(AND_TABLE, this, other);
33 public Bit or(Bit other)
35 return fromTable(OR_TABLE, this, other);
39 public Bit xor(Bit other)
41 return fromTable(XOR_TABLE, this, other);
60 public Bit[] makeArray(int length)
62 Bit[] bits = new Bit[length];
63 Arrays.fill(bits, this);
67 public BitVector toVector(int length)
69 return BitVector.of(this, length);
73 public Bit join(Bit other)
75 return fromTable(JOIN_TABLE, this, other);
79 public String toString()
84 public String getSymbol()
89 public static Bit lastBitOf(int value)
91 return values()[2 + (value & 1)];
94 public static Bit parse(String s)
96 Bit bit = SYMBOL_MAP.get(s);
97 Objects.requireNonNull(bit, "No Bit found for symbol " + s);
101 public static Bit parse(String s, int symbolPosition)
103 return parse(s.substring(symbolPosition, symbolPosition + 1));
106 private static Bit fromTable(Bit[][] table, Bit a, Bit b)
108 return table[a.ordinal()][b.ordinal()];
111 static final Map<String, Bit> SYMBOL_MAP = Map.of(U.symbol, U, X.symbol, X, ZERO.symbol, ZERO, ONE.symbol, ONE, Z.symbol, Z);
114 private static final Bit[][] JOIN_TABLE =
117 { U, X, ZERO, X, ZERO },
118 { U, X, X, ONE, ONE },
119 { U, X, ZERO, ONE, Z } };
121 private static final Bit[][] AND_TABLE =
122 { { U, U, ZERO, U, U },
123 { U, X, ZERO, X, X },
124 { ZERO, ZERO, ZERO, ZERO, ZERO },
125 { U, X, ZERO, ONE, X },
126 { U, X, ZERO, X, X } };
128 private static final Bit[][] OR_TABLE =
129 { { U, U, U, ONE, U },
131 { U, X, ZERO, ONE, X },
132 { ONE, ONE, ONE, ONE, ONE },
133 { U, X, X, ONE, X } };
135 private static final Bit[][] XOR_TABLE =
138 { U, X, ZERO, ONE, X },
139 { U, X, ONE, ZERO, X },