diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java index 7992a27..33a4a2a 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java @@ -40,10 +40,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { TreeMap events = new TreeMap<>(); /** The max concurrency. */ - private int maxConcurrency = 0; - - /** The concurrency calculated. */ - boolean concurrencyCalculated = false; + private int rowCount = -1; /** * Instantiates a new abstract tx stream. @@ -137,21 +134,21 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { */ @Override public int getRowCount() { - if (!concurrencyCalculated) + if (rowCount<0) calculateConcurrency(); - return maxConcurrency; + return rowCount; } /** * Calculate concurrency. */ - public void calculateConcurrency() { - if (concurrencyCalculated) + void calculateConcurrency() { + if (rowCount>=0) return; ArrayList rowEndTime = new ArrayList<>(); HashMap rowByTxId = new HashMap<>(); - events.entrySet().stream().forEach(entry -> { - Arrays.asList(entry.getValue()).stream().forEach(evt -> { + for(Entry entry: events.entrySet()) { + for(IEvent evt:entry.getValue()) { TxEvent txEvt = (TxEvent) evt; ITx tx = txEvt.getTransaction(); int rowIdx = 0; @@ -162,7 +159,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { rowByTxId.remove(txId); break; case SINGLE: - for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx) > tx.getBeginTime(); rowIdx++); + for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++); if (rowEndTime.size() <= rowIdx) rowEndTime.add(tx.getEndTime()); else @@ -170,7 +167,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { ((TxEvent) evt).setConcurrencyIndex(rowIdx); break; case BEGIN: - for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx) > tx.getBeginTime(); rowIdx++); + for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++); if (rowEndTime.size() <= rowIdx) rowEndTime.add(tx.getEndTime()); else @@ -179,10 +176,9 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { rowByTxId.put(tx.getId(), rowIdx); break; } - }); - }); - maxConcurrency=rowEndTime.size(); - concurrencyCalculated = true; + } + } + rowCount=rowEndTime.size()>0?rowEndTime.size():1; getChildNodes().parallelStream().forEach(c -> ((TxGenerator)c).calculateConcurrency()); } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java index 2b0321e..0ec1809 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java @@ -420,16 +420,13 @@ public class TextDbLoader implements IWaveformDbLoader { TxGenerator gen = loader.txGenerators.get(scvTx.generatorId); TxStream stream = loader.txStreams.get(gen.stream.getId()); if (scvTx.beginTime == scvTx.endTime) { - TxEvent evt = new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime); - stream.addEvent(evt); - gen.addEvent(evt); + stream.addEvent(new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime)); + gen.addEvent(new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime)); } else { - TxEvent begEvt = new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime); - stream.addEvent(begEvt); - gen.addEvent(begEvt); - TxEvent endEvt = new TxEvent(loader, EventKind.END, id, scvTx.endTime); - stream.addEvent(endEvt); - gen.addEvent(endEvt); + stream.addEvent(new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime)); + gen.addEvent(new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime)); + stream.addEvent(new TxEvent(loader, EventKind.END, id, scvTx.endTime)); + gen.addEvent(new TxEvent(loader, EventKind.END, id, scvTx.endTime)); } if (nextLine != null && nextLine.charAt(0) == 'a') { int idx = 0; diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java index 1a0ffa6..a6597d1 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java @@ -83,13 +83,4 @@ class TxGenerator extends AbstractTxStream { return stream.getKind(); } - /** - * Gets the width. - * - * @return the width - */ - @Override - public int getRowCount() { - return stream.getRowCount(); - } } diff --git a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java index cd7716c..4b2bb71 100644 --- a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java +++ b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java @@ -118,8 +118,4 @@ public class VCDSignal extends HierNode implements IWaveform { return "signal"; } - @Override - public void calculateConcurrency() { - } - } diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java index c30d9fe..c96b04a 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java @@ -79,8 +79,4 @@ public interface IWaveform extends IHierNode { */ public int getRowCount(); - /** - * Calculate the concurrency (th enumber of parallel ongoing events) of the waveform. - */ - public void calculateConcurrency(); } diff --git a/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch b/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch index 4536e71..03a641c 100644 --- a/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch +++ b/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch @@ -19,18 +19,18 @@ - + - + - + - +