add explicit event list

This commit is contained in:
2021-02-27 12:26:07 +00:00
parent d65803a4b7
commit b69e1886b9
18 changed files with 560 additions and 184 deletions

View File

@@ -26,7 +26,6 @@ import java.util.zip.GZIPInputStream;
import com.google.common.collect.Iterables;
import com.minres.scviewer.database.BitVector;
import com.minres.scviewer.database.DoubleVal;
import com.minres.scviewer.database.IEvent;
import com.minres.scviewer.database.IEventList;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.IWaveformDb;
@@ -117,16 +116,16 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder {
if(!res) throw new InputFormatException("Could not parse VCD file");
// calculate max time of this database
for(IWaveform waveform:signals) {
IEventList<Long, IEvent[]> events =waveform.getEvents();
IEventList events =waveform.getEvents();
if(!events.isEmpty())
maxTime= Math.max(maxTime, events.lastKey());
}
// extend signals to have a last value set at max time
for(IWaveform s:signals){
if(s instanceof VCDSignal<?>) {
IEventList<Long, IEvent[]> events = ((VCDSignal<?>)s).getEvents();
IEventList events = ((VCDSignal<?>)s).getEvents();
if(events.size()>0 && events.lastKey()<maxTime){
Object val = events.lastEntry().getValue();
Object val = events.lastEntry().events[0];
if(val instanceof BitVector) {
((VCDSignal<BitVector>)s).addSignalChange(maxTime, (BitVector) val);
} else if(val instanceof DoubleVal)

View File

@@ -10,8 +10,7 @@
*******************************************************************************/
package com.minres.scviewer.database.vcd;
import java.util.Map.Entry;
import com.minres.scviewer.database.EventEntry;
import com.minres.scviewer.database.EventList;
import com.minres.scviewer.database.HierNode;
import com.minres.scviewer.database.IEvent;
@@ -27,7 +26,7 @@ public class VCDSignal<T extends IEvent> extends HierNode implements IWaveform {
private final int width;
private IEventList<Long, IEvent[]> values;
private IEventList values;
public VCDSignal(String name) {
this(0, name, 1);
@@ -42,7 +41,7 @@ public class VCDSignal<T extends IEvent> extends HierNode implements IWaveform {
fullName=name;
this.id=id;
this.width=width;
this.values=new EventList<>();
this.values=new EventList();
}
public VCDSignal(VCDSignal<T> o, int id, String name) {
@@ -80,7 +79,7 @@ public class VCDSignal<T extends IEvent> extends HierNode implements IWaveform {
}
@Override
public IEventList<Long, IEvent[]> getEvents() {
public IEventList getEvents() {
return values;
}
@@ -91,11 +90,11 @@ public class VCDSignal<T extends IEvent> extends HierNode implements IWaveform {
@Override
public IEvent[] getEventsBeforeTime(Long time) {
Entry<Long, IEvent[]> e = values.floorEntry(time);
EventEntry e = values.floorEntry(time);
if(e==null)
return new IEvent[] {};
else
return values.floorEntry(time).getValue();
return values.floorEntry(time).events;
}
@Override