projects
/
Mograsim.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e7c5111
)
Made MicroInstructions immutable
author
Fabian Stemmler
<stemmler@in.tum.de>
Mon, 16 Sep 2019 15:35:27 +0000
(17:35 +0200)
committer
Fabian Stemmler
<stemmler@in.tum.de>
Mon, 16 Sep 2019 15:43:53 +0000
(17:43 +0200)
13 files changed:
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java
patch
|
blob
|
history
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java
patch
|
blob
|
history
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemory.java
patch
|
blob
|
history
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java
patch
|
blob
|
history
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstruction.java
patch
|
blob
|
history
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java
patch
|
blob
|
history
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/BooleanEditingSupport.java
patch
|
blob
|
history
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableContentProvider.java
patch
|
blob
|
history
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableRow.java
patch
|
blob
|
history
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerColumnLabelProvider.java
patch
|
blob
|
history
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerEditingSupport.java
patch
|
blob
|
history
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/MnemonicEditingSupport.java
patch
|
blob
|
history
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/ParameterLabelProvider.java
patch
|
blob
|
history
diff --git
a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java
b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java
index
d45c277
..
28f8800
100644
(file)
--- a/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java
+++ b/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java
@@
-9,16
+9,16
@@
public interface MicroInstruction
public MicroInstructionParameter getParameter(int index);
public MicroInstructionParameter getParameter(int index);
- public
void setParameter(int index, MicroInstructionParameter param
);
+ public
MicroInstructionParameter[] getParameters(
);
/**
* @return The amount of {@link Mnemonic}s, the instruction is composed of
*/
public int getSize();
/**
* @return The amount of {@link Mnemonic}s, the instruction is composed of
*/
public int getSize();
- public static MicroInstruction create(
Runnable updateCallback,
MicroInstructionParameter... parameters)
+ public static MicroInstruction create(MicroInstructionParameter... parameters)
{
{
- return new StandardMicroInstruction(
updateCallback,
parameters);
+ return new StandardMicroInstruction(parameters);
}
default BitVector toBitVector()
}
default BitVector toBitVector()
diff --git
a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java
b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java
index
6625fa6
..
e5e3448
100644
(file)
--- a/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java
+++ b/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java
@@
-35,7
+35,7
@@
public interface MicroInstructionDefinition
return Arrays.stream(getParameterClassifications()).mapToInt(e -> e.getExpectedBits()).reduce(0, (a, b) -> a + b);
}
return Arrays.stream(getParameterClassifications()).mapToInt(e -> e.getExpectedBits()).reduce(0, (a, b) -> a + b);
}
- public default MicroInstruction createDefaultInstruction(
Runnable updateCallback
)
+ public default MicroInstruction createDefaultInstruction()
{
int size = size();
MicroInstructionParameter[] params = new MicroInstructionParameter[size];
{
int size = size();
MicroInstructionParameter[] params = new MicroInstructionParameter[size];
@@
-45,7
+45,7
@@
public interface MicroInstructionDefinition
ParameterClassification classification = classes[i];
params[i] = classification.getDefault();
}
ParameterClassification classification = classes[i];
params[i] = classification.getDefault();
}
- return new StandardMicroInstruction(
updateCallback,
params);
+ return new StandardMicroInstruction(params);
}
public Optional<String> getParameterDescription(int index);
}
public Optional<String> getParameterDescription(int index);
diff --git
a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemory.java
b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemory.java
index
5d4fac6
..
6409f78
100644
(file)
--- a/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemory.java
+++ b/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemory.java
@@
-4,5
+4,6
@@
import net.mograsim.machine.Memory;
public interface MicroInstructionMemory extends Memory<MicroInstruction>
{
public interface MicroInstructionMemory extends Memory<MicroInstruction>
{
+ @Override
public MicroInstructionMemoryDefinition getDefinition();
}
public MicroInstructionMemoryDefinition getDefinition();
}
diff --git
a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java
b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java
index
d049e37
..
1aa518d
100644
(file)
--- a/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java
+++ b/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java
@@
-35,8
+35,7
@@
public class MicroInstructionMemoryParser
{
for (; i <= maxAddr && input.ready() && !"".equals((line = input.readLine())); i++)
{
{
for (; i <= maxAddr && input.ready() && !"".equals((line = input.readLine())); i++)
{
- long iFinal = i;
- memory.setCell(i, parse(() -> memory.notifyObservers(iFinal), miDef, line));
+ memory.setCell(i, parse(miDef, line));
}
}
catch (IOException e)
}
}
catch (IOException e)
@@
-46,12
+45,11
@@
public class MicroInstructionMemoryParser
for (; i <= maxAddr; i++)
{
for (; i <= maxAddr; i++)
{
- long iFinal = i;
- memory.setCell(i, miDef.createDefaultInstruction(() -> memory.notifyObservers(iFinal)));
+ memory.setCell(i, miDef.createDefaultInstruction());
}
}
}
}
- public static MicroInstruction parse(
Runnable updateCallback,
MicroInstructionDefinition definition, String toParse)
+ public static MicroInstruction parse(MicroInstructionDefinition definition, String toParse)
{
int size = definition.size();
String[] strings = toParse.split(",");
{
int size = definition.size();
String[] strings = toParse.split(",");
@@
-65,7
+63,7
@@
public class MicroInstructionMemoryParser
{
params[i] = classes[i].parse(strings[i]);
}
{
params[i] = classes[i].parse(strings[i]);
}
- return new StandardMicroInstruction(
updateCallback,
params);
+ return new StandardMicroInstruction(params);
}
catch (Exception e)
{
}
catch (Exception e)
{
diff --git
a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstruction.java
b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstruction.java
index
c565432
..
00acd1a
100644
(file)
--- a/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstruction.java
+++ b/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstruction.java
@@
-4,13
+4,11
@@
import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
class StandardMicroInstruction implements MicroInstruction
{
class StandardMicroInstruction implements MicroInstruction
{
- private final Runnable updateCallback;
private MicroInstructionParameter[] parameters;
private MicroInstructionParameter[] parameters;
- StandardMicroInstruction(
Runnable updateCallback,
MicroInstructionParameter... parameters)
+ StandardMicroInstruction(MicroInstructionParameter... parameters)
{
{
- this.updateCallback = updateCallback;
- this.parameters = parameters;
+ this.parameters = parameters.clone();
}
/**
}
/**
@@
-28,14
+26,10
@@
class StandardMicroInstruction implements MicroInstruction
return parameters.length;
}
return parameters.length;
}
- /**
- * @throws IndexOutOfBoundsException
- */
@Override
@Override
- public
void setParameter(int index, MicroInstructionParameter param
)
+ public
MicroInstructionParameter[] getParameters(
)
{
{
- parameters[index] = param;
- updateCallback.run();
+ return parameters.clone();
}
}
}
}
diff --git
a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java
b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java
index
519c9b3
..
7ef53d9
100644
(file)
--- a/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java
+++ b/
plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java
@@
-30,8
+30,7
@@
public class StandardMicroInstructionMemory implements MicroInstructionMemory
int translatedAddress = translate(address);
MicroInstruction actual = data[translatedAddress];
if (actual == null)
int translatedAddress = translate(address);
MicroInstruction actual = data[translatedAddress];
if (actual == null)
- actual = data[translatedAddress] = definition.getMicroInstructionDefinition()
- .createDefaultInstruction(() -> notifyObservers(address));
+ actual = data[translatedAddress] = definition.getMicroInstructionDefinition().createDefaultInstruction();
return actual;
}
return actual;
}
diff --git
a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/BooleanEditingSupport.java
b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/BooleanEditingSupport.java
index
c3318b5
..
fa7a918
100644
(file)
--- a/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/BooleanEditingSupport.java
+++ b/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/BooleanEditingSupport.java
@@
-6,8
+6,10
@@
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import net.mograsim.logic.core.types.Bit;
import org.eclipse.jface.viewers.TableViewer;
import net.mograsim.logic.core.types.Bit;
+import net.mograsim.machine.mi.MicroInstruction;
import net.mograsim.machine.mi.MicroInstructionDefinition;
import net.mograsim.machine.mi.parameters.BooleanClassification;
import net.mograsim.machine.mi.MicroInstructionDefinition;
import net.mograsim.machine.mi.parameters.BooleanClassification;
+import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
public class BooleanEditingSupport extends EditingSupport
{
public class BooleanEditingSupport extends EditingSupport
{
@@
-40,13
+42,17
@@
public class BooleanEditingSupport extends EditingSupport
@Override
protected Object getValue(Object element)
{
@Override
protected Object getValue(Object element)
{
- return ((InstructionTableRow) element).data.getParameter(index).getValue().getMSBit(0).equals(Bit.ONE);
+ InstructionTableRow row = (InstructionTableRow) element;
+ return row.data.getCell(row.address).getParameter(index).getValue().getMSBit(0).equals(Bit.ONE);
}
@Override
protected void setValue(Object element, Object value)
{
}
@Override
protected void setValue(Object element, Object value)
{
- ((InstructionTableRow) element).data.setParameter(index, boolClass.get((Boolean) value));
+ InstructionTableRow row = (InstructionTableRow) element;
+ MicroInstructionParameter[] params = row.data.getCell(row.address).getParameters();
+ params[index] = boolClass.get((Boolean) value);
+ row.data.setCell(row.address, MicroInstruction.create(params));
viewer.update(element, null);
}
viewer.update(element, null);
}
diff --git
a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableContentProvider.java
b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableContentProvider.java
index
b8021b7
..
6519b62
100644
(file)
--- a/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableContentProvider.java
+++ b/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableContentProvider.java
@@
-16,7
+16,7
@@
public class InstructionTableContentProvider implements ILazyContentProvider
public void updateElement(int index)
{
long address = memory.getDefinition().getMinimalAddress() + index;
public void updateElement(int index)
{
long address = memory.getDefinition().getMinimalAddress() + index;
- viewer.replace(new InstructionTableRow(address, memory
.getCell(address)
), index);
+ viewer.replace(new InstructionTableRow(address, memory), index);
}
@Override
}
@Override
diff --git
a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableRow.java
b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableRow.java
index
677d166
..
7cef835
100644
(file)
--- a/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableRow.java
+++ b/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableRow.java
@@
-1,11
+1,11
@@
package net.mograsim.plugin.tables.mi;
package net.mograsim.plugin.tables.mi;
-import net.mograsim.machine.mi.MicroInstruction;
+import net.mograsim.machine.mi.MicroInstruction
Memory
;
import net.mograsim.plugin.tables.TableRow;
import net.mograsim.plugin.tables.TableRow;
-public class InstructionTableRow extends TableRow<MicroInstruction>
+public class InstructionTableRow extends TableRow<MicroInstruction
Memory
>
{
{
- public InstructionTableRow(long address, MicroInstruction data)
+ public InstructionTableRow(long address, MicroInstruction
Memory
data)
{
super(address, data);
}
{
super(address, data);
}
diff --git
a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerColumnLabelProvider.java
b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerColumnLabelProvider.java
index
ce61581
..
7134de1
100644
(file)
--- a/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerColumnLabelProvider.java
+++ b/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerColumnLabelProvider.java
@@
-19,7
+19,8
@@
public class IntegerColumnLabelProvider extends NumberColumnLabelProvider
@Override
public BigInteger getAsBigInteger(Object element)
{
@Override
public BigInteger getAsBigInteger(Object element)
{
- return ((IntegerImmediate) ((InstructionTableRow) element).data.getParameter(index)).getValueAsBigInteger();
+ InstructionTableRow row = (InstructionTableRow) element;
+ return ((IntegerImmediate) row.data.getCell(row.address).getParameter(index)).getValueAsBigInteger();
}
}
}
}
diff --git
a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerEditingSupport.java
b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerEditingSupport.java
index
d3b48ce
..
4f5b616
100644
(file)
--- a/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerEditingSupport.java
+++ b/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerEditingSupport.java
@@
-4,9
+4,11
@@
import java.math.BigInteger;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewer;
+import net.mograsim.machine.mi.MicroInstruction;
import net.mograsim.machine.mi.MicroInstructionDefinition;
import net.mograsim.machine.mi.parameters.IntegerClassification;
import net.mograsim.machine.mi.parameters.IntegerImmediate;
import net.mograsim.machine.mi.MicroInstructionDefinition;
import net.mograsim.machine.mi.parameters.IntegerClassification;
import net.mograsim.machine.mi.parameters.IntegerImmediate;
+import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
import net.mograsim.plugin.tables.DisplaySettings;
import net.mograsim.plugin.tables.NumberCellEditingSupport;
import net.mograsim.plugin.tables.DisplaySettings;
import net.mograsim.plugin.tables.NumberCellEditingSupport;
@@
-29,7
+31,9
@@
public class IntegerEditingSupport extends NumberCellEditingSupport
protected void setAsBigInteger(Object element, BigInteger value)
{
InstructionTableRow row = ((InstructionTableRow) element);
protected void setAsBigInteger(Object element, BigInteger value)
{
InstructionTableRow row = ((InstructionTableRow) element);
- row.data.setParameter(index, new IntegerImmediate(value, classification.getExpectedBits()));
+ MicroInstructionParameter[] params = row.data.getCell(row.address).getParameters();
+ params[index] = new IntegerImmediate(value, classification.getExpectedBits());
+ row.data.setCell(row.address, MicroInstruction.create(params));
provider.update(row.address);
// viewer.update(element, null); Does not do anything for some reason
}
provider.update(row.address);
// viewer.update(element, null); Does not do anything for some reason
}
@@
-37,7
+41,8
@@
public class IntegerEditingSupport extends NumberCellEditingSupport
@Override
protected BigInteger getAsBigInteger(Object element)
{
@Override
protected BigInteger getAsBigInteger(Object element)
{
- return ((IntegerImmediate) ((InstructionTableRow) element).data.getParameter(index)).getValueAsBigInteger();
+ InstructionTableRow row = ((InstructionTableRow) element);
+ return ((IntegerImmediate) row.data.getCell(row.address).getParameter(index)).getValueAsBigInteger();
}
}
}
}
diff --git
a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/MnemonicEditingSupport.java
b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/MnemonicEditingSupport.java
index
765e434
..
1140e68
100644
(file)
--- a/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/MnemonicEditingSupport.java
+++ b/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/MnemonicEditingSupport.java
@@
-6,7
+6,9
@@
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
+import net.mograsim.machine.mi.MicroInstruction;
import net.mograsim.machine.mi.MicroInstructionDefinition;
import net.mograsim.machine.mi.MicroInstructionDefinition;
+import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
import net.mograsim.machine.mi.parameters.Mnemonic;
import net.mograsim.machine.mi.parameters.MnemonicFamily;
import net.mograsim.machine.mi.parameters.Mnemonic;
import net.mograsim.machine.mi.parameters.MnemonicFamily;
@@
-43,14
+45,17
@@
public class MnemonicEditingSupport extends EditingSupport
@Override
protected Object getValue(Object element)
{
@Override
protected Object getValue(Object element)
{
- return ((Mnemonic) ((InstructionTableRow) element).data.getParameter(index)).ordinal();
+ InstructionTableRow row = ((InstructionTableRow) element);
+ return ((Mnemonic) row.data.getCell(row.address).getParameter(index)).ordinal();
}
@Override
protected void setValue(Object element, Object value)
{
InstructionTableRow row = ((InstructionTableRow) element);
}
@Override
protected void setValue(Object element, Object value)
{
InstructionTableRow row = ((InstructionTableRow) element);
- row.data.setParameter(index, family.get((Integer) value));
+ MicroInstructionParameter[] params = row.data.getCell(row.address).getParameters();
+ params[index] = family.get((Integer) value);
+ row.data.setCell(row.address, MicroInstruction.create(params));
provider.update(row.address);
}
provider.update(row.address);
}
diff --git
a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/ParameterLabelProvider.java
b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/ParameterLabelProvider.java
index
5e06370
..
46e3ea7
100644
(file)
--- a/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/ParameterLabelProvider.java
+++ b/
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/ParameterLabelProvider.java
@@
-15,6
+15,7
@@
public class ParameterLabelProvider extends ColumnLabelProvider
@Override
public String getText(Object element)
{
@Override
public String getText(Object element)
{
- return ((InstructionTableRow) element).data.getParameter(index).toString();
+ InstructionTableRow row = (InstructionTableRow) element;
+ return row.data.getCell(row.address).getParameter(index).toString();
}
}
}
}