1 package net.mograsim.machine.standard.memory;
3 import java.math.BigInteger;
4 import java.util.HashSet;
7 import net.mograsim.logic.core.types.BitVector;
8 import net.mograsim.machine.MainMemory;
9 import net.mograsim.machine.MainMemoryDefinition;
10 import net.mograsim.machine.Memory.MemoryCellModifiedListener;
12 public class AssignableMainMemory implements MainMemory, MemoryCellModifiedListener
14 private Set<MemoryCellModifiedListener> observers = new HashSet<>();
15 private Set<MainMemoryReassignedListener> reassignmentListeners = new HashSet<>();
16 private MainMemory real = null;
18 public AssignableMainMemory(MainMemory mainMemory)
21 real.registerCellModifiedListener(this);
24 public void bind(MainMemory real)
26 this.real.deregisterCellModifiedListener(this);
28 real.registerCellModifiedListener(this);
29 notifyMemoryChanged(-1);
30 notifyMemoryReassigned(real);
34 public BitVector getCell(long address)
36 return real.getCell(address);
40 public BigInteger getCellAsBigInteger(long address)
42 return real.getCellAsBigInteger(address);
46 public void setCell(long address, BitVector data)
48 real.setCell(address, data);
52 public void setCellAsBigInteger(long address, BigInteger word)
54 real.setCellAsBigInteger(address, word);
58 public void registerCellModifiedListener(MemoryCellModifiedListener ob)
64 public void deregisterCellModifiedListener(MemoryCellModifiedListener ob)
69 private void notifyMemoryChanged(long address)
71 observers.forEach(o -> o.update(address));
75 public MainMemoryDefinition getDefinition()
77 return real.getDefinition();
81 public void update(long address)
83 notifyMemoryChanged(address);
86 public void registerMemoryReassignedListener(MainMemoryReassignedListener listener)
88 reassignmentListeners.add(listener);
91 public void deregisterMemoryReassignedListener(MainMemoryReassignedListener listener)
93 reassignmentListeners.remove(listener);
96 private void notifyMemoryReassigned(MainMemory newAssignee)
98 reassignmentListeners.forEach(l -> l.reassigned(newAssignee));
101 public static interface MainMemoryReassignedListener
103 public void reassigned(MainMemory newAssignee);