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;fp=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2Fhighlevelstatehandlers%2Fstandard%2Fatomic%2FBitVectorSplittingAtomicHighLevelStateHandler.java;h=0000000000000000000000000000000000000000;hb=7d05144c25daa53e60fc9ed9fd503546a86567f8;hp=7ae29128c6c923b718b56f21a65ecde70a355fb4;hpb=8bed58cd47f4e53a0a83e066d38864aa6875502f;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 deleted file mode 100644 index 7ae29128..00000000 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java +++ /dev/null @@ -1,141 +0,0 @@ -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; -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.StandardHighLevelStateHandlerSnippetSuppliers; - -public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHighLevelStateHandler -{ - 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(SubmodelComponent component) - { - this(component, null); - } - - public BitVectorSplittingAtomicHighLevelStateHandler(SubmodelComponent component, - BitVectorSplittingAtomicHighLevelStateHandlerParams params) - { - 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); - } - - public void set(List targets, List lengthes) - { - setVectorParts(targets, lengthes); - } - - public void addVectorPart(String target, int length) - { - vectorPartTargets.add(target); - vectorPartLengthes.add(length); - this.length += length; - } - - public void clearVectorParts() - { - vectorPartTargets.clear(); - vectorPartLengthes.clear(); - length = 0; - } - - private void setVectorParts(List targets, List lengthes) - { - clearVectorParts(); - if (targets.size() != lengthes.size()) - throw new IllegalArgumentException("Targets list and lengthes list have different sizes"); - vectorPartTargets.addAll(targets); - vectorPartLengthes.addAll(lengthes); - length += lengthes.stream().mapToInt(Integer::intValue).sum(); - } - - public List getVectorPartTargets() - { - return vectorPartTargetsUnmodifiable; - } - - public List getVectorPartLenghtes() - { - return vectorPartLengthesUnmodifiable; - } - - @Override - public Object getHighLevelState() - { - BitVector result = BitVector.of(); - for (int partIndex = 0; partIndex < vectorPartTargets.size(); partIndex++) - { - Object subStateUncasted = component.getHighLevelState(vectorPartTargets.get(partIndex)); - BitVector vectorPart; - if (subStateUncasted instanceof Bit) - vectorPart = BitVector.of((Bit) subStateUncasted); - else - vectorPart = (BitVector) subStateUncasted; - if (vectorPart.length() != vectorPartLengthes.get(partIndex)) - throw new IllegalArgumentException( - "Incorrect vector part length: " + vectorPart.length() + "; expected " + vectorPartLengthes.get(partIndex)); - result = result.concat(vectorPart); - } - return result; - } - - @Override - public void setHighLevelState(Object newState) - { - BitVector newStateCasted = (BitVector) newState; - if (newStateCasted.length() != length) - throw new IllegalArgumentException("Incorrect vector length: " + newStateCasted.length() + "; expected " + length); - for (int partIndex = 0, bitIndex = 0; partIndex < vectorPartTargets.size(); partIndex++) - { - int vectorPartLength = vectorPartLengthes.get(partIndex); - BitVector vectorPart = newStateCasted.subVector(bitIndex, bitIndex + vectorPartLength); - component.setHighLevelState(vectorPartTargets.get(partIndex), vectorPart); - bitIndex += vectorPartLength; - } - } - - @Override - public String getIDForSerializing(IdentifyParams idParams) - { - return "bitVectorSplitting"; - } - - @Override - public BitVectorSplittingAtomicHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams) - { - BitVectorSplittingAtomicHighLevelStateHandlerParams params = new BitVectorSplittingAtomicHighLevelStateHandlerParams(); - params.vectorPartTargets = new ArrayList<>(vectorPartTargets); - params.vectorPartLengthes = new ArrayList<>(vectorPartLengthes); - return params; - } - - public static class BitVectorSplittingAtomicHighLevelStateHandlerParams - { - public List vectorPartTargets; - public List vectorPartLengthes; - } - - static - { - StandardHighLevelStateHandlerSnippetSuppliers.atomicHandlerSupplier - .setSnippetSupplier(BitVectorSplittingAtomicHighLevelStateHandler.class.getCanonicalName(), SnippetDefinintion.create( - BitVectorSplittingAtomicHighLevelStateHandlerParams.class, BitVectorSplittingAtomicHighLevelStateHandler::new)); - } -} \ No newline at end of file