X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2Fhighlevelstatehandlers%2Fstandard%2Fatomic%2FBitVectorSplittingAtomicHighLevelStateHandler.java;h=4289808dcd2a04e698d886680da169dd5e781b9c;hb=69ec19d54ceb6d5abbb8b4faa55284af22174859;hp=7ae29128c6c923b718b56f21a65ecde70a355fb4;hpb=7d05144c25daa53e60fc9ed9fd503546a86567f8;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java index 7ae29128..4289808d 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java @@ -2,7 +2,10 @@ package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.function.Consumer; import net.mograsim.logic.core.types.Bit; import net.mograsim.logic.core.types.BitVector; @@ -20,6 +23,8 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh private final List vectorPartLengthesUnmodifiable; private int length; + private final Map, Consumer> targetListeners; + public BitVectorSplittingAtomicHighLevelStateHandler(SubmodelComponent component) { this(component, null); @@ -33,6 +38,9 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh this.vectorPartTargetsUnmodifiable = Collections.unmodifiableList(vectorPartTargets); this.vectorPartLengthes = new ArrayList<>(); this.vectorPartLengthesUnmodifiable = Collections.unmodifiableList(vectorPartLengthes); + + this.targetListeners = new HashMap<>(); + if (params != null) setVectorParts(params.vectorPartTargets, params.vectorPartLengthes); } @@ -111,6 +119,32 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh } } + @Override + public void addListener(Consumer stateChanged) + { + if (targetListeners.get(stateChanged) != null) + // this listener is/was already registered + return; + + Consumer targetListener = o -> stateChanged.accept(getHighLevelState()); + targetListeners.put(stateChanged, targetListener); + + for (String target : vectorPartTargets) + component.addHighLevelStateListener(target, targetListener); + } + + @Override + public void removeListener(Consumer stateChanged) + { + Consumer targetListener = targetListeners.get(stateChanged); + if (targetListener == null) + // this listener is/was not registered + return; + + for (String target : vectorPartTargets) + component.removeHighLevelStateListener(target, targetListener); + } + @Override public String getIDForSerializing(IdentifyParams idParams) {