add TreeMap facade
This commit is contained in:
parent
a077389b83
commit
c41dd646da
|
@ -29,6 +29,10 @@
|
||||||
id="org.eclipse.emf.common"
|
id="org.eclipse.emf.common"
|
||||||
version="0.0.0"/>
|
version="0.0.0"/>
|
||||||
|
|
||||||
|
<includes
|
||||||
|
id="org.eclipse.collections.feature"
|
||||||
|
version="0.0.0"/>
|
||||||
|
|
||||||
<requires>
|
<requires>
|
||||||
<import plugin="org.eclipse.core.expressions" version="3.2.0" match="compatible"/>
|
<import plugin="org.eclipse.core.expressions" version="3.2.0" match="compatible"/>
|
||||||
<import plugin="org.eclipse.core.filesystem" version="1.3.0" match="compatible"/>
|
<import plugin="org.eclipse.core.filesystem" version="1.3.0" match="compatible"/>
|
||||||
|
|
|
@ -14,12 +14,12 @@ import java.sql.SQLException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.NavigableMap;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.EventKind;
|
import com.minres.scviewer.database.EventKind;
|
||||||
import com.minres.scviewer.database.HierNode;
|
import com.minres.scviewer.database.HierNode;
|
||||||
import com.minres.scviewer.database.IEvent;
|
import com.minres.scviewer.database.IEvent;
|
||||||
|
import com.minres.scviewer.database.IEventList;
|
||||||
|
import com.minres.scviewer.database.EventList;
|
||||||
import com.minres.scviewer.database.IWaveform;
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.RelationType;
|
import com.minres.scviewer.database.RelationType;
|
||||||
import com.minres.scviewer.database.RelationTypeFactory;
|
import com.minres.scviewer.database.RelationTypeFactory;
|
||||||
|
@ -35,7 +35,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
||||||
|
|
||||||
private Integer maxConcurrency;
|
private Integer maxConcurrency;
|
||||||
|
|
||||||
private TreeMap<Long, IEvent[]> events;
|
private IEventList<Long, IEvent[]> events;
|
||||||
|
|
||||||
private List<RelationType> usedRelationsList;
|
private List<RelationType> usedRelationsList;
|
||||||
|
|
||||||
|
@ -71,9 +71,9 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NavigableMap<Long, IEvent[]> getEvents(){
|
public IEventList<Long, IEvent[]> getEvents(){
|
||||||
if(events==null){
|
if(events==null){
|
||||||
events=new TreeMap<>();
|
events=new EventList<>();
|
||||||
for(Entry<Integer, ITx> entry:getTransactions().entrySet()){
|
for(Entry<Integer, ITx> entry:getTransactions().entrySet()){
|
||||||
putEvent(new TxEvent(EventKind.BEGIN, entry.getValue()));
|
putEvent(new TxEvent(EventKind.BEGIN, entry.getValue()));
|
||||||
putEvent(new TxEvent(EventKind.END, entry.getValue()));
|
putEvent(new TxEvent(EventKind.END, entry.getValue()));
|
||||||
|
|
|
@ -15,11 +15,11 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.NavigableMap;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
|
import com.minres.scviewer.database.EventList;
|
||||||
import com.minres.scviewer.database.HierNode;
|
import com.minres.scviewer.database.HierNode;
|
||||||
import com.minres.scviewer.database.IEvent;
|
import com.minres.scviewer.database.IEvent;
|
||||||
|
import com.minres.scviewer.database.IEventList;
|
||||||
import com.minres.scviewer.database.IWaveform;
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.WaveformType;
|
import com.minres.scviewer.database.WaveformType;
|
||||||
import com.minres.scviewer.database.tx.ITx;
|
import com.minres.scviewer.database.tx.ITx;
|
||||||
|
@ -39,7 +39,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
||||||
protected TextDbLoader loader;
|
protected TextDbLoader loader;
|
||||||
|
|
||||||
/** The events. */
|
/** The events. */
|
||||||
TreeMap<Long, IEvent[]> events = new TreeMap<>();
|
IEventList<Long, IEvent[]> events = new EventList<Long, IEvent[]>();
|
||||||
|
|
||||||
/** The max concurrency. */
|
/** The max concurrency. */
|
||||||
private int rowCount = -1;
|
private int rowCount = -1;
|
||||||
|
@ -89,7 +89,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
||||||
* @return the events
|
* @return the events
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public NavigableMap<Long, IEvent[]> getEvents() {
|
public IEventList<Long, IEvent[]> getEvents() {
|
||||||
return events;
|
return events;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ public class ArrowPainter implements IPainter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getConcurrencyIndex(ITx tx) {
|
private int getConcurrencyIndex(ITx tx) {
|
||||||
IEvent[] eventList = tx.getStream().getEvents().floorEntry(tx.getBeginTime()).getValue();
|
IEvent[] eventList = tx.getStream().getEventsBeforeTime(tx.getBeginTime());
|
||||||
Optional<Integer> res = Arrays.stream(eventList).map(e -> ((ITxEvent)e).getRowIndex()).findFirst();
|
Optional<Integer> res = Arrays.stream(eventList).map(e -> ((ITxEvent)e).getRowIndex()).findFirst();
|
||||||
return res.isPresent()? res.get():0;
|
return res.isPresent()? res.get():0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@ package com.minres.scviewer.database.ui.swt.internal;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.NavigableMap;
|
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
@ -27,6 +26,7 @@ import org.eclipse.swt.graphics.Rectangle;
|
||||||
import com.minres.scviewer.database.BitVector;
|
import com.minres.scviewer.database.BitVector;
|
||||||
import com.minres.scviewer.database.DoubleVal;
|
import com.minres.scviewer.database.DoubleVal;
|
||||||
import com.minres.scviewer.database.IEvent;
|
import com.minres.scviewer.database.IEvent;
|
||||||
|
import com.minres.scviewer.database.IEventList;
|
||||||
import com.minres.scviewer.database.IWaveform;
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.ui.TrackEntry;
|
import com.minres.scviewer.database.ui.TrackEntry;
|
||||||
import com.minres.scviewer.database.ui.WaveformColors;
|
import com.minres.scviewer.database.ui.WaveformColors;
|
||||||
|
@ -112,7 +112,7 @@ public class SignalPainter extends TrackPainter {
|
||||||
proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE));
|
proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE));
|
||||||
proj.setLineStyle(SWT.LINE_SOLID);
|
proj.setLineStyle(SWT.LINE_SOLID);
|
||||||
proj.setLineWidth(1);
|
proj.setLineWidth(1);
|
||||||
NavigableMap<Long, IEvent[]> entries = signal.getEvents().subMap(first.getKey(), false, last.getKey(), true);
|
IEventList<Long, IEvent[]> entries = signal.getEvents().subMap(first.getKey(), false, last.getKey(), true);
|
||||||
SignalChange left = new SignalChange(first);
|
SignalChange left = new SignalChange(first);
|
||||||
SignalChange right = new SignalChange(entries.size() > 0 ? entries.firstEntry() : first);
|
SignalChange right = new SignalChange(entries.size() > 0 ? entries.firstEntry() : first);
|
||||||
maxPosX = area.x + area.width;
|
maxPosX = area.x + area.width;
|
||||||
|
@ -161,7 +161,7 @@ public class SignalPainter extends TrackPainter {
|
||||||
} while (left.time < endTime);
|
} while (left.time < endTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SignalStencil getStencil(GC gc, SignalChange left, NavigableMap<Long, IEvent[]> entries) {
|
private SignalStencil getStencil(GC gc, SignalChange left, IEventList<Long, IEvent[]> entries) {
|
||||||
IEvent val = left.value;
|
IEvent val = left.value;
|
||||||
if(val instanceof BitVector) {
|
if(val instanceof BitVector) {
|
||||||
BitVector bv = (BitVector) val;
|
BitVector bv = (BitVector) val;
|
||||||
|
@ -253,7 +253,7 @@ public class SignalPainter extends TrackPainter {
|
||||||
private long maxVal;
|
private long maxVal;
|
||||||
private long minVal;
|
private long minVal;
|
||||||
double yRange = (yOffsetB-yOffsetT);
|
double yRange = (yOffsetB-yOffsetT);
|
||||||
public MultiBitStencilAnalog(NavigableMap<Long, IEvent[]> entries, Object left, boolean continous, boolean signed) {
|
public MultiBitStencilAnalog(IEventList<Long, IEvent[]> entries, Object left, boolean continous, boolean signed) {
|
||||||
this.continous=continous;
|
this.continous=continous;
|
||||||
this.signed=signed;
|
this.signed=signed;
|
||||||
Collection<IEvent[]> values = entries.values();
|
Collection<IEvent[]> values = entries.values();
|
||||||
|
@ -358,7 +358,7 @@ public class SignalPainter extends TrackPainter {
|
||||||
|
|
||||||
boolean continous=true;
|
boolean continous=true;
|
||||||
|
|
||||||
public RealStencil(NavigableMap<Long, IEvent[]> entries, Object left, boolean continous) {
|
public RealStencil(IEventList<Long, IEvent[]> entries, Object left, boolean continous) {
|
||||||
this.continous=continous;
|
this.continous=continous;
|
||||||
Collection<IEvent[]> values = entries.values();
|
Collection<IEvent[]> values = entries.values();
|
||||||
minVal=(Double) left;
|
minVal=(Double) left;
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
package com.minres.scviewer.database.ui.swt.internal;
|
package com.minres.scviewer.database.ui.swt.internal;
|
||||||
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.NavigableMap;
|
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
|
@ -21,6 +20,7 @@ import org.eclipse.swt.graphics.Rectangle;
|
||||||
|
|
||||||
import com.minres.scviewer.database.EventKind;
|
import com.minres.scviewer.database.EventKind;
|
||||||
import com.minres.scviewer.database.IEvent;
|
import com.minres.scviewer.database.IEvent;
|
||||||
|
import com.minres.scviewer.database.IEventList;
|
||||||
import com.minres.scviewer.database.IWaveform;
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.tx.ITx;
|
import com.minres.scviewer.database.tx.ITx;
|
||||||
import com.minres.scviewer.database.tx.ITxEvent;
|
import com.minres.scviewer.database.tx.ITxEvent;
|
||||||
|
@ -36,6 +36,7 @@ public class StreamPainter extends TrackPainter{
|
||||||
private IWaveform stream;
|
private IWaveform stream;
|
||||||
private int txBase;
|
private int txBase;
|
||||||
private int txHeight;
|
private int txHeight;
|
||||||
|
// TODO: remove TreeMap usage
|
||||||
private TreeMap<ITx, ITxEvent> seenTx;
|
private TreeMap<ITx, ITxEvent> seenTx;
|
||||||
|
|
||||||
public StreamPainter(WaveformCanvas waveCanvas, boolean even, TrackEntry trackEntry) {
|
public StreamPainter(WaveformCanvas waveCanvas, boolean even, TrackEntry trackEntry) {
|
||||||
|
@ -87,7 +88,7 @@ public class StreamPainter extends TrackPainter{
|
||||||
drawTx(proj, area, ((ITxEvent)txEvent).getTransaction(), ((ITxEvent)txEvent).getRowIndex(), false);
|
drawTx(proj, area, ((ITxEvent)txEvent).getTransaction(), ((ITxEvent)txEvent).getRowIndex(), false);
|
||||||
}else{
|
}else{
|
||||||
seenTx.clear();
|
seenTx.clear();
|
||||||
NavigableMap<Long, IEvent[]> entries = stream.getEvents().subMap(firstTx.getKey(), true, lastTx.getKey(), true);
|
IEventList<Long, IEvent[]> entries = stream.getEvents().subMap(firstTx.getKey(), true, lastTx.getKey(), true);
|
||||||
ITxEvent highlighed=null;
|
ITxEvent highlighed=null;
|
||||||
proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE));
|
proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE));
|
||||||
long selectedId=waveCanvas.currentSelection!=null? waveCanvas.currentSelection.getId():-1;
|
long selectedId=waveCanvas.currentSelection!=null? waveCanvas.currentSelection.getId():-1;
|
||||||
|
@ -157,7 +158,7 @@ public class StreamPainter extends TrackPainter{
|
||||||
Entry<Long, IEvent[]> firstTx=stream.getEvents().floorEntry(point.x*waveCanvas.getScaleFactor());
|
Entry<Long, IEvent[]> firstTx=stream.getEvents().floorEntry(point.x*waveCanvas.getScaleFactor());
|
||||||
if(firstTx!=null){
|
if(firstTx!=null){
|
||||||
do {
|
do {
|
||||||
ITx tx = getTxFromEntry(lane, point.x, firstTx);
|
ITx tx = getTxFromEntry(lane, point.x, firstTx.getValue());
|
||||||
if(tx!=null) return tx;
|
if(tx!=null) return tx;
|
||||||
firstTx=stream.getEvents().lowerEntry(firstTx.getKey());
|
firstTx=stream.getEvents().lowerEntry(firstTx.getKey());
|
||||||
}while(firstTx!=null);
|
}while(firstTx!=null);
|
||||||
|
@ -173,11 +174,11 @@ public class StreamPainter extends TrackPainter{
|
||||||
this.stream = stream;
|
this.stream = stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ITx getTxFromEntry(int lane, int offset, Entry<Long, IEvent[]> firstTx) {
|
protected ITx getTxFromEntry(int lane, int offset, IEvent[] firstTx) {
|
||||||
long timePoint=offset*waveCanvas.getScaleFactor();
|
long timePoint=offset*waveCanvas.getScaleFactor();
|
||||||
long timePointLow=(offset-5)*waveCanvas.getScaleFactor();
|
long timePointLow=(offset-5)*waveCanvas.getScaleFactor();
|
||||||
long timePointHigh=(offset+5)*waveCanvas.getScaleFactor();
|
long timePointHigh=(offset+5)*waveCanvas.getScaleFactor();
|
||||||
for(IEvent e:firstTx.getValue()){
|
for(IEvent e:firstTx){
|
||||||
if(e instanceof ITxEvent) {
|
if(e instanceof ITxEvent) {
|
||||||
ITxEvent evt = (ITxEvent) e;
|
ITxEvent evt = (ITxEvent) e;
|
||||||
ITx tx=evt.getTransaction();
|
ITx tx=evt.getTransaction();
|
||||||
|
|
|
@ -21,7 +21,6 @@ import java.util.Collections;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.NavigableMap;
|
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
@ -79,6 +78,7 @@ import com.minres.scviewer.database.BitVector;
|
||||||
import com.minres.scviewer.database.DoubleVal;
|
import com.minres.scviewer.database.DoubleVal;
|
||||||
import com.minres.scviewer.database.EventKind;
|
import com.minres.scviewer.database.EventKind;
|
||||||
import com.minres.scviewer.database.IEvent;
|
import com.minres.scviewer.database.IEvent;
|
||||||
|
import com.minres.scviewer.database.IEventList;
|
||||||
import com.minres.scviewer.database.IWaveform;
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.RelationType;
|
import com.minres.scviewer.database.RelationType;
|
||||||
import com.minres.scviewer.database.WaveformType;
|
import com.minres.scviewer.database.WaveformType;
|
||||||
|
@ -259,11 +259,11 @@ public class WaveformView implements IWaveformView {
|
||||||
Entry<Long, IEvent[]> ceilEntry = null;
|
Entry<Long, IEvent[]> ceilEntry = null;
|
||||||
if (o instanceof TrackEntry) {
|
if (o instanceof TrackEntry) {
|
||||||
TrackEntry entry = (TrackEntry) o;
|
TrackEntry entry = (TrackEntry) o;
|
||||||
NavigableMap<Long, IEvent[]> map = entry.waveform.getEvents();
|
IEventList<Long, IEvent[]> map = entry.waveform.getEvents();
|
||||||
floorEntry = map.floorEntry(time);
|
floorEntry = map.floorEntry(time);
|
||||||
ceilEntry = map.ceilingEntry(time);
|
ceilEntry = map.ceilingEntry(time);
|
||||||
} else if (o instanceof ITx) {
|
} else if (o instanceof ITx) {
|
||||||
NavigableMap<Long, IEvent[]> map = ((ITx) o).getStream().getEvents();
|
IEventList<Long, IEvent[]> map = ((ITx) o).getStream().getEvents();
|
||||||
floorEntry = map.floorEntry(time);
|
floorEntry = map.floorEntry(time);
|
||||||
ceilEntry = map.ceilingEntry(time);
|
ceilEntry = map.ceilingEntry(time);
|
||||||
}
|
}
|
||||||
|
@ -958,7 +958,7 @@ public class WaveformView implements IWaveformView {
|
||||||
return;
|
return;
|
||||||
TrackEntry sel = currentWaveformSelection.get(0);
|
TrackEntry sel = currentWaveformSelection.get(0);
|
||||||
long time = getCursorTime();
|
long time = getCursorTime();
|
||||||
NavigableMap<Long, ?> map = null;
|
IEventList<Long, ?> map = null;
|
||||||
if (sel.waveform.getType() == WaveformType.TRANSACTION || sel.waveform.getType() == WaveformType.SIGNAL) {
|
if (sel.waveform.getType() == WaveformType.TRANSACTION || sel.waveform.getType() == WaveformType.SIGNAL) {
|
||||||
map = sel.waveform.getEvents();
|
map = sel.waveform.getEvents();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,6 @@ import java.util.ArrayDeque;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.NavigableMap;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
|
@ -29,6 +27,7 @@ import com.google.common.collect.Iterables;
|
||||||
import com.minres.scviewer.database.BitVector;
|
import com.minres.scviewer.database.BitVector;
|
||||||
import com.minres.scviewer.database.DoubleVal;
|
import com.minres.scviewer.database.DoubleVal;
|
||||||
import com.minres.scviewer.database.IEvent;
|
import com.minres.scviewer.database.IEvent;
|
||||||
|
import com.minres.scviewer.database.IEventList;
|
||||||
import com.minres.scviewer.database.IWaveform;
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.IWaveformDb;
|
import com.minres.scviewer.database.IWaveformDb;
|
||||||
import com.minres.scviewer.database.IWaveformDbLoader;
|
import com.minres.scviewer.database.IWaveformDbLoader;
|
||||||
|
@ -118,14 +117,14 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder {
|
||||||
if(!res) throw new InputFormatException("Could not parse VCD file");
|
if(!res) throw new InputFormatException("Could not parse VCD file");
|
||||||
// calculate max time of this database
|
// calculate max time of this database
|
||||||
for(IWaveform waveform:signals) {
|
for(IWaveform waveform:signals) {
|
||||||
NavigableMap<Long, IEvent[]> events =waveform.getEvents();
|
IEventList<Long, IEvent[]> events =waveform.getEvents();
|
||||||
if(!events.isEmpty())
|
if(!events.isEmpty())
|
||||||
maxTime= Math.max(maxTime, events.lastKey());
|
maxTime= Math.max(maxTime, events.lastKey());
|
||||||
}
|
}
|
||||||
// extend signals to have a last value set at max time
|
// extend signals to have a last value set at max time
|
||||||
for(IWaveform s:signals){
|
for(IWaveform s:signals){
|
||||||
if(s instanceof VCDSignal<?>) {
|
if(s instanceof VCDSignal<?>) {
|
||||||
TreeMap<Long,?> events = (TreeMap<Long, ?>) ((VCDSignal<?>)s).getEvents();
|
IEventList<Long, IEvent[]> events = ((VCDSignal<?>)s).getEvents();
|
||||||
if(events.size()>0 && events.lastKey()<maxTime){
|
if(events.size()>0 && events.lastKey()<maxTime){
|
||||||
Object val = events.lastEntry().getValue();
|
Object val = events.lastEntry().getValue();
|
||||||
if(val instanceof BitVector) {
|
if(val instanceof BitVector) {
|
||||||
|
|
|
@ -11,11 +11,11 @@
|
||||||
package com.minres.scviewer.database.vcd;
|
package com.minres.scviewer.database.vcd;
|
||||||
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.NavigableMap;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
|
import com.minres.scviewer.database.EventList;
|
||||||
import com.minres.scviewer.database.HierNode;
|
import com.minres.scviewer.database.HierNode;
|
||||||
import com.minres.scviewer.database.IEvent;
|
import com.minres.scviewer.database.IEvent;
|
||||||
|
import com.minres.scviewer.database.IEventList;
|
||||||
import com.minres.scviewer.database.IWaveform;
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.WaveformType;
|
import com.minres.scviewer.database.WaveformType;
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ public class VCDSignal<T extends IEvent> extends HierNode implements IWaveform {
|
||||||
|
|
||||||
private final int width;
|
private final int width;
|
||||||
|
|
||||||
private NavigableMap<Long, IEvent[]> values;
|
private IEventList<Long, IEvent[]> values;
|
||||||
|
|
||||||
public VCDSignal(String name) {
|
public VCDSignal(String name) {
|
||||||
this(0, name, 1);
|
this(0, name, 1);
|
||||||
|
@ -42,7 +42,7 @@ public class VCDSignal<T extends IEvent> extends HierNode implements IWaveform {
|
||||||
fullName=name;
|
fullName=name;
|
||||||
this.id=id;
|
this.id=id;
|
||||||
this.width=width;
|
this.width=width;
|
||||||
this.values=new TreeMap<>();
|
this.values=new EventList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public VCDSignal(VCDSignal<T> o, int id, String name) {
|
public VCDSignal(VCDSignal<T> o, int id, String name) {
|
||||||
|
@ -80,7 +80,7 @@ public class VCDSignal<T extends IEvent> extends HierNode implements IWaveform {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NavigableMap<Long, IEvent[]> getEvents() {
|
public IEventList<Long, IEvent[]> getEvents() {
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
package com.minres.scviewer.database;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.NavigableMap;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
public class EventList<K,V> implements IEventList<K,V>{
|
||||||
|
|
||||||
|
NavigableMap<K,V> backing ;
|
||||||
|
|
||||||
|
public EventList() {
|
||||||
|
backing=new TreeMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public EventList(NavigableMap<K, V> subMap) {
|
||||||
|
backing=subMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entry<K, V> floorEntry(K key) {
|
||||||
|
return backing.floorEntry(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entry<K, V> ceilingEntry(K key) {
|
||||||
|
return backing.ceilingEntry(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entry<K, V> firstEntry() {
|
||||||
|
return backing.firstEntry();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entry<K, V> lastEntry() {
|
||||||
|
return backing.lastEntry();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public V get(K key) {
|
||||||
|
return backing.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entry<K, V> higherEntry(K key) {
|
||||||
|
return backing.higherEntry(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entry<K, V> lowerEntry(K key) {
|
||||||
|
return backing.lowerEntry(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IEventList<K, V> subMap(K key, boolean b, K key2, boolean c) {
|
||||||
|
return new EventList<K,V>( backing.subMap(key, b, key2, c));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return backing.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<K> keys() {
|
||||||
|
return backing.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<V> values() {
|
||||||
|
return backing.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean containsKey(K key) {
|
||||||
|
return backing.containsKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public V put(K key, V value) {
|
||||||
|
return backing.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Entry<K, V>> entrySet() {
|
||||||
|
return backing.entrySet();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return backing.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public K lastKey() {
|
||||||
|
return backing.lastKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package com.minres.scviewer.database;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
public interface IEventList<K,V> {
|
||||||
|
|
||||||
|
Entry<K, V> floorEntry(K key);
|
||||||
|
|
||||||
|
Entry<K, V> ceilingEntry(K key);
|
||||||
|
|
||||||
|
Entry<K, V> firstEntry();
|
||||||
|
|
||||||
|
Entry<K, V> lastEntry();
|
||||||
|
|
||||||
|
V get(K key);
|
||||||
|
|
||||||
|
Entry<K, V> higherEntry(K key);
|
||||||
|
|
||||||
|
Entry<K, V> lowerEntry(K key);
|
||||||
|
|
||||||
|
IEventList<K, V> subMap(K key, boolean b, K key2, boolean c);
|
||||||
|
|
||||||
|
int size();
|
||||||
|
|
||||||
|
Collection<K> keys();
|
||||||
|
|
||||||
|
Collection<V> values();
|
||||||
|
|
||||||
|
boolean containsKey(K key);
|
||||||
|
|
||||||
|
V put(K key, V value);
|
||||||
|
|
||||||
|
Collection<Entry<K, V>> entrySet();
|
||||||
|
|
||||||
|
boolean isEmpty();
|
||||||
|
|
||||||
|
K lastKey();
|
||||||
|
|
||||||
|
}
|
|
@ -10,7 +10,6 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package com.minres.scviewer.database;
|
package com.minres.scviewer.database;
|
||||||
|
|
||||||
import java.util.NavigableMap;
|
|
||||||
|
|
||||||
// TODO: Auto-generated Javadoc
|
// TODO: Auto-generated Javadoc
|
||||||
/**
|
/**
|
||||||
|
@ -40,7 +39,7 @@ public interface IWaveform extends IHierNode {
|
||||||
*
|
*
|
||||||
* @return the events
|
* @return the events
|
||||||
*/
|
*/
|
||||||
public NavigableMap<Long, IEvent[]> getEvents();
|
public IEventList<Long, IEvent[]> getEvents();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the events at time.
|
* Gets the events at time.
|
||||||
|
|
|
@ -51,17 +51,13 @@
|
||||||
<feature id="com.minres.scviewer.e4.platform.feature" installMode="root"/>
|
<feature id="com.minres.scviewer.e4.platform.feature" installMode="root"/>
|
||||||
<feature id="org.eclipse.equinox.p2.core.feature" installMode="root"/>
|
<feature id="org.eclipse.equinox.p2.core.feature" installMode="root"/>
|
||||||
<feature id="org.eclipse.emf.ecore" installMode="root"/>
|
<feature id="org.eclipse.emf.ecore" installMode="root"/>
|
||||||
<feature id="org.eclipse.rcptt.core" installMode="root"/>
|
|
||||||
<feature id="org.eclipse.emf.common" installMode="root"/>
|
<feature id="org.eclipse.emf.common" installMode="root"/>
|
||||||
<feature id="org.eclipse.ecf.core.feature" installMode="root"/>
|
<feature id="org.eclipse.ecf.core.feature" installMode="root"/>
|
||||||
<feature id="org.eclipse.ecf.filetransfer.httpclient45.feature" installMode="root"/>
|
<feature id="org.eclipse.ecf.filetransfer.httpclient45.feature" installMode="root"/>
|
||||||
<feature id="org.eclipse.rcptt.ecl.core" installMode="root"/>
|
|
||||||
<feature id="org.eclipse.ecf.filetransfer.feature" installMode="root"/>
|
<feature id="org.eclipse.ecf.filetransfer.feature" installMode="root"/>
|
||||||
<feature id="org.eclipse.rcptt.tesla" installMode="root"/>
|
|
||||||
<feature id="org.eclipse.ecf.core.ssl.feature" installMode="root"/>
|
<feature id="org.eclipse.ecf.core.ssl.feature" installMode="root"/>
|
||||||
<feature id="com.minres.scviewer.ui.feature" installMode="root"/>
|
<feature id="com.minres.scviewer.ui.feature" installMode="root"/>
|
||||||
<feature id="org.eclipse.ecf.filetransfer.ssl.feature" installMode="root"/>
|
<feature id="org.eclipse.ecf.filetransfer.ssl.feature" installMode="root"/>
|
||||||
<feature id="org.eclipse.rcptt.tesla.ecl" installMode="root"/>
|
|
||||||
<feature id="org.eclipse.equinox.executable" installMode="root"/>
|
<feature id="org.eclipse.equinox.executable" installMode="root"/>
|
||||||
<feature id="com.minres.scviewer.database.feature" installMode="root"/>
|
<feature id="com.minres.scviewer.database.feature" installMode="root"/>
|
||||||
<feature id="org.eclipse.e4.rcp" installMode="root"/>
|
<feature id="org.eclipse.e4.rcp" installMode="root"/>
|
||||||
|
|
Loading…
Reference in New Issue