projects
/
Mograsim.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1964378
)
Added MSB first versions of parse() and toString()
author
Daniel Kirschten
<daniel.kirschten@gmx.de>
Sun, 30 Jun 2019 16:39:00 +0000
(18:39 +0200)
committer
Daniel Kirschten
<daniel.kirschten@gmx.de>
Sun, 30 Jun 2019 16:39:00 +0000
(18:39 +0200)
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java
patch
|
blob
|
history
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java
patch
|
blob
|
history
net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java
patch
|
blob
|
history
net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java
patch
|
blob
|
history
diff --git
a/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java
b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java
index
4d5365a
..
9e09f43
100644
(file)
--- a/
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java
+++ b/
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java
@@
-286,26
+286,45
@@
public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
return Arrays.equals(bits, offset, offset + other.length(), other.bits, 0, other.length());
}
return Arrays.equals(bits, offset, offset + other.length(), other.bits, 0, other.length());
}
+ @Override
+ public String toString()
+ {
+ return toBitStringMSBFirst();
+ }
+
/**
* All {@link Bit}s symbols concatenated together
*
* @see #parse(String)
*/
/**
* All {@link Bit}s symbols concatenated together
*
* @see #parse(String)
*/
- @Override
- public String toString()
+ public String toBitStringLSBFirst()
+ {
+ StringBuilder sb = new StringBuilder(bits.length);
+ for (Bit bit : bits)
+ sb.append(bit);
+ return sb.toString();
+ }
+
+ /**
+ * All {@link Bit}s symbols concatenated together, with the MSB coming first (like a binary number)
+ *
+ * @see #parse(String)
+ */
+ public String toBitStringMSBFirst()
{
StringBuilder sb = new StringBuilder(bits.length);
for (Bit bit : bits)
sb.append(bit);
{
StringBuilder sb = new StringBuilder(bits.length);
for (Bit bit : bits)
sb.append(bit);
+ sb.reverse();
return sb.toString();
}
/**
* Parses a String containing solely {@link Bit} symbols
*
return sb.toString();
}
/**
* Parses a String containing solely {@link Bit} symbols
*
- * @see #to
String
()
+ * @see #to
BitStringLSBFirst
()
*/
*/
- public static BitVector parse(String s)
+ public static BitVector parse
LSBFirst
(String s)
{
Bit[] values = new Bit[s.length()];
for (int i = 0; i < s.length(); i++)
{
Bit[] values = new Bit[s.length()];
for (int i = 0; i < s.length(); i++)
@@
-315,6
+334,21
@@
public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
return new BitVector(values);
}
return new BitVector(values);
}
+ /**
+ * Parses a String containing solely {@link Bit} symbols, with the MSB coming first (like a binary number)
+ *
+ * @see #toBitStringLSBFirst()
+ */
+ public static BitVector parseMSBFirst(String s)
+ {
+ Bit[] values = new Bit[s.length()];
+ for (int i = 0, j = s.length() - 1; j >= 0; i++, j--)
+ {
+ values[i] = Bit.parse(s, j);
+ }
+ return new BitVector(values);
+ }
+
@Override
public Iterator<Bit> iterator()
{
@Override
public Iterator<Bit> iterator()
{
diff --git
a/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java
b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java
index
67a2730
..
3cb35b3
100644
(file)
--- a/
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java
+++ b/
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java
@@
-16,7
+16,7
@@
public class BitVectorFormatter
{
if (bitVector == null)
return "null";
{
if (bitVector == null)
return "null";
- return bitVector.to
String
();
+ return bitVector.to
BitStringMSBFirst
();
}
// TODO doesn't this belong to logic.ui?
}
// TODO doesn't this belong to logic.ui?
diff --git
a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java
b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java
index
0b1adc2
..
1862ae3
100644
(file)
--- a/
net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java
+++ b/
net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java
@@
-181,8
+181,7
@@
public class TestableAm2901Impl implements TestableAm2901
@Override
public void setReg_A(String val_4_bit)
{
@Override
public void setReg_A(String val_4_bit)
{
- // reverse because the BitVector.parse() expects the LSBit at the beginning and the MSBit at the end
- var bits = BitVector.parse(new StringBuilder(val_4_bit).reverse().toString());
+ var bits = BitVector.parseMSBFirst(val_4_bit);
A3.setToValueOf(bits.getBit(3));
A2.setToValueOf(bits.getBit(2));
A1.setToValueOf(bits.getBit(1));
A3.setToValueOf(bits.getBit(3));
A2.setToValueOf(bits.getBit(2));
A1.setToValueOf(bits.getBit(1));
@@
-192,8
+191,7
@@
public class TestableAm2901Impl implements TestableAm2901
@Override
public void setReg_B(String val_4_bit)
{
@Override
public void setReg_B(String val_4_bit)
{
- // reverse because the BitVector.parse() expects the LSBit at the beginning and the MSBit at the end
- var bits = BitVector.parse(new StringBuilder(val_4_bit).reverse().toString());
+ var bits = BitVector.parseMSBFirst(val_4_bit);
B3.setToValueOf(bits.getBit(3));
B2.setToValueOf(bits.getBit(2));
B1.setToValueOf(bits.getBit(1));
B3.setToValueOf(bits.getBit(3));
B2.setToValueOf(bits.getBit(2));
B1.setToValueOf(bits.getBit(1));
@@
-215,8
+213,7
@@
public class TestableAm2901Impl implements TestableAm2901
@Override
public void setD(String val_4_bit)
{
@Override
public void setD(String val_4_bit)
{
- // reverse because the BitVector.parse() expects the LSBit at the beginning and the MSBit at the end
- var bits = BitVector.parse(new StringBuilder(val_4_bit).reverse().toString());
+ var bits = BitVector.parseMSBFirst(val_4_bit);
D4.setToValueOf(bits.getBit(3));
D3.setToValueOf(bits.getBit(2));
D2.setToValueOf(bits.getBit(1));
D4.setToValueOf(bits.getBit(3));
D3.setToValueOf(bits.getBit(2));
D2.setToValueOf(bits.getBit(1));
@@
-320,8
+317,7
@@
public class TestableAm2901Impl implements TestableAm2901
var y2 = Y3.getDisplayedValue();
var y1 = Y2.getDisplayedValue();
var y0 = Y1.getDisplayedValue();
var y2 = Y3.getDisplayedValue();
var y1 = Y2.getDisplayedValue();
var y0 = Y1.getDisplayedValue();
- // reverse because BitVector.toString() returns the LSBit at the beginning and the MSBit at the end
- return new StringBuilder(y0.concat(y1).concat(y2).concat(y3).toString()).reverse().toString();
+ return y0.concat(y1).concat(y2).concat(y3).toBitStringMSBFirst();
}
private void setField(String name, Object value)
}
private void setField(String name, Object value)
@@
-353,15
+349,13
@@
public class TestableAm2901Impl implements TestableAm2901
@Override
public void setDirectly(Register r, String val_4_bit)
{
@Override
public void setDirectly(Register r, String val_4_bit)
{
- // reverse because the BitVector.parse() expects the LSBit at the beginning and the MSBit at the end
- am2901.setHighLevelState(regToStateID(r), BitVector.parse(new StringBuilder(val_4_bit).reverse().toString()));
+ am2901.setHighLevelState(regToStateID(r), BitVector.parseMSBFirst(val_4_bit));
}
@Override
public String getDirectly(Register r)
{
}
@Override
public String getDirectly(Register r)
{
- // reverse because BitVector.toString() returns the LSBit at the beginning and the MSBit at the end
- return new StringBuilder(am2901.getHighLevelState(regToStateID(r)).toString()).reverse().toString();
+ return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toBitStringMSBFirst();
}
private static String regToStateID(Register r)
}
private static String regToStateID(Register r)
diff --git
a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java
b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java
index
73c1f06
..
2974278
100644
(file)
--- a/
net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java
+++ b/
net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java
@@
-122,7
+122,7
@@
public class LogicUICanvas extends ZoomableCanvas
if (radioBit.getSelection())
value = Bit.parse(valueString);
else if (radioBitVector.getSelection())
if (radioBit.getSelection())
value = Bit.parse(valueString);
else if (radioBitVector.getSelection())
- value = BitVector.parse
(new StringBuilder(valueString).reverse().toString()
);
+ value = BitVector.parse
MSBFirst(valueString
);
else
throw new RuntimeException("No value type selected");
target.setHighLevelState(stateIDText.getText(), value);
else
throw new RuntimeException("No value type selected");
target.setHighLevelState(stateIDText.getText(), value);