added a getValueSigned() function to ObservableValue

This commit is contained in:
hneemann 2017-07-04 22:50:12 +02:00
parent 13c9c7e7d1
commit 9bc391d09b
2 changed files with 33 additions and 0 deletions

View File

@ -11,6 +11,7 @@ public class ObservableValue extends Observable implements PinDescription {
private final String name; private final String name;
private final long mask; private final long mask;
private final long signedFlag;
private final boolean supportsHighZ; private final boolean supportsHighZ;
private final int bits; private final int bits;
private long value; private long value;
@ -45,6 +46,7 @@ public class ObservableValue extends Observable implements PinDescription {
mask = -1; mask = -1;
else else
mask = (1L << bits) - 1; mask = (1L << bits) - 1;
signedFlag = 1 << (bits - 1);
this.name = name; this.name = name;
supportsHighZ = highZ; supportsHighZ = highZ;
} }
@ -140,6 +142,17 @@ public class ObservableValue extends Observable implements PinDescription {
} }
} }
/**
* returns the actual value as a signed long
*
* @return the signed value
*/
public long getValueSigned() {
long v = getValue();
if ((v & signedFlag) != 0) v |= ~mask;
return v;
}
/** /**
* converts a value to a minimal hex string * converts a value to a minimal hex string
* *

View File

@ -25,4 +25,24 @@ public class ObservableValueTest extends TestCase {
assertEquals((1L << 62) - 1, v.getValue()); assertEquals((1L << 62) - 1, v.getValue());
} }
public void testSigned() {
ObservableValue v = new ObservableValue("z", 4);
assertEquals(0, v.setValue(0).getValueSigned());
assertEquals(1, v.setValue(1).getValueSigned());
assertEquals(7, v.setValue(7).getValueSigned());
assertEquals(-8, v.setValue(8).getValueSigned());
assertEquals(-1, v.setValue(15).getValueSigned());
assertEquals(-1, v.setValue(-1).getValueSigned());
v = new ObservableValue("z", 1);
assertEquals(0, v.setValue(0).getValueSigned());
assertEquals(-1, v.setValue(1).getValueSigned());
v = new ObservableValue("z", 8);
assertEquals(127, v.setValue(127).getValueSigned());
assertEquals(-128, v.setValue(128).getValueSigned());
assertEquals(255, v.setValue(-1).getValue());
assertEquals(-1, v.setValue(-1).getValueSigned());
}
} }