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=3d67c9dcd4ccdbc18b42555017001f3a175dd8a1;hpb=3997a9bdace864fab412a690533d5151161053b9;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 3d67c9dc..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.BitVectorMemory; +import net.mograsim.machine.BitVectorMemoryDefinition; import net.mograsim.machine.Memory.MemoryCellModifiedListener; 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,21 +42,20 @@ public class MemoryTableContentProvider implements ILazyContentProvider, MemoryC 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) { - if (index < amount) + if (index < getAmount()) { long address = lower + index; if (address <= memory.getDefinition().getMaximalAddress()) @@ -66,12 +67,12 @@ public class MemoryTableContentProvider implements ILazyContentProvider, MemoryC 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).deregisterCellModifiedListener(this); + ((BitVectorMemory) oldInput).deregisterCellModifiedListener(this); if (memory != null) memory.registerCellModifiedListener(this); - setLowerBound(0L); + setBounds(0, MAX_VISIBLE_ROWS); } @Override