X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Ftables%2Fmemory%2FMemoryTableContentProvider.java;h=2197125766d4f78c400c1b21c830fedf24a251e2;hb=9719354a14003c6da81fc6237b2d940612c1dc0f;hp=95d18358fa1fdf1566db2a0f5ce9053f3b454596;hpb=5d7d8cbfe74873cffa0682d66e8812b58c2b47f9;p=Mograsim.git diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java index 95d18358..21971257 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java @@ -5,34 +5,36 @@ import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Display; -import net.mograsim.machine.MainMemory; -import net.mograsim.machine.MemoryObserver; +import net.mograsim.machine.BitVectorMemory; +import net.mograsim.machine.BitVectorMemoryDefinition; +import net.mograsim.machine.Memory.MemoryCellModifiedListener; -public class MemoryTableContentProvider implements ILazyContentProvider, MemoryObserver +public class MemoryTableContentProvider implements ILazyContentProvider, MemoryCellModifiedListener { - private long lower; + private long lower, upper; private TableViewer viewer; - private final static int limit = 10_000; - private int amount = 0; - private MainMemory memory; + public final static int MAX_VISIBLE_ROWS = 1_000; + private BitVectorMemory memory; - public void setLowerBound(long lower) + public void setBounds(long lower, long upper) { if (memory != null) - this.lower = Long.min(memory.getDefinition().getMaximalAddress(), Long.max(memory.getDefinition().getMinimalAddress(), lower)); - else + { + BitVectorMemoryDefinition definition = memory.getDefinition(); + this.lower = Long.min(definition.getMaximalAddress(), Long.max(definition.getMinimalAddress(), lower)); + this.upper = Long.max(this.lower, Long.min(definition.getMaximalAddress(), upper)); + } else + { this.lower = lower; + this.upper = Long.max(this.lower, upper); + } updateItemCount(); } public void updateItemCount() { - if (memory != null) - { - long size = memory.getDefinition().getMaximalAddress() - lower; - viewer.setItemCount(size > amount ? amount : (int) size); - } else - viewer.setItemCount(0); + if (viewer != null) + viewer.setItemCount(getAmount()); } public long getLowerBound() @@ -40,35 +42,37 @@ public class MemoryTableContentProvider implements ILazyContentProvider, MemoryO return lower; } - public void setAmount(int amount) + public long getUpperBound() { - this.amount = Integer.min(amount, limit); - updateItemCount(); + return upper; } public int getAmount() { - return amount; + return (int) (upper - lower + 1); } @Override public void updateElement(int index) { - long address = lower + index; - if (address <= memory.getDefinition().getMaximalAddress()) - viewer.replace(new MemoryTableRow(address, memory), index); + if (index < getAmount()) + { + long address = lower + index; + if (address <= memory.getDefinition().getMaximalAddress()) + viewer.replace(new MemoryTableRow(address, memory), index); + } } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { this.viewer = (TableViewer) viewer; - this.memory = (MainMemory) newInput; + this.memory = (BitVectorMemory) newInput; if (oldInput != null) - ((MainMemory) oldInput).deregisterObserver(this); + ((BitVectorMemory) oldInput).deregisterCellModifiedListener(this); if (memory != null) - memory.registerObserver(this); - setLowerBound(0L); + memory.registerCellModifiedListener(this); + setBounds(0, MAX_VISIBLE_ROWS); } @Override