X-Git-Url: https://mograsim.net/gitweb/?p=Mograsim.git;a=blobdiff_plain;f=plugins%2Fnet.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2FAssignableMPROM.java;h=39cd679f0fad830104320a3c55e7bf2f03d0aeec;hp=04050130e5867f25c7575534d368080d9174a84a;hb=b5d55c59d7069171bd928e4a945d9185ee4bc2b0;hpb=f098cd47d06be0cc654532a5fad0e5e89f0ef93c diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMPROM.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMPROM.java index 04050130..39cd679f 100644 --- a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMPROM.java +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMPROM.java @@ -1,99 +1,17 @@ package net.mograsim.machine.mi; -import java.math.BigInteger; -import java.util.HashSet; -import java.util.Set; +import net.mograsim.machine.standard.memory.AbstractAssignableBitVectorMemory; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.machine.Memory.MemoryCellModifiedListener; - -public class AssignableMPROM implements MPROM, MemoryCellModifiedListener +public class AssignableMPROM extends AbstractAssignableBitVectorMemory implements MPROM { - - private Set observers = new HashSet<>(); - - private Set reassignmentListeners = new HashSet<>(); - private MPROM real = null; - - public AssignableMPROM(MPROM standardMPROM) - { - real = standardMPROM; - real.registerCellModifiedListener(this); - } - - public void bind(MPROM real) - { - this.real.deregisterCellModifiedListener(this); - this.real = real; - real.registerCellModifiedListener(this); - notifyMemoryChanged(-1); - notifyMemoryReassigned(real); - } - - @Override - public BitVector getCell(long address) - { - return real.getCell(address); - } - - @Override - public void setCell(long address, BitVector data) - { - real.setCell(address, data); - } - - @Override - public BigInteger getCellAsBigInteger(long address) - { - return real.getCellAsBigInteger(address); - } - - @Override - public void registerCellModifiedListener(MemoryCellModifiedListener ob) + public AssignableMPROM(MPROM memory) { - observers.add(ob); - } - - @Override - public void deregisterCellModifiedListener(MemoryCellModifiedListener ob) - { - observers.remove(ob); - } - - private void notifyMemoryChanged(long address) - { - observers.forEach(o -> o.update(address)); + super(memory); } @Override public MPROMDefinition getDefinition() { - return real.getDefinition(); - } - - @Override - public void update(long address) - { - notifyMemoryChanged(address); - } - - public void registerMemoryReassignedListener(MPROMReassignedListener listener) - { - reassignmentListeners.add(listener); - } - - public void deregisterMemoryReassignedListener(MPROMReassignedListener listener) - { - reassignmentListeners.remove(listener); - } - - private void notifyMemoryReassigned(MPROM newAssignee) - { - reassignmentListeners.forEach(l -> l.reassigned(newAssignee)); - } - - public static interface MPROMReassignedListener - { - public void reassigned(MPROM newAssignee); + return getReal().getDefinition(); } }