Finished MPROM support. Fixes #10
[Mograsim.git] / plugins / net.mograsim.machine / src / net / mograsim / machine / GenericMemory.java
index 8052014..314a748 100644 (file)
@@ -5,16 +5,16 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
 
-public abstract class GenericMemory<T> implements Memory<T>
+public abstract class GenericMemory<T, D extends MemoryDefinition> implements Memory<T>
 {
        private final long minimalAddress, maximalAddress;
-       private final MemoryDefinition definition;
+       private final D definition;
        private final int pageSize = 64;
-       private Set<MemoryObserver> observers = new HashSet<>();
+       private Set<MemoryCellModifiedListener> observers = new HashSet<>();
 
        private HashMap<Long, Page> pages;
 
-       public GenericMemory(MemoryDefinition definition)
+       public GenericMemory(D definition)
        {
                super();
                this.definition = definition;
@@ -67,18 +67,17 @@ public abstract class GenericMemory<T> implements Memory<T>
 
        private class Page
        {
-               private Object[] memory;
+               private T[] memory;
 
+               @SuppressWarnings("unchecked")
                public Page()
                {
-                       memory = new Object[pageSize];
+                       memory = (T[]) new Object[pageSize];
                }
 
                public T getCell(int index)
                {
-                       @SuppressWarnings("unchecked")
-                       T data = (T) memory[index];
-                       return data;
+                       return memory[index];
                }
 
                public void setCell(int index, T data)
@@ -94,25 +93,24 @@ public abstract class GenericMemory<T> implements Memory<T>
        }
 
        @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)
+       protected void notifyObservers(long address)
        {
                observers.forEach(ob -> ob.update(address));
        }
 
        @Override
-       public MemoryDefinition getDefinition()
+       public D getDefinition()
        {
                return definition;
        }