minor refactoring of comparator

Now it also uses new getValueSIgned() method.
This commit is contained in:
hneemann 2017-07-08 09:58:20 +02:00
parent 7ea2f89ec0
commit edc114f2a7
3 changed files with 13 additions and 22 deletions

View File

@ -31,8 +31,6 @@ public class Comparator extends Node implements Element {
private final ObservableValue aklb;
private final ObservableValue equals;
private final ObservableValue agrb;
private final int maskAnd;
private final int maskOr;
private ObservableValue a;
private ObservableValue b;
private long valueA;
@ -46,8 +44,6 @@ public class Comparator extends Node implements Element {
public Comparator(ElementAttributes attributes) {
signed = attributes.get(Keys.SIGNED);
bits = attributes.get(Keys.BITS);
this.maskAnd = 1 << (bits - 1);
this.maskOr = ~((1 << bits) - 1);
this.agrb = new ObservableValue(">", 1).setPinDescription(DESCRIPTION);
this.equals = new ObservableValue("=", 1).setPinDescription(DESCRIPTION);
@ -56,8 +52,13 @@ public class Comparator extends Node implements Element {
@Override
public void readInputs() throws NodeException {
valueA = a.getValue();
valueB = b.getValue();
if (signed) {
valueA = a.getValueSigned();
valueB = b.getValueSigned();
} else {
valueA = a.getValue();
valueB = b.getValue();
}
}
@Override
@ -68,25 +69,12 @@ public class Comparator extends Node implements Element {
agrb.setValue(0);
} else {
equals.setValue(0);
if (signed) {
valueA = signeExtend(valueA);
valueB = signeExtend(valueB);
}
boolean kl = valueA < valueB;
aklb.setBool(kl);
agrb.setBool(!kl);
}
}
private long signeExtend(long v) {
if ((v & maskAnd) != 0)
return v | maskOr;
else
return v;
}
@Override
public void setInputs(ObservableValues inputs) throws BitsException {
a = inputs.get(0).addObserverToValue(this).checkBits(bits, this, 0);

View File

@ -211,8 +211,8 @@ Es können sowohl komplette Takte als auch einzelne Gatter-Veränderungen angeze
<string name="elem_Mul_pin_a">Eingang a für Multiplikation.</string>
<string name="elem_Mul_pin_b">Eingang b für Multiplikation.</string>
<string name="elem_Mul_pin_mul">Ausgang mit dem Ergebnis der Multiplikation.</string>
<string name="elem_BarrelShifter">Verschieber</string>
<string name="elem_BarrelShifter_tt">Ein Baustein zum Bitschieben. Verschiebt einen Wert um die am Eingang shift angegebene Anzahl von Bits.</string>
<string name="elem_BarrelShifter">Bit-Schieber</string>
<string name="elem_BarrelShifter_tt">Ein Baustein zum Schieben von Bits. Verschiebt einen Wert um die am Eingang shift angegebene Anzahl von Bits.</string>
<string name="elem_BarrelShifter_pin_in">Eingang mit zu verschiebenden Bits.</string>
<string name="elem_BarrelShifter_pin_shift">Eingang mit Weite der Verschiebung.</string>
<string name="elem_BarrelShifter_pin_out">Ausgang mit dem Ergebnis der Verschiebeoperation.</string>
@ -616,7 +616,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig?</string>
<string name="key_barrelSigned">Verschiebeweite hat Vorzeichen</string>
<string name="key_barrelSigned_tt">Verschiebeweite verwendet Zweierkomplement</string>
<string name="key_barrelShifterMode">Modus</string>
<string name="key_barrelShifterMode_tt">Modus des Verschiebung.</string>
<string name="key_barrelShifterMode_tt">Modus der Verschiebung.</string>
<string name="key_barrelShifterMode_normal">Normal</string>
<string name="key_barrelShifterMode_rotate">Rotation</string>
<string name="key_barrelShifterMode_arithmetic">Arithmetisch</string>

View File

@ -53,6 +53,9 @@ public class ComparatorTest extends TestCase {
sc.check(8, 2, 0, 0, 1);
sc.check(15, 2, 0, 0, 1);
sc.check(13, 15, 0, 0, 1);
sc.check(-2, -3, 1, 0, 0);
sc.check(-7, -8, 1, 0, 0);
}