refactor database class hierarchy

This commit is contained in:
2020-11-28 10:22:22 +01:00
parent db838efc65
commit 21d83f93dc
22 changed files with 217 additions and 190 deletions

View File

@ -23,7 +23,6 @@ import groovy.io.FileType
import com.minres.scviewer.database.AssociationType
import com.minres.scviewer.database.DataType
import com.minres.scviewer.database.ITxGenerator
import com.minres.scviewer.database.ITxStream
import com.minres.scviewer.database.IWaveform
import com.minres.scviewer.database.IWaveformDb
import com.minres.scviewer.database.IWaveformDbLoader
@ -163,7 +162,7 @@ public class TextDbLoader implements IWaveformDbLoader{
case "scv_tr_generator":
if ((matcher = line =~ /^scv_tr_generator\s+\(ID\s+(\d+),\s+name\s+"([^"]+)",\s+scv_tr_stream\s+(\d+),$/)) {
def id = Integer.parseInt(matcher[0][1])
ITxStream stream=streamsById[Integer.parseInt(matcher[0][3])]
TxStream stream=streamsById[Integer.parseInt(matcher[0][3])] as TxStream
generator=new TxGenerator(id, stream, matcher[0][2])
stream.generators<<generator
generatorsById[id]=generator

View File

@ -1,36 +1,41 @@
package com.minres.scviewer.database.text;
import com.minres.scviewer.database.EventKind
import com.minres.scviewer.database.ITx
import com.minres.scviewer.database.ITxEvent
import com.minres.scviewer.database.IWaveformEvent
class TxEvent implements ITxEvent {
final ITxEvent.Type type;
final EventKind kind;
final Tx transaction;
final Long time
TxEvent(ITxEvent.Type type, ITx transaction) {
TxEvent(EventKind kind, ITx transaction) {
super();
this.type = type;
this.kind = kind;
this.transaction = transaction;
this.time = type==ITxEvent.Type.BEGIN?transaction.beginTime:transaction.endTime
this.time = kind==EventKind.BEGIN?transaction.beginTime:transaction.endTime
}
@Override
IWaveformEvent duplicate() throws CloneNotSupportedException {
ITxEvent duplicate() throws CloneNotSupportedException {
new TxEvent(type, transaction, time)
}
@Override
int compareTo(IWaveformEvent o) {
time.compareTo(o.time)
}
// @Override
// int compareTo(IWaveformEvent o) {
// time.compareTo(o.time)
// }
@Override
String toString() {
type.toString()+"@"+time+" of tx #"+transaction.id;
kind.toString()+"@"+time+" of tx #"+transaction.id;
}
@Override
Class<?> getType() {
return this.getClass();
}
}

View File

@ -15,15 +15,13 @@ import java.util.List;
import com.minres.scviewer.database.ITxAttributeType
import com.minres.scviewer.database.ITxAttribute;
import com.minres.scviewer.database.ITxEvent;
import com.minres.scviewer.database.ITxGenerator;
import com.minres.scviewer.database.ITxStream;
import com.minres.scviewer.database.IWaveform
import com.minres.scviewer.database.ITx;
import com.minres.scviewer.database.IWaveformEvent;
class TxGenerator implements ITxGenerator{
Long id
TxStream stream
IWaveform stream
String name
Boolean active = false
ArrayList<ITx> transactions=[]
@ -39,7 +37,7 @@ class TxGenerator implements ITxGenerator{
this.name=name
}
ITxStream<? extends ITxEvent> getStream(){
IWaveform getStream(){
return stream;
}

View File

@ -16,20 +16,21 @@ import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
import java.util.Map.Entry
import org.mapdb.Serializer
import com.minres.scviewer.database.ITxEvent;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.IWaveformDb
import com.minres.scviewer.database.IWaveformEvent
import com.minres.scviewer.database.ITxGenerator
import com.minres.scviewer.database.EventKind
import com.minres.scviewer.database.HierNode;
import com.minres.scviewer.database.IEvent
import com.minres.scviewer.database.IHierNode
import com.minres.scviewer.database.ITxStream
import com.minres.scviewer.database.ITx
class TxStream extends HierNode implements ITxStream {
class TxStream extends HierNode implements IWaveform {
Long id
@ -43,7 +44,7 @@ class TxStream extends HierNode implements ITxStream {
int maxConcurrency
private TreeMap<Long, List<ITxEvent>> events
private TreeMap<Long, IEvent[]> events
TxStream(TextDbLoader loader, int id, String name, String kind){
super(name)
@ -70,14 +71,14 @@ class TxStream extends HierNode implements ITxStream {
if(!maxConcurrency){
generators.each {TxGenerator generator ->
generator.transactions.each{ Tx tx ->
putEvent(new TxEvent(ITxEvent.Type.BEGIN, tx))
putEvent(new TxEvent(ITxEvent.Type.END, tx))
putEvent(new TxEvent(EventKind.BEGIN, tx))
putEvent(new TxEvent(EventKind.END, tx))
}
}
def rowendtime = [0]
events.keySet().each{long time ->
def value=events.get(time)
def starts=value.findAll{ITxEvent event ->event.type==ITxEvent.Type.BEGIN}
def starts=value.findAll{ITxEvent event ->event.type==EventKind.BEGIN}
starts.each {ITxEvent event ->
Tx tx = event.transaction
def rowIdx = 0
@ -102,12 +103,12 @@ class TxStream extends HierNode implements ITxStream {
}
@Override
public NavigableMap getEvents() {
public NavigableMap<Long, IEvent[]> getEvents() {
return events;
}
@Override
public Collection getWaveformEventsAtTime(Long time) {
public IEvent[] getEventsAtTime(Long time) {
return events.get(time);
}
@ -116,4 +117,18 @@ class TxStream extends HierNode implements ITxStream {
return(other instanceof TxStream && this.getId()==other.getId());
}
@Override
public IEvent[] getEventsBeforeTime(Long time) {
Entry<Long, IEvent[]> e = events.floorEntry(time);
if(e==null)
return null;
else
return events.floorEntry(time).getValue();
}
@Override
public Class<?> getType() {
return TxEvent.class;
}
}