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;
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)
}
@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;
}