X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2Fhighlevelstatehandlers%2Fstandard%2Fatomic%2FBitVectorSplittingAtomicHighLevelStateHandler.java;h=7ae29128c6c923b718b56f21a65ecde70a355fb4;hb=8bed58cd47f4e53a0a83e066d38864aa6875502f;hp=b5630a52906f6a84ab938f079ce6c9a08abdf9ac;hpb=b32414f8406634aca730d724a011023c0da8bf22;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java index b5630a52..7ae29128 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java @@ -1,6 +1,7 @@ package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import net.mograsim.logic.core.types.Bit; @@ -8,27 +9,30 @@ import net.mograsim.logic.core.types.BitVector; import net.mograsim.logic.model.model.components.submodels.SubmodelComponent; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.snippets.SnippetDefinintion; -import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.HighLevelStateHandlerContext; import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandlerSnippetSuppliers; public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHighLevelStateHandler { - private SubmodelComponent component; + private final SubmodelComponent component; private final List vectorPartTargets; + private final List vectorPartTargetsUnmodifiable; private final List vectorPartLengthes; + private final List vectorPartLengthesUnmodifiable; private int length; - public BitVectorSplittingAtomicHighLevelStateHandler(HighLevelStateHandlerContext context) + public BitVectorSplittingAtomicHighLevelStateHandler(SubmodelComponent component) { - this(context, null); + this(component, null); } - public BitVectorSplittingAtomicHighLevelStateHandler(HighLevelStateHandlerContext context, + public BitVectorSplittingAtomicHighLevelStateHandler(SubmodelComponent component, BitVectorSplittingAtomicHighLevelStateHandlerParams params) { - this.component = context.component; + this.component = component; this.vectorPartTargets = new ArrayList<>(); + this.vectorPartTargetsUnmodifiable = Collections.unmodifiableList(vectorPartTargets); this.vectorPartLengthes = new ArrayList<>(); + this.vectorPartLengthesUnmodifiable = Collections.unmodifiableList(vectorPartLengthes); if (params != null) setVectorParts(params.vectorPartTargets, params.vectorPartLengthes); } @@ -62,6 +66,16 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh length += lengthes.stream().mapToInt(Integer::intValue).sum(); } + public List getVectorPartTargets() + { + return vectorPartTargetsUnmodifiable; + } + + public List getVectorPartLenghtes() + { + return vectorPartLengthesUnmodifiable; + } + @Override public Object getHighLevelState() { @@ -77,7 +91,7 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh if (vectorPart.length() != vectorPartLengthes.get(partIndex)) throw new IllegalArgumentException( "Incorrect vector part length: " + vectorPart.length() + "; expected " + vectorPartLengthes.get(partIndex)); - result = vectorPart.concat(result); + result = result.concat(vectorPart); } return result; } @@ -88,7 +102,7 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh BitVector newStateCasted = (BitVector) newState; if (newStateCasted.length() != length) throw new IllegalArgumentException("Incorrect vector length: " + newStateCasted.length() + "; expected " + length); - for (int partIndex = vectorPartTargets.size() - 1, bitIndex = 0; partIndex >= 0; partIndex--) + for (int partIndex = 0, bitIndex = 0; partIndex < vectorPartTargets.size(); partIndex++) { int vectorPartLength = vectorPartLengthes.get(partIndex); BitVector vectorPart = newStateCasted.subVector(bitIndex, bitIndex + vectorPartLength);