mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-26 22:41:59 -04:00
added a getValueSigned() function to ObservableValue
This commit is contained in:
parent
13c9c7e7d1
commit
9bc391d09b
@ -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
|
||||||
*
|
*
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user