ActiveInstructionChangedListener moved to Machine and updated
[Mograsim.git] / plugins / net.mograsim.machine / src / net / mograsim / machine / mi / AssignableMicroInstructionMemory.java
index b0ab5a4..623d632 100644 (file)
@@ -3,25 +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<MemoryObserver> observers = new HashSet<>();
-       MicroInstructionMemory real = null;
+
+       private Set<MemoryCellModifiedListener> observers = new HashSet<>();
+
+       private Set<MIMemoryReassignedListener> 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);
-               notifyObservers(-1);
+               real.registerCellModifiedListener(this);
+               notifyMemoryChanged(-1);
+               notifyMemoryReassigned(real);
        }
 
        @Override
@@ -37,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));
        }
@@ -63,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);
        }
 }