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;
private final List<Integer> vectorPartLengthesUnmodifiable;
private int length;
+ private final Map<Consumer<Object>, Consumer<Object>> targetListeners;
+
public BitVectorSplittingAtomicHighLevelStateHandler(SubmodelComponent component)
{
this(component, null);
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);
}
}
}
+ @Override
+ public void addListener(Consumer<Object> stateChanged)
+ {
+ if (targetListeners.get(stateChanged) != null)
+ // this listener is/was already registered
+ return;
+
+ Consumer<Object> targetListener = o -> stateChanged.accept(getHighLevelState());
+ targetListeners.put(stateChanged, targetListener);
+
+ for (String target : vectorPartTargets)
+ component.addHighLevelStateListener(target, targetListener);
+ }
+
+ @Override
+ public void removeListener(Consumer<Object> stateChanged)
+ {
+ Consumer<Object> 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)
{