Unified databases so that signals and transactions can be loaded into
same database
This commit is contained in:
@ -1,31 +0,0 @@
|
||||
package com.minres.scviewer.database.text
|
||||
|
||||
import java.io.FileInputStream;
|
||||
|
||||
import com.minres.scviewer.database.IWaveformDb
|
||||
import com.minres.scviewer.database.IWaveformDbFactory;
|
||||
|
||||
class TextDbFactory implements IWaveformDbFactory {
|
||||
|
||||
byte[] x = "scv_tr_stream".bytes
|
||||
|
||||
@Override
|
||||
public IWaveformDb createDatabase(File file) {
|
||||
try {
|
||||
FileInputStream fis = new FileInputStream(file);
|
||||
byte[] buffer = new byte[x.size()];
|
||||
def read = fis.read(buffer, 0, x.size());
|
||||
fis.close();
|
||||
if(read==x.size())
|
||||
for(int i=0; i<x.size(); i++)
|
||||
if(buffer[i]!=x[i]) return null;
|
||||
def db = new TextDb();
|
||||
db.load(file)
|
||||
return db
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -22,28 +22,27 @@ import com.minres.scviewer.database.DataType;
|
||||
import com.minres.scviewer.database.HierNode;
|
||||
import com.minres.scviewer.database.ITxAttributeType;
|
||||
import com.minres.scviewer.database.ITxAttribute;
|
||||
import com.minres.scviewer.database.IWaveform
|
||||
import com.minres.scviewer.database.IWaveformDb;
|
||||
import com.minres.scviewer.database.ITxGenerator;
|
||||
import com.minres.scviewer.database.IHierNode;
|
||||
import com.minres.scviewer.database.ITxStream;
|
||||
import com.minres.scviewer.database.IWaveformDbLoader;
|
||||
import com.minres.scviewer.database.InputFormatException;
|
||||
import com.minres.scviewer.database.EventTime
|
||||
import com.minres.scviewer.database.RelationType
|
||||
|
||||
public class TextDb extends HierNode implements IWaveformDb{
|
||||
public class TextDbLoader implements IWaveformDbLoader{
|
||||
|
||||
private EventTime maxTime;
|
||||
|
||||
|
||||
IWaveformDb db;
|
||||
|
||||
def streams = []
|
||||
|
||||
def relationTypes=[:]
|
||||
|
||||
public TextDb() {
|
||||
super("TextDb");
|
||||
}
|
||||
|
||||
public String getFullName() {
|
||||
return getName();
|
||||
public TextDbLoader() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -51,16 +50,9 @@ public class TextDb extends HierNode implements IWaveformDb{
|
||||
return maxTime;
|
||||
}
|
||||
|
||||
public ITxStream getStreamByName(String name){
|
||||
streams.find{ITxStream stream-> stream.fullName == name }
|
||||
}
|
||||
|
||||
public List<ITxStream> getAllWaves() {
|
||||
return new LinkedList<ITxStream>(streams);
|
||||
}
|
||||
|
||||
public List<IHierNode> getChildNodes() {
|
||||
return childs.sort{it.name};
|
||||
@Override
|
||||
public List<IWaveform> getAllWaves() {
|
||||
return new LinkedList<IWaveform>(streams);
|
||||
}
|
||||
|
||||
public Map<Long, ITxGenerator> getGeneratorsById() {
|
||||
@ -69,14 +61,20 @@ public class TextDb extends HierNode implements IWaveformDb{
|
||||
return res;
|
||||
}
|
||||
|
||||
void clear(){
|
||||
streams = []
|
||||
maxTime=new EventTime(0, "ns")
|
||||
}
|
||||
|
||||
void load(File file) throws InputFormatException {
|
||||
this.name = file.name;
|
||||
static final byte[] x = "scv_tr_stream".bytes
|
||||
|
||||
@Override
|
||||
boolean load(IWaveformDb db, File file) throws Exception {
|
||||
this.db=db
|
||||
FileInputStream fis = new FileInputStream(file)
|
||||
byte[] buffer = new byte[x.size()]
|
||||
def readCnt = fis.read(buffer, 0, x.size())
|
||||
fis.close()
|
||||
if(readCnt==x.size())
|
||||
for(int i=0; i<x.size(); i++)
|
||||
if(buffer[i]!=x[i]) return false
|
||||
parseInput(file)
|
||||
return true
|
||||
}
|
||||
|
||||
private def parseInput(File input){
|
||||
@ -96,7 +94,7 @@ public class TextDb extends HierNode implements IWaveformDb{
|
||||
case "end_attribute":
|
||||
if ((matcher = line =~ /^scv_tr_stream\s+\(ID (\d+),\s+name\s+"([^"]+)",\s+kind\s+"([^"]+)"\)$/)) {
|
||||
def id = Integer.parseInt(matcher[0][1])
|
||||
def stream = new TxStream(id, this, matcher[0][2], matcher[0][3])
|
||||
def stream = new TxStream(db, id, matcher[0][2], matcher[0][3])
|
||||
streams<<stream
|
||||
streamsById[id]=stream
|
||||
} else if ((matcher = line =~ /^scv_tr_generator\s+\(ID\s+(\d+),\s+name\s+"([^"]+)",\s+scv_tr_stream\s+(\d+),$/)) {
|
||||
@ -117,7 +115,7 @@ public class TextDb extends HierNode implements IWaveformDb{
|
||||
case "tx_begin"://matcher = line =~ /^tx_begin\s+(\d+)\s+(\d+)\s+(\d+)\s+([munpf]?s)/
|
||||
def id = Integer.parseInt(tokens[1])
|
||||
TxGenerator gen=generatorsById[Integer.parseInt(tokens[2])]
|
||||
transaction = new Tx(id, gen.stream, gen, new EventTime(Integer.parseInt(tokens[3]), tokens[4]))
|
||||
transaction = new Tx(id, gen.stream, gen, new EventTime(Integer.parseInt(tokens[3]), EventTime.Unit.fromString(tokens[4])))
|
||||
gen.transactions << transaction
|
||||
transactionsById[id]= transaction
|
||||
gen.begin_attrs_idx=0;
|
||||
@ -128,7 +126,7 @@ public class TextDb extends HierNode implements IWaveformDb{
|
||||
def id = Integer.parseInt(tokens[1])
|
||||
transaction = transactionsById[id]
|
||||
assert Integer.parseInt(tokens[2])==transaction.generator.id
|
||||
transaction.endTime = new EventTime(Integer.parseInt(tokens[3]), tokens[4])
|
||||
transaction.endTime = new EventTime(Integer.parseInt(tokens[3]), EventTime.Unit.fromString(tokens[4]))
|
||||
transaction.generator.end_attrs_idx=0;
|
||||
maxTime = maxTime>transaction.endTime?maxTime:transaction.endTime
|
||||
endTransaction=true
|
||||
@ -158,38 +156,6 @@ public class TextDb extends HierNode implements IWaveformDb{
|
||||
|
||||
}
|
||||
}
|
||||
addHierarchyNodes()
|
||||
}
|
||||
|
||||
def addHierarchyNodes(){
|
||||
streams.each{ TxStream stream->
|
||||
def hier = stream.fullName.split(/\./)
|
||||
IHierNode node = this
|
||||
hier.each { name ->
|
||||
def n1 = node.childNodes.find{it.name == name}
|
||||
if(name == hier[-1]){ //leaf
|
||||
if(n1!=null) {
|
||||
if(n1 instanceof HierNode){
|
||||
node.childNodes.remove(n1)
|
||||
stream.childNodes.addAll(n1.childNodes)
|
||||
} else {
|
||||
throw new InputFormatException()
|
||||
}
|
||||
}
|
||||
stream.name=name
|
||||
node.childNodes<<stream
|
||||
node=stream
|
||||
} else { // intermediate
|
||||
if(n1 != null) {
|
||||
node=n1
|
||||
} else {
|
||||
HierNode newNode = new HierNode(name)
|
||||
node.childNodes<<newNode
|
||||
node=newNode
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -15,6 +15,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.minres.scviewer.database.HierNode;
|
||||
import com.minres.scviewer.database.IWaveform;
|
||||
import com.minres.scviewer.database.IWaveformDb
|
||||
import com.minres.scviewer.database.ITxGenerator
|
||||
import com.minres.scviewer.database.IHierNode
|
||||
@ -25,7 +26,7 @@ class TxStream extends HierNode implements ITxStream {
|
||||
|
||||
Long id;
|
||||
|
||||
TextDb database
|
||||
IWaveformDb database
|
||||
|
||||
String fullName;
|
||||
|
||||
@ -35,7 +36,7 @@ class TxStream extends HierNode implements ITxStream {
|
||||
|
||||
private TreeSet<Tx> allTransactions;
|
||||
|
||||
TxStream(int id, TextDb db, String name, String kind){
|
||||
TxStream(IWaveformDb db, int id, String name, String kind){
|
||||
super(name)
|
||||
this.id=id
|
||||
this.database=db
|
||||
|
Reference in New Issue
Block a user