X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2FAssignableMicroInstructionMemory.java;h=623d632d13d645fb4a1f52bcdc05a92a046c6f3f;hb=0c404f876557865fb7361ca458ac90caf41afe19;hp=5fe753eb6175f9b544e0a4ede4448fd41594008c;hpb=6c32f347005a369359a68c09b7e9ac2f4a1eab0f;p=Mograsim.git diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMicroInstructionMemory.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMicroInstructionMemory.java index 5fe753eb..623d632d 100644 --- a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMicroInstructionMemory.java +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMicroInstructionMemory.java @@ -3,24 +3,29 @@ package net.mograsim.machine.mi; import java.util.HashSet; import java.util.Set; -import net.mograsim.machine.MemoryObserver; +import net.mograsim.machine.Memory.MemoryCellModifiedListener; -public class AssignableMicroInstructionMemory implements MicroInstructionMemory, MemoryObserver +public class AssignableMicroInstructionMemory implements MicroInstructionMemory, MemoryCellModifiedListener { - private Set observers = new HashSet<>(); - MicroInstructionMemory real = null; + + private Set observers = new HashSet<>(); + + private Set reassignmentListeners = new HashSet<>(); + private MicroInstructionMemory real = null; public AssignableMicroInstructionMemory(StandardMicroInstructionMemory standardMicroInstructionMemory) { real = standardMicroInstructionMemory; - real.registerObserver(this); + real.registerCellModifiedListener(this); } public void bind(MicroInstructionMemory real) { - this.real.deregisterObserver(this); + this.real.deregisterCellModifiedListener(this); this.real = real; - real.registerObserver(this); + real.registerCellModifiedListener(this); + notifyMemoryChanged(-1); + notifyMemoryReassigned(real); } @Override @@ -36,19 +41,18 @@ public class AssignableMicroInstructionMemory implements MicroInstructionMemory, } @Override - public void registerObserver(MemoryObserver ob) + public void registerCellModifiedListener(MemoryCellModifiedListener ob) { observers.add(ob); } @Override - public void deregisterObserver(MemoryObserver ob) + public void deregisterCellModifiedListener(MemoryCellModifiedListener ob) { observers.remove(ob); } - @Override - public void notifyObservers(long address) + private void notifyMemoryChanged(long address) { observers.forEach(o -> o.update(address)); } @@ -62,6 +66,26 @@ public class AssignableMicroInstructionMemory implements MicroInstructionMemory, @Override public void update(long address) { - notifyObservers(address); + notifyMemoryChanged(address); + } + + public void registerMemoryReassignedListener(MIMemoryReassignedListener listener) + { + reassignmentListeners.add(listener); + } + + public void deregisterMemoryReassignedListener(MIMemoryReassignedListener listener) + { + reassignmentListeners.remove(listener); + } + + private void notifyMemoryReassigned(MicroInstructionMemory newAssignee) + { + reassignmentListeners.forEach(l -> l.reassigned(newAssignee)); + } + + public static interface MIMemoryReassignedListener + { + public void reassigned(MicroInstructionMemory newAssignee); } }