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 ac0c1d9..f84577c 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 @@ -76,6 +76,8 @@ public class TextDbLoader implements IWaveformDbLoader { /** The transactions. */ Map transactions = null; + Map id2index = new HashMap<>(); + /** The attribute types. */ final Map attributeTypes = UnifiedMap.newMap(); @@ -107,6 +109,10 @@ public class TextDbLoader implements IWaveformDbLoader { return maxTime; } + public ScvTx getScvTx(long id) { + return transactions.get(id2index.get(id)); + } + /** * Gets the all waves. * @@ -280,6 +286,7 @@ public class TextDbLoader implements IWaveformDbLoader { /** The attr value lut. */ Map attrValueLut = new HashMap<>(); + long indexCount = 0; /** * Instantiates a new text db parser. * @@ -367,7 +374,6 @@ public class TextDbLoader implements IWaveformDbLoader { nextLine = reader.readLine(); } } - txSink.put(id, scvTx); transactionById.put(id, scvTx); } else if ("tx_end".equals(tokens[0])) { Long id = Long.parseLong(tokens[1]); @@ -401,6 +407,9 @@ public class TextDbLoader implements IWaveformDbLoader { nextLine = reader.readLine(); } } + txSink.put(indexCount, scvTx); + loader.id2index.put(scvTx.getId(), indexCount++); + transactionById.remove(id); } else if ("tx_relation".equals(tokens[0])) { Long tr2 = Long.parseLong(tokens[2]); Long tr1 = Long.parseLong(tokens[3]); diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java index 3f288b1..10af42a 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java @@ -113,7 +113,7 @@ class Tx implements ITx { return true; if (obj == null || getClass() != obj.getClass()) return false; - return this.getScvTx().equals(((Tx) obj).getScvTx()); + return this.loader.getScvTx(id).equals(((Tx) obj).loader.getScvTx(id)); } /** @@ -123,7 +123,7 @@ class Tx implements ITx { */ @Override public int hashCode() { - return getScvTx().hashCode(); + return loader.getScvTx(id).hashCode(); } /** @@ -143,7 +143,7 @@ class Tx implements ITx { */ @Override public Long getId() { - return getScvTx().id; + return loader.getScvTx(id).id; } /** @@ -153,7 +153,7 @@ class Tx implements ITx { */ @Override public IWaveform getStream() { - return loader.txStreams.get(getScvTx().streamId); + return loader.txStreams.get(loader.getScvTx(id).streamId); } /** @@ -163,7 +163,7 @@ class Tx implements ITx { */ @Override public ITxGenerator getGenerator() { - return loader.txGenerators.get(getScvTx().generatorId); + return loader.txGenerators.get(loader.getScvTx(id).generatorId); } /** @@ -174,7 +174,7 @@ class Tx implements ITx { @Override public Long getBeginTime() { if (beginTime < 0) - beginTime = getScvTx().beginTime; + beginTime = loader.getScvTx(id).beginTime; return beginTime; } @@ -186,7 +186,7 @@ class Tx implements ITx { @Override public Long getEndTime() { if (endTime < 0) - endTime = getScvTx().endTime; + endTime = loader.getScvTx(id).endTime; return endTime; } @@ -196,7 +196,7 @@ class Tx implements ITx { * @param time the new end time */ void setEndTime(Long time) { - getScvTx().endTime = time; + loader.getScvTx(id).endTime = time; } /** @@ -225,15 +225,7 @@ class Tx implements ITx { */ @Override public List getAttributes() { - return getScvTx().attributes; + return loader.getScvTx(id).attributes; } - /** - * Gets the scv tx. - * - * @return the scv tx - */ - private ScvTx getScvTx() { - return loader.transactions.get(id); - } } diff --git a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java index 761c264..7ee3fc1 100644 --- a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java +++ b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java @@ -120,5 +120,15 @@ public class DatabaseServicesTest { assertEquals(1, waveformDb.getChildNodes().size()); } + @Test + public void testLargeTxText() throws Exception { + File f = new File("inputs/hw_config_10_10.txlog").getAbsoluteFile(); + assertTrue(f.exists()); + waveformDb.load(f); + assertNotNull(waveformDb); + List waveforms = waveformDb.getAllWaves(); + assertEquals(100, waveforms.size()); + assertEquals(1, waveformDb.getChildNodes().size()); + } }