diff --git a/.gitignore b/.gitignore
index 196589c..8beb988 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,5 @@ SCViewer.xcf
SCViewer_1.png
copyrightLog.txt
/workspace
-?*.launch
\ No newline at end of file
+?*.launch
+/.settings/
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f..0000000
--- a/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/features/com.minres.scviewer.database.feature/pom.xml b/features/com.minres.scviewer.database.feature/pom.xml
index 0f58de8..ea25b11 100644
--- a/features/com.minres.scviewer.database.feature/pom.xml
+++ b/features/com.minres.scviewer.database.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
3.0.0-SNAPSHOT
diff --git a/features/com.minres.scviewer.e4.feature/pom.xml b/features/com.minres.scviewer.e4.feature/pom.xml
index fc19d09..d57ec1c 100644
--- a/features/com.minres.scviewer.e4.feature/pom.xml
+++ b/features/com.minres.scviewer.e4.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
1.1.0-SNAPSHOT
diff --git a/features/com.minres.scviewer.e4.platform.feature/feature.xml b/features/com.minres.scviewer.e4.platform.feature/feature.xml
index 574cc69..5909688 100644
--- a/features/com.minres.scviewer.e4.platform.feature/feature.xml
+++ b/features/com.minres.scviewer.e4.platform.feature/feature.xml
@@ -29,6 +29,10 @@
id="org.eclipse.emf.common"
version="0.0.0"/>
+
+
diff --git a/features/com.minres.scviewer.e4.platform.feature/pom.xml b/features/com.minres.scviewer.e4.platform.feature/pom.xml
index cb14643..5dbe3e1 100644
--- a/features/com.minres.scviewer.e4.platform.feature/pom.xml
+++ b/features/com.minres.scviewer.e4.platform.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
1.0.0-SNAPSHOT
diff --git a/features/com.minres.scviewer.feature/pom.xml b/features/com.minres.scviewer.feature/pom.xml
index 218d89b..ad64afc 100644
--- a/features/com.minres.scviewer.feature/pom.xml
+++ b/features/com.minres.scviewer.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
1.1.0-SNAPSHOT
diff --git a/features/com.minres.scviewer.ui.feature/pom.xml b/features/com.minres.scviewer.ui.feature/pom.xml
index 3119e8b..a39b1bc 100644
--- a/features/com.minres.scviewer.ui.feature/pom.xml
+++ b/features/com.minres.scviewer.ui.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
1.1.0-SNAPSHOT
diff --git a/plugins/com.minres.scviewer.database.sqlite/.classpath b/plugins/com.minres.scviewer.database.sqlite/.classpath
index fcfc28f..79ddf81 100644
--- a/plugins/com.minres.scviewer.database.sqlite/.classpath
+++ b/plugins/com.minres.scviewer.database.sqlite/.classpath
@@ -1,6 +1,6 @@
-
+
diff --git a/plugins/com.minres.scviewer.database.sqlite/.settings/org.eclipse.jdt.core.prefs b/plugins/com.minres.scviewer.database.sqlite/.settings/org.eclipse.jdt.core.prefs
index 9f6ece8..7adc0fb 100644
--- a/plugins/com.minres.scviewer.database.sqlite/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/com.minres.scviewer.database.sqlite/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,10 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/plugins/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF
index 52eafa7..90c5dab 100644
--- a/plugins/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF
+++ b/plugins/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: SQLite transaction database
Bundle-SymbolicName: com.minres.scviewer.database.sqlite
Bundle-Version: 1.1.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0"
Bundle-ClassPath: .,sqlite-jdbc-3.8.7.jar
Service-Component: OSGI-INF/component.xml
diff --git a/plugins/com.minres.scviewer.database.sqlite/pom.xml b/plugins/com.minres.scviewer.database.sqlite/pom.xml
index 8b9b387..5df3451 100644
--- a/plugins/com.minres.scviewer.database.sqlite/pom.xml
+++ b/plugins/com.minres.scviewer.database.sqlite/pom.xml
@@ -4,7 +4,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java
index 86a2ff6..cb46eff 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java
@@ -14,12 +14,13 @@ import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.NavigableMap;
-import java.util.TreeMap;
+import com.minres.scviewer.database.EventEntry;
import com.minres.scviewer.database.EventKind;
import com.minres.scviewer.database.HierNode;
import com.minres.scviewer.database.IEvent;
+import com.minres.scviewer.database.IEventList;
+import com.minres.scviewer.database.EventList;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.RelationType;
import com.minres.scviewer.database.RelationTypeFactory;
@@ -35,7 +36,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
private Integer maxConcurrency;
- private TreeMap events;
+ private IEventList events;
private List usedRelationsList;
@@ -71,9 +72,9 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
}
@Override
- public NavigableMap getEvents(){
+ public IEventList getEvents(){
if(events==null){
- events=new TreeMap<>();
+ events=new EventList();
for(Entry entry:getTransactions().entrySet()){
putEvent(new TxEvent(EventKind.BEGIN, entry.getValue()));
putEvent(new TxEvent(EventKind.END, entry.getValue()));
@@ -83,22 +84,13 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
}
private void putEvent(TxEvent ev){
- Long time = ev.getTime();
- if(events.containsKey(time)) {
- IEvent[] oldV = events.get(time);
- IEvent[] newV = new IEvent[oldV.length+1];
- System.arraycopy(oldV, 0, newV, 0, oldV.length);
- newV[oldV.length]=ev;
- events.put(time, newV);
- } else {
- events.put(time, new IEvent[] {ev});
- }
+ events.put(ev.getTime(), ev);
}
protected abstract Map getTransactions();
@Override
- public IEvent[] getEventsAtTime(Long time) {
+ public IEvent[] getEventsAtTime(long time) {
return getEvents().get(time);
}
@@ -113,12 +105,12 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
}
@Override
- public IEvent[] getEventsBeforeTime(Long time) {
- Entry e = events.floorEntry(time);
+ public IEvent[] getEventsBeforeTime(long time) {
+ EventEntry e = events.floorEntry(time);
if(e==null)
return new IEvent[]{};
else
- return events.floorEntry(time).getValue();
+ return events.floorEntry(time).events;
}
@Override
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java
index b7bb167..cf027af 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java
@@ -48,7 +48,7 @@ public class SQLiteDbLoader implements IWaveformDbLoader {
protected PropertyChangeSupport pcs = new PropertyChangeSupport(this);
@Override
- public Long getMaxTime() {
+ public long getMaxTime() {
SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler<>(ScvTxEvent.class,
database, "time = (SELECT MAX(time) FROM ScvTxEvent)");
try {
@@ -56,7 +56,7 @@ public class SQLiteDbLoader implements IWaveformDbLoader {
if(!event.isEmpty())
return event.get(0).getTime()*scvSimProps.getTime_resolution();
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
e.printStackTrace();
}
return 0L;
@@ -73,7 +73,7 @@ public class SQLiteDbLoader implements IWaveformDbLoader {
streams.add(stream);
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
}
return streams;
}
@@ -109,7 +109,7 @@ public class SQLiteDbLoader implements IWaveformDbLoader {
}
pcs.firePropertyChange(IWaveformDbLoader.LOADING_FINISHED, null, null);
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
throw new InputFormatException(e.toString());
}
}
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java
index 8b4aae3..634818b 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java
@@ -37,8 +37,8 @@ public class Tx implements ITx {
private TxGenerator trGenerator;
private ScvTx scvTx;
private List attributes;
- private Long begin;
- private Long end;
+ private long begin=-1;
+ private long end=-1;
private List incoming;
private List outgoing;
@@ -50,7 +50,7 @@ public class Tx implements ITx {
}
@Override
- public Long getId() {
+ public long getId() {
return (long) scvTx.getId();
}
@@ -69,8 +69,8 @@ public class Tx implements ITx {
}
@Override
- public Long getBeginTime() {
- if(begin==null){
+ public long getBeginTime() {
+ if(begin<0){
SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler<>(ScvTxEvent.class,
database, "tx="+scvTx.getId()+" AND type="+ AssociationType.BEGIN.ordinal());
try {
@@ -78,15 +78,15 @@ public class Tx implements ITx {
begin= scvEvent.getTime()*(Long)database.getData("TIMERESOLUTION");
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
}
}
return begin;
}
@Override
- public Long getEndTime() {
- if(end==null){
+ public long getEndTime() {
+ if(end<0){
SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler<>(ScvTxEvent.class,
database, "tx="+scvTx.getId()+" AND type="+ AssociationType.END.ordinal());
try {
@@ -94,7 +94,7 @@ public class Tx implements ITx {
end = scvEvent.getTime()*(Long)database.getData("TIMERESOLUTION");
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
}
}
return end;
@@ -112,7 +112,7 @@ public class Tx implements ITx {
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
}
}
return attributes;
@@ -129,7 +129,7 @@ public class Tx implements ITx {
incoming.add(createRelation(scvRelation, false));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
}
}
return incoming;
@@ -146,7 +146,7 @@ public class Tx implements ITx {
outgoing.add(createRelation(scvRelation, true));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
}
}
return outgoing;
@@ -169,7 +169,7 @@ public class Tx implements ITx {
else
return new TxRelation(trStream.getRelationType(rel.getName()), that, this);
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
e.printStackTrace();
}
@@ -178,11 +178,11 @@ public class Tx implements ITx {
@Override
public int compareTo(ITx o) {
- int res = this.getBeginTime().compareTo(o.getBeginTime());
+ int res = Long.compare(this.getBeginTime(), o.getBeginTime());
if(res!=0)
return res;
else
- return this.getId().compareTo(o.getId());
+ return Long.compare(this.getId(), o.getId());
}
@Override
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java
index b52bc41..14d5b6f 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java
@@ -28,7 +28,7 @@ public class TxEvent implements ITxEvent {
}
@Override
- public Long getTime() {
+ public long getTime() {
return type==EventKind.BEGIN?tx.getBeginTime():tx.getEndTime();
}
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java
index 1bcaca9..c773d84 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java
@@ -39,7 +39,7 @@ public class TxGenerator extends AbstractTxStream {
}
@Override
- public Long getId() {
+ public long getId() {
return (long) scvGenerator.getId();
}
@@ -50,7 +50,7 @@ public class TxGenerator extends AbstractTxStream {
@Override
public boolean isSame(IWaveform other) {
- return(other instanceof TxGenerator && this.getId().equals(other.getId()));
+ return(other instanceof TxGenerator && this.getId() == other.getId());
}
@Override
@@ -69,7 +69,7 @@ public class TxGenerator extends AbstractTxStream {
transactions.put(scvTx.getId(), new Tx(database, (TxStream) stream, this, scvTx));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
e.printStackTrace();
}
}
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java
index 57f2ab4..a628600 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java
@@ -49,7 +49,7 @@ public class TxStream extends AbstractTxStream {
}
@Override
- public Long getId() {
+ public long getId() {
return (long) scvStream.getId();
}
@@ -63,7 +63,7 @@ public class TxStream extends AbstractTxStream {
generators.put(scvGenerator.getId(), new TxGenerator(database, this, scvGenerator));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
e.printStackTrace();
}
}
@@ -81,7 +81,7 @@ public class TxStream extends AbstractTxStream {
transactions.put(scvTx.getId(), new Tx(database, this, generators.get(scvTx.getGenerator()), scvTx));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
- | InvocationTargetException | SQLException | IntrospectionException e) {
+ | InvocationTargetException | SQLException | IntrospectionException | NoSuchMethodException e) {
e.printStackTrace();
}
}
@@ -89,13 +89,13 @@ public class TxStream extends AbstractTxStream {
}
@Override
- public IEvent[] getEventsAtTime(Long time) {
+ public IEvent[] getEventsAtTime(long time) {
return getEvents().get(time);
}
@Override
public boolean isSame(IWaveform other) {
- return(other instanceof TxStream && this.getId().equals(other.getId()));
+ return(other instanceof TxStream && this.getId() == other.getId());
}
@Override
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabaseSelectHandler.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabaseSelectHandler.java
index 68b9f2a..7bb578f 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabaseSelectHandler.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabaseSelectHandler.java
@@ -75,10 +75,11 @@ public class SQLiteDatabaseSelectHandler extends AbstractDatabaseHandler {
* @throws IllegalAccessException
* @throws IntrospectionException
* @throws InvocationTargetException
+ * @throws NoSuchMethodException
*/
public synchronized List selectObjects() throws SQLException,
InstantiationException, IllegalAccessException,
- IntrospectionException, InvocationTargetException {
+ IntrospectionException, InvocationTargetException, IllegalArgumentException, NoSuchMethodException, SecurityException {
Connection connection = null;
Statement statement = null;
@@ -113,17 +114,18 @@ public class SQLiteDatabaseSelectHandler extends AbstractDatabaseHandler {
* @throws IllegalAccessException
* @throws IntrospectionException
* @throws InvocationTargetException
+ * @throws NoSuchMethodException
*/
private List createObjects(ResultSet resultSet)
throws SQLException, InstantiationException,
IllegalAccessException, IntrospectionException,
- InvocationTargetException {
+ InvocationTargetException, IllegalArgumentException, NoSuchMethodException, SecurityException {
List list = new ArrayList<>();
while (resultSet.next()) {
- T instance = type.newInstance();
+ T instance = type.getDeclaredConstructor().newInstance();
for (Field field : type.getDeclaredFields()) {
diff --git a/plugins/com.minres.scviewer.database.text/.classpath b/plugins/com.minres.scviewer.database.text/.classpath
index 384de53..3f4be5c 100644
--- a/plugins/com.minres.scviewer.database.text/.classpath
+++ b/plugins/com.minres.scviewer.database.text/.classpath
@@ -1,10 +1,6 @@
-
-
-
-
-
+
diff --git a/plugins/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.core.prefs b/plugins/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.core.prefs
index 4e4a3ad..e8c450c 100644
--- a/plugins/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.core.prefs
@@ -1,9 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/plugins/com.minres.scviewer.database.text/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.database.text/META-INF/MANIFEST.MF
index 5fe834b..5c2244e 100644
--- a/plugins/com.minres.scviewer.database.text/META-INF/MANIFEST.MF
+++ b/plugins/com.minres.scviewer.database.text/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Textual transaction database
Bundle-SymbolicName: com.minres.scviewer.database.text
-Bundle-Version: 3.0.0.qualifier
+Bundle-Version: 4.0.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
Import-Package: org.osgi.framework;version="1.3.0"
Require-Bundle: com.minres.scviewer.database,
org.eclipse.osgi.services;bundle-version="3.4.0",
diff --git a/plugins/com.minres.scviewer.database.text/pom.xml b/plugins/com.minres.scviewer.database.text/pom.xml
index 74d6a56..d3971c3 100644
--- a/plugins/com.minres.scviewer.database.text/pom.xml
+++ b/plugins/com.minres.scviewer.database.text/pom.xml
@@ -2,11 +2,11 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.minres.scviewer.database.text
- 3.0.0-SNAPSHOT
+ 4.0.0-SNAPSHOT
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
eclipse-plugin
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 33a4a2a..4ea449d 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
@@ -12,14 +12,13 @@
package com.minres.scviewer.database.text;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
-import java.util.Map.Entry;
-import java.util.NavigableMap;
-import java.util.TreeMap;
+import com.minres.scviewer.database.EventEntry;
+import com.minres.scviewer.database.EventList;
import com.minres.scviewer.database.HierNode;
import com.minres.scviewer.database.IEvent;
+import com.minres.scviewer.database.IEventList;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.WaveformType;
import com.minres.scviewer.database.tx.ITx;
@@ -30,6 +29,8 @@ import com.minres.scviewer.database.tx.ITxEvent;
*/
abstract class AbstractTxStream extends HierNode implements IWaveform {
+ private final String fullName;
+
/** The id. */
private Long id;
@@ -37,7 +38,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
protected TextDbLoader loader;
/** The events. */
- TreeMap events = new TreeMap<>();
+ IEventList events = new EventList();
/** The max concurrency. */
private int rowCount = -1;
@@ -51,24 +52,27 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
*/
protected AbstractTxStream(TextDbLoader loader, Long id, String name) {
super(name);
+ fullName=name;
this.loader = loader;
this.id = id;
}
+ /**
+ * Gets the full hierarchical name.
+ *
+ * @return the full name
+ */
+ @Override
+ public String getFullName() {
+ return fullName;
+ }
/**
* Adds the event.
*
* @param evt the evt
*/
public void addEvent(ITxEvent evt) {
- if (!events.containsKey(evt.getTime()))
- events.put(evt.getTime(), new IEvent[] { evt });
- else {
- IEvent[] evts = events.get(evt.getTime());
- IEvent[] newEvts = Arrays.copyOf(evts, evts.length + 1);
- newEvts[evts.length] = evt;
- events.put(evt.getTime(), newEvts);
- }
+ events.put(evt.getTime(), evt);
}
/**
@@ -77,7 +81,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
* @return the events
*/
@Override
- public NavigableMap getEvents() {
+ public IEventList getEvents() {
return events;
}
@@ -88,7 +92,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
* @return the events at time
*/
@Override
- public IEvent[] getEventsAtTime(Long time) {
+ public IEvent[] getEventsAtTime(long time) {
return events.get(time);
}
@@ -99,12 +103,12 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
* @return the events before time
*/
@Override
- public IEvent[] getEventsBeforeTime(Long time) {
- Entry e = events.floorEntry(time);
+ public IEvent[] getEventsBeforeTime(long time) {
+ EventEntry e = events.floorEntry(time);
if (e == null)
return new IEvent[] {};
else
- return events.floorEntry(time).getValue();
+ return events.floorEntry(time).events;
}
/**
@@ -123,7 +127,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
* @return the id
*/
@Override
- public Long getId() {
+ public long getId() {
return id;
}
@@ -147,8 +151,8 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
return;
ArrayList rowEndTime = new ArrayList<>();
HashMap rowByTxId = new HashMap<>();
- for(Entry entry: events.entrySet()) {
- for(IEvent evt:entry.getValue()) {
+ for(EventEntry entry: events) {
+ for(IEvent evt:entry.events) {
TxEvent txEvt = (TxEvent) evt;
ITx tx = txEvt.getTransaction();
int rowIdx = 0;
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 0ec1809..855d9c3 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
@@ -131,7 +131,7 @@ public class TextDbLoader implements IWaveformDbLoader {
* @return the max time
*/
@Override
- public Long getMaxTime() {
+ public long getMaxTime() {
return maxTime;
}
@@ -167,7 +167,9 @@ public class TextDbLoader implements IWaveformDbLoader {
*/
@Override
public Collection getAllWaves() {
- return new ArrayList<>(txStreams.values());
+ ArrayList ret = new ArrayList<>(txStreams.values());
+ ret.addAll(txGenerators.values());
+ return ret;
}
/**
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 9b1b9d6..88af0bf 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
@@ -102,11 +102,11 @@ class Tx implements ITx {
*/
@Override
public int compareTo(ITx o) {
- int res = getBeginTime().compareTo(o.getBeginTime());
+ int res = Long.compare(getBeginTime(), o.getBeginTime());
if (res != 0)
return res;
else
- return getId().compareTo(o.getId());
+ return Long.compare(getId(), o.getId());
}
/**
@@ -150,7 +150,7 @@ class Tx implements ITx {
* @return the id
*/
@Override
- public Long getId() {
+ public long getId() {
return getScvTx().id;
}
@@ -180,7 +180,7 @@ class Tx implements ITx {
* @return the begin time
*/
@Override
- public Long getBeginTime() {
+ public long getBeginTime() {
if (beginTime < 0) {
ScvTx tx = scvTx==null?loader.getScvTx(id):getScvTx();
beginTime = tx.beginTime;
@@ -195,7 +195,7 @@ class Tx implements ITx {
* @return the end time
*/
@Override
- public Long getEndTime() {
+ public long getEndTime() {
if (endTime < 0) {
ScvTx tx = scvTx==null?loader.getScvTx(id):getScvTx();
beginTime = tx.beginTime;
diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java
index 5758e8e..607b25f 100644
--- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java
+++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java
@@ -95,7 +95,7 @@ class TxEvent implements ITxEvent {
* @return the time
*/
@Override
- public Long getTime() {
+ public long getTime() {
return time;
}
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 a6597d1..64c4b3f 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
@@ -52,7 +52,7 @@ class TxGenerator extends AbstractTxStream {
*/
@Override
public boolean isSame(IWaveform other) {
- return (other instanceof TxGenerator && this.getId().equals(other.getId()));
+ return (other instanceof TxGenerator && this.getId()==other.getId());
}
/**
@@ -82,5 +82,15 @@ class TxGenerator extends AbstractTxStream {
public String getKind() {
return stream.getKind();
}
+
+ /**
+ * Gets the full hierarchical name.
+ *
+ * @return the full name
+ */
+ @Override
+ public String getFullName() {
+ return ((AbstractTxStream)parent).getFullName()+"."+name;
+ }
}
diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java
index 47e8112..2b07cad 100644
--- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java
+++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java
@@ -42,7 +42,7 @@ class TxStream extends AbstractTxStream {
*/
@Override
public boolean isSame(IWaveform other) {
- return (other instanceof TxStream && this.getId().equals(other.getId()));
+ return (other instanceof TxStream && this.getId() == other.getId());
}
/**
diff --git a/plugins/com.minres.scviewer.database.ui.swt/.classpath b/plugins/com.minres.scviewer.database.ui.swt/.classpath
index 43b9862..1db08c6 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/.classpath
+++ b/plugins/com.minres.scviewer.database.ui.swt/.classpath
@@ -1,6 +1,6 @@
-
+
diff --git a/plugins/com.minres.scviewer.database.ui.swt/.settings/org.eclipse.jdt.core.prefs b/plugins/com.minres.scviewer.database.ui.swt/.settings/org.eclipse.jdt.core.prefs
index ddb046a..0a52588 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/com.minres.scviewer.database.ui.swt/.settings/org.eclipse.jdt.core.prefs
@@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul
org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -21,6 +21,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -66,6 +67,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=igno
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
@@ -98,5 +100,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/plugins/com.minres.scviewer.database.ui.swt/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.database.ui.swt/META-INF/MANIFEST.MF
index af0a021..a00e2e4 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/META-INF/MANIFEST.MF
+++ b/plugins/com.minres.scviewer.database.ui.swt/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: SWT database widget
Bundle-SymbolicName: com.minres.scviewer.database.ui.swt
-Bundle-Version: 3.0.0.qualifier
+Bundle-Version: 4.0.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
Require-Bundle: org.eclipse.swt;bundle-version="3.103.1",
com.minres.scviewer.database;bundle-version="1.0.0",
com.google.guava;bundle-version="15.0.0",
diff --git a/plugins/com.minres.scviewer.database.ui.swt/pom.xml b/plugins/com.minres.scviewer.database.ui.swt/pom.xml
index e398c83..836a34a 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/pom.xml
+++ b/plugins/com.minres.scviewer.database.ui.swt/pom.xml
@@ -5,8 +5,8 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
- 3.0.0-SNAPSHOT
+ 4.0.0-SNAPSHOT
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java
index e5b6cc7..7a817d3 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java
@@ -38,7 +38,7 @@ public class ArrowPainter implements IPainter {
private int yCtrlOffset = 30;
- private WaveformCanvas waveCanvas;
+ private final WaveformCanvas waveCanvas;
private ITx tx;
@@ -54,8 +54,6 @@ public class ArrowPainter implements IPainter {
long scaleFactor;
- boolean deferUpdate;
-
public ArrowPainter(WaveformCanvas waveCanvas, RelationType relationType) {
this.waveCanvas = waveCanvas;
highlightType=relationType;
@@ -85,20 +83,20 @@ public class ArrowPainter implements IPainter {
}
private int getConcurrencyIndex(ITx tx) {
- IEvent[] eventList = tx.getStream().getEvents().floorEntry(tx.getBeginTime()).getValue();
+ IEvent[] eventList = tx.getStream().getEventsBeforeTime(tx.getBeginTime());
Optional res = Arrays.stream(eventList).map(e -> ((ITxEvent)e).getRowIndex()).findFirst();
return res.isPresent()? res.get():0;
}
- protected void calculateGeometries() {
- deferUpdate = false;
+ protected boolean calculateGeometries() {
iRect.clear();
oRect.clear();
IWaveformPainter painter = waveCanvas.wave2painterMap.get(tx.getStream());
+ if(painter == null)
+ painter = waveCanvas.wave2painterMap.get(tx.getGenerator());
if (painter == null) { // stream has been added but painter not yet
// created
- deferUpdate = true;
- return;
+ return true;
}
int laneHeight = painter.getHeight() / tx.getStream().getRowCount();
txRectangle = new Rectangle((int) (tx.getBeginTime() / scaleFactor),
@@ -106,6 +104,7 @@ public class ArrowPainter implements IPainter {
(int) ((tx.getEndTime() - tx.getBeginTime()) / scaleFactor), laneHeight);
deriveGeom(tx.getIncomingRelations(), iRect, false);
deriveGeom(tx.getOutgoingRelations(), oRect, true);
+ return false;
}
protected void deriveGeom(Collection relations, List res, boolean useTarget) {
@@ -160,11 +159,9 @@ public class ArrowPainter implements IPainter {
Color highliteColor = waveCanvas.styleProvider.getColor(WaveformColors.REL_ARROW_HIGHLITE);
if(tx==null) return;
- if (!deferUpdate) {
- scaleFactor = waveCanvas.getScaleFactor();
- calculateGeometries();
- }
- if(deferUpdate) return;
+ scaleFactor = waveCanvas.getScaleFactor();
+ if(calculateGeometries())
+ return;
int correctionValue = (int)(selectionOffset);
Rectangle correctedTargetRectangle = new Rectangle(txRectangle.x+correctionValue, txRectangle.y, txRectangle.width, txRectangle.height);
for (LinkEntry entry : iRect) {
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/RulerPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/RulerPainter.java
index 8408294..275ed94 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/RulerPainter.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/RulerPainter.java
@@ -19,7 +19,7 @@ import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.wb.swt.SWTResourceManager;
public class RulerPainter implements IPainter {
- protected WaveformCanvas waveCanvas;
+ protected final WaveformCanvas waveCanvas;
static final int RULER_TICK_MINOR = 10;
static final int RULER_TICK_MAJOR = 100;
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/SignalPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/SignalPainter.java
index 40a5bc9..449e884 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/SignalPainter.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/SignalPainter.java
@@ -12,8 +12,6 @@ package com.minres.scviewer.database.ui.swt.internal;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Map.Entry;
-import java.util.NavigableMap;
import javax.swing.JPanel;
@@ -26,7 +24,9 @@ import org.eclipse.swt.graphics.Rectangle;
import com.minres.scviewer.database.BitVector;
import com.minres.scviewer.database.DoubleVal;
+import com.minres.scviewer.database.EventEntry;
import com.minres.scviewer.database.IEvent;
+import com.minres.scviewer.database.IEventList;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.ui.TrackEntry;
import com.minres.scviewer.database.ui.WaveformColors;
@@ -37,16 +37,16 @@ public class SignalPainter extends TrackPainter {
IEvent value;
boolean fromMap;
- public SignalChange(Entry entry) {
- time = entry.getKey();
- value = entry.getValue()[0];
+ public SignalChange(EventEntry entry) {
+ time = entry.timestamp;
+ value = entry.events[0];
fromMap = true;
}
- public void set(Entry entry, Long actTime) {
+ public void set(EventEntry entry, Long actTime) {
if (entry != null) {
- time = entry.getKey();
- value = entry.getValue()[0];
+ time = entry.timestamp;
+ value = entry.events[0];
fromMap = true;
} else {
time = actTime;
@@ -100,21 +100,16 @@ public class SignalPainter extends TrackPainter {
long beginTime = beginPos*scaleFactor;
long endTime = beginTime + area.width*scaleFactor;
- Entry first = signal.getEvents().floorEntry(beginTime);
- Entry last = signal.getEvents().floorEntry(endTime);
- if (first == null) {
- if (last == null)
- return;
+ EventEntry first = signal.getEvents().floorEntry(beginTime);
+ if (first == null)
first = signal.getEvents().firstEntry();
- } else if (last == null) {
- last = signal.getEvents().lastEntry();
- }
+ beginTime = first.timestamp;
proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE));
proj.setLineStyle(SWT.LINE_SOLID);
proj.setLineWidth(1);
- NavigableMap entries = signal.getEvents().subMap(first.getKey(), false, last.getKey(), true);
- SignalChange left = new SignalChange(first);
- SignalChange right = new SignalChange(entries.size() > 0 ? entries.firstEntry() : first);
+ IEventList entries = signal.getEvents().subMap(beginTime, true, endTime);
+ SignalChange left = new SignalChange(entries.firstEntry());
+ SignalChange right = new SignalChange(entries.size() > 1 ? entries.higherEntry(left.time) : entries.firstEntry());
maxPosX = area.x + area.width;
yOffsetT = this.waveCanvas.styleProvider.getTrackHeight() / 5 + area.y;
yOffsetM = this.waveCanvas.styleProvider.getTrackHeight() / 2 + area.y;
@@ -153,15 +148,15 @@ public class SignalPainter extends TrackPainter {
if (xSigChangeEndPos == xSigChangeBeginPos) {
multiple = true;
long eTime = (xSigChangeBeginPos + 1) * this.waveCanvas.getScaleFactor();
- Entry entry = entries.floorEntry(eTime);
- if(entry!=null && entry.getKey()> right.time)
+ EventEntry entry = entries.floorEntry(eTime);
+ if(entry!=null && entry.timestamp> right.time)
right.set(entry, endTime);
xSigChangeEndPos = getXPosEnd(eTime);
}
} while (left.time < endTime);
}
- private SignalStencil getStencil(GC gc, SignalChange left, NavigableMap entries) {
+ private SignalStencil getStencil(GC gc, SignalChange left, IEventList entries) {
IEvent val = left.value;
if(val instanceof BitVector) {
BitVector bv = (BitVector) val;
@@ -253,15 +248,15 @@ public class SignalPainter extends TrackPainter {
private long maxVal;
private long minVal;
double yRange = (yOffsetB-yOffsetT);
- public MultiBitStencilAnalog(NavigableMap entries, Object left, boolean continous, boolean signed) {
+ public MultiBitStencilAnalog(IEventList entries, Object left, boolean continous, boolean signed) {
this.continous=continous;
this.signed=signed;
- Collection values = entries.values();
+ Collection ievents = entries.entrySet();
minVal=signed?((BitVector)left).toSignedValue():((BitVector)left).toUnsignedValue();
- if(!values.isEmpty()) {
+ if(!ievents.isEmpty()) {
maxVal=minVal;
- for (IEvent[] tp : entries.values())
- for(IEvent e: tp) {
+ for (EventEntry tp : ievents)
+ for(IEvent e: tp.events) {
long v = signed?((BitVector)e).toSignedValue():((BitVector)e).toUnsignedValue();
maxVal=Math.max(maxVal, v);
minVal=Math.min(minVal, v);
@@ -358,15 +353,15 @@ public class SignalPainter extends TrackPainter {
boolean continous=true;
- public RealStencil(NavigableMap entries, Object left, boolean continous) {
+ public RealStencil(IEventList entries, Object left, boolean continous) {
this.continous=continous;
- Collection values = entries.values();
+ Collection values = entries.entrySet();
minVal=(Double) left;
range=2.0;
if(!values.isEmpty()) {
double maxVal=minVal;
- for (IEvent[] val : entries.values())
- for(IEvent e:val) {
+ for (EventEntry val : values)
+ for(IEvent e:val.events) {
double v = ((DoubleVal)e).value;
if(Double.isNaN(maxVal))
maxVal=v;
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java
index ab5274e..75780da 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package com.minres.scviewer.database.ui.swt.internal;
-import java.util.Map.Entry;
-import java.util.NavigableMap;
import java.util.TreeMap;
import org.eclipse.swt.SWT;
@@ -19,8 +17,10 @@ import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
+import com.minres.scviewer.database.EventEntry;
import com.minres.scviewer.database.EventKind;
import com.minres.scviewer.database.IEvent;
+import com.minres.scviewer.database.IEventList;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.tx.ITx;
import com.minres.scviewer.database.tx.ITxEvent;
@@ -36,6 +36,7 @@ public class StreamPainter extends TrackPainter{
private IWaveform stream;
private int txBase;
private int txHeight;
+ // TODO: remove TreeMap usage
private TreeMap seenTx;
public StreamPainter(WaveformCanvas waveCanvas, boolean even, TrackEntry trackEntry) {
@@ -46,8 +47,16 @@ public class StreamPainter extends TrackPainter{
}
public void paintArea(Projection proj, Rectangle area) {
- if(stream.getEvents().size()==0) return;
int trackHeight=trackEntry.height/stream.getRowCount();
+ if(stream.getEvents().size()==0) {
+ proj.setFillRule(SWT.FILL_EVEN_ODD);
+ proj.setLineStyle(SWT.LINE_SOLID);
+ proj.setLineWidth(1);
+ proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE));
+ for( int y1=area.y+trackHeight/2; y1 firstTx=stream.getEvents().floorEntry(beginTime);
- Entry lastTx=stream.getEvents().ceilingEntry(endTime);
- if(firstTx==null) firstTx = stream.getEvents().firstEntry();
- if(lastTx==null) lastTx=stream.getEvents().lastEntry();
+ IEventList events = stream.getEvents();
+ EventEntry firstTx = events.floorEntry(beginTime);
+ EventEntry lastTx = events.ceilingEntry(endTime);
+ if(firstTx==null) firstTx = events.firstEntry();
+ if(lastTx==null) lastTx = events.lastEntry();
proj.setFillRule(SWT.FILL_EVEN_ODD);
proj.setLineStyle(SWT.LINE_SOLID);
proj.setLineWidth(1);
@@ -75,16 +85,15 @@ public class StreamPainter extends TrackPainter{
for( int y1=area.y+trackHeight/2; y1 entries = stream.getEvents().subMap(firstTx.getKey(), true, lastTx.getKey(), true);
ITxEvent highlighed=null;
proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE));
long selectedId=waveCanvas.currentSelection!=null? waveCanvas.currentSelection.getId():-1;
- for(Entry entry: entries.entrySet())
- for(IEvent e:entry.getValue()){
+ for(EventEntry entry: events.subMap(firstTx.timestamp, true, lastTx.timestamp))
+ for(IEvent e:entry.events){
ITxEvent evt = (ITxEvent) e;
ITx tx = evt.getTransaction();
if(selectedId==tx.getId())
@@ -146,12 +155,12 @@ public class StreamPainter extends TrackPainter{
public ITx getClicked(Point point) {
int lane=point.y/waveCanvas.styleProvider.getTrackHeight();
- Entry firstTx=stream.getEvents().floorEntry(point.x*waveCanvas.getScaleFactor());
+ EventEntry firstTx=stream.getEvents().floorEntry(point.x*waveCanvas.getScaleFactor());
if(firstTx!=null){
do {
- ITx tx = getTxFromEntry(lane, point.x, firstTx);
+ ITx tx = getTxFromEntry(lane, point.x, firstTx.events);
if(tx!=null) return tx;
- firstTx=stream.getEvents().lowerEntry(firstTx.getKey());
+ firstTx=stream.getEvents().lowerEntry(firstTx.timestamp);
}while(firstTx!=null);
}
return null;
@@ -165,11 +174,11 @@ public class StreamPainter extends TrackPainter{
this.stream = stream;
}
- protected ITx getTxFromEntry(int lane, int offset, Entry firstTx) {
+ protected ITx getTxFromEntry(int lane, int offset, IEvent[] firstTx) {
long timePoint=offset*waveCanvas.getScaleFactor();
long timePointLow=(offset-5)*waveCanvas.getScaleFactor();
long timePointHigh=(offset+5)*waveCanvas.getScaleFactor();
- for(IEvent e:firstTx.getValue()){
+ for(IEvent e:firstTx){
if(e instanceof ITxEvent) {
ITxEvent evt = (ITxEvent) e;
ITx tx=evt.getTransaction();
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java
index af89087..e96ee6c 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java
@@ -34,6 +34,7 @@ import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.ScrollBar;
import com.google.common.collect.Lists;
+import com.minres.scviewer.database.EventEntry;
import com.minres.scviewer.database.IEvent;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.RelationType;
@@ -179,10 +180,10 @@ public class WaveformCanvas extends Canvas {
public void setZoomLevel(int level, long centerTime) {
//FIXME: keep center if zoom-out and cursor is not in view
- long oldScaleFactor=scaleFactor;
if(level<0) level = 0;
+ long xc=centerTime/this.scaleFactor; // cursor total x-offset
if(level>1);
if(level%2==1) this.scaleFactor*=3;
ITx tx = arrowPainter.getTx();
arrowPainter.setTx(null);
@@ -192,7 +193,6 @@ public class WaveformCanvas extends Canvas {
* xcn = tc/newScaleFactor
* t0n = (xcn-xoffs)*scaleFactor
*/
- long xc=centerTime/oldScaleFactor; // cursor total x-offset
long xoffs=xc+origin.x; // cursor offset relative to left border
long xcn=centerTime/scaleFactor; // new total x-offset
long originX=xcn-xoffs;
@@ -428,8 +428,8 @@ public class WaveformCanvas extends Canvas {
}
for (IWaveformPainter painter : wave2painterMap.values()) {
if (painter instanceof StreamPainter && ((StreamPainter) painter).getStream() == tx.getStream()) {
- Entry entry = tx.getStream().getEvents().floorEntry(tx.getBeginTime());
- Optional res = Arrays.stream(entry.getValue()).filter(e -> ((ITxEvent)e).getTransaction().equals(tx)).findFirst();
+ EventEntry entry = tx.getStream().getEvents().floorEntry(tx.getBeginTime());
+ Optional res = Arrays.stream(entry.events).filter(e -> ((ITxEvent)e).getTransaction().equals(tx)).findFirst();
if(res.isPresent()) {
int top = painter.getVerticalOffset() + styleProvider.getTrackHeight() * ((ITxEvent)res.get()).getRowIndex();
int bottom = top + styleProvider.getTrackHeight();
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java
index 3ab9cca..9158736 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java
@@ -21,7 +21,6 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
-import java.util.NavigableMap;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.TreeMap;
@@ -77,8 +76,10 @@ import org.eclipse.wb.swt.SWTResourceManager;
import com.google.common.collect.Lists;
import com.minres.scviewer.database.BitVector;
import com.minres.scviewer.database.DoubleVal;
+import com.minres.scviewer.database.EventEntry;
import com.minres.scviewer.database.EventKind;
import com.minres.scviewer.database.IEvent;
+import com.minres.scviewer.database.IEventList;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.RelationType;
import com.minres.scviewer.database.WaveformType;
@@ -255,29 +256,29 @@ public class WaveformView implements IWaveformView {
long time = waveformCanvas.getTimeForOffset(p.x);
long scaling = 5 * waveformCanvas.getScaleFactor();
for (Object o : waveformCanvas.getElementsAt(p)) {
- Entry floorEntry = null;
- Entry ceilEntry = null;
+ EventEntry floorEntry = null;
+ EventEntry ceilEntry = null;
if (o instanceof TrackEntry) {
TrackEntry entry = (TrackEntry) o;
- NavigableMap map = entry.waveform.getEvents();
+ IEventList map = entry.waveform.getEvents();
floorEntry = map.floorEntry(time);
ceilEntry = map.ceilingEntry(time);
} else if (o instanceof ITx) {
- NavigableMap map = ((ITx) o).getStream().getEvents();
+ IEventList map = ((ITx) o).getStream().getEvents();
floorEntry = map.floorEntry(time);
ceilEntry = map.ceilingEntry(time);
}
- if (floorEntry != null && time - floorEntry.getKey() > scaling)
+ if (floorEntry != null && time - floorEntry.timestamp > scaling)
floorEntry = null;
- if (ceilEntry != null && ceilEntry.getKey() - time > scaling)
+ if (ceilEntry != null && ceilEntry.timestamp - time > scaling)
ceilEntry = null;
if (ceilEntry == null && floorEntry != null) {
- time = floorEntry.getKey();
+ time = floorEntry.timestamp;
} else if (ceilEntry != null && floorEntry == null) {
- time = ceilEntry.getKey();
+ time = ceilEntry.timestamp;
} else if (ceilEntry != null && floorEntry != null) {
- time = time - floorEntry.getKey() < ceilEntry.getKey() - time ? floorEntry.getKey()
- : ceilEntry.getKey();
+ time = time - floorEntry.timestamp < ceilEntry.timestamp - time ? floorEntry.timestamp
+ : ceilEntry.timestamp;
}
}
return time;
@@ -580,10 +581,10 @@ public class WaveformView implements IWaveformView {
}
} else if (entry.waveform.getType() == WaveformType.TRANSACTION) {
ITx[] resultsList = new ITx[entry.waveform.getRowCount()];
- Entry firstTx = entry.waveform.getEvents().floorEntry(time);
+ EventEntry firstTx = entry.waveform.getEvents().floorEntry(time);
if (firstTx != null) {
do {
- for (IEvent e : firstTx.getValue()) {
+ for (IEvent e : firstTx.events) {
if (e instanceof ITxEvent) {
ITxEvent evt = ((ITxEvent) e);
ITx tx = evt.getTransaction();
@@ -593,7 +594,7 @@ public class WaveformView implements IWaveformView {
resultsList[evt.getRowIndex()] = evt.getTransaction();
}
}
- firstTx = entry.waveform.getEvents().lowerEntry(firstTx.getKey());
+ firstTx = entry.waveform.getEvents().lowerEntry(firstTx.timestamp);
} while (firstTx != null && !isArrayFull(resultsList));
boolean separator = false;
StringBuilder sb = new StringBuilder();
@@ -854,11 +855,11 @@ public class WaveformView implements IWaveformView {
}
}
if (transaction == null) {
- Entry entry = selectedWaveform.waveform.getEvents()
+ EventEntry entry = selectedWaveform.waveform.getEvents()
.higherEntry(currentTxSelection.getBeginTime());
if (entry != null)
do {
- for (IEvent evt : entry.getValue()) {
+ for (IEvent evt : entry.events) {
if (evt instanceof ITxEvent && (evt.getKind() == EventKind.BEGIN
|| evt.getKind() == EventKind.SINGLE)) {
transaction = ((ITxEvent) evt).getTransaction();
@@ -866,7 +867,7 @@ public class WaveformView implements IWaveformView {
}
}
if (transaction == null)
- entry = selectedWaveform.waveform.getEvents().higherEntry(entry.getKey());
+ entry = selectedWaveform.waveform.getEvents().higherEntry(entry.timestamp);
} while (entry != null && transaction == null);
}
} else if (direction == GotoDirection.PREV) {
@@ -883,11 +884,11 @@ public class WaveformView implements IWaveformView {
}
}
if (transaction == null) {
- Entry entry = selectedWaveform.waveform.getEvents()
+ EventEntry entry = selectedWaveform.waveform.getEvents()
.lowerEntry(currentTxSelection.getBeginTime());
if (entry != null)
do {
- for (IEvent evt : Lists.reverse(Arrays.asList(entry.getValue()))) {
+ for (IEvent evt : Lists.reverse(Arrays.asList(entry.events))) {
if (evt instanceof ITxEvent && (evt.getKind() == EventKind.BEGIN
|| evt.getKind() == EventKind.SINGLE)) {
transaction = ((ITxEvent) evt).getTransaction();
@@ -895,7 +896,7 @@ public class WaveformView implements IWaveformView {
}
}
if (transaction == null)
- entry = selectedWaveform.waveform.getEvents().lowerEntry(entry.getKey());
+ entry = selectedWaveform.waveform.getEvents().lowerEntry(entry.timestamp);
} while (entry != null && transaction == null);
}
}
@@ -958,14 +959,14 @@ public class WaveformView implements IWaveformView {
return;
TrackEntry sel = currentWaveformSelection.get(0);
long time = getCursorTime();
- NavigableMap map = null;
+ IEventList map = null;
if (sel.waveform.getType() == WaveformType.TRANSACTION || sel.waveform.getType() == WaveformType.SIGNAL) {
map = sel.waveform.getEvents();
}
if (map != null) {
- Entry entry = direction == GotoDirection.PREV ? map.lowerEntry(time) : map.higherEntry(time);
+ EventEntry entry = direction == GotoDirection.PREV ? map.lowerEntry(time) : map.higherEntry(time);
if (entry != null) {
- time = entry.getKey();
+ time = entry.timestamp;
setCursorTime(time);
waveformCanvas.reveal(time);
waveformCanvas.redraw();
diff --git a/plugins/com.minres.scviewer.database.vcd/.classpath b/plugins/com.minres.scviewer.database.vcd/.classpath
index 43b9862..1db08c6 100644
--- a/plugins/com.minres.scviewer.database.vcd/.classpath
+++ b/plugins/com.minres.scviewer.database.vcd/.classpath
@@ -1,6 +1,6 @@
-
+
diff --git a/plugins/com.minres.scviewer.database.vcd/.settings/org.eclipse.jdt.core.prefs b/plugins/com.minres.scviewer.database.vcd/.settings/org.eclipse.jdt.core.prefs
index 9f6ece8..7adc0fb 100644
--- a/plugins/com.minres.scviewer.database.vcd/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/com.minres.scviewer.database.vcd/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,10 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/plugins/com.minres.scviewer.database.vcd/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.database.vcd/META-INF/MANIFEST.MF
index b00d258..7a1dbaf 100644
--- a/plugins/com.minres.scviewer.database.vcd/META-INF/MANIFEST.MF
+++ b/plugins/com.minres.scviewer.database.vcd/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: VCD signal database
Bundle-SymbolicName: com.minres.scviewer.database.vcd
-Bundle-Version: 2.2.0.qualifier
+Bundle-Version: 4.0.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0",
org.eclipse.osgi.services;bundle-version="3.4.0",
com.google.guava;bundle-version="15.0.0"
diff --git a/plugins/com.minres.scviewer.database.vcd/pom.xml b/plugins/com.minres.scviewer.database.vcd/pom.xml
index bf73cf0..dfad617 100644
--- a/plugins/com.minres.scviewer.database.vcd/pom.xml
+++ b/plugins/com.minres.scviewer.database.vcd/pom.xml
@@ -1,11 +1,11 @@
4.0.0
com.minres.scviewer.database.vcd
- 2.2.0-SNAPSHOT
+ 4.0.0-SNAPSHOT
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java
index 0481975..1bf27e9 100644
--- a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java
+++ b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java
@@ -20,15 +20,13 @@ import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import java.util.NavigableMap;
-import java.util.TreeMap;
import java.util.Vector;
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;
import com.minres.scviewer.database.IWaveformDbLoader;
@@ -115,19 +113,20 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder {
moduleStack=null;
throw new InputFormatException(e.toString());
}
- if(!res) throw new InputFormatException("Could not parse VCD file");
+ if(!res)
+ throw new InputFormatException("Could not parse VCD file");
// calculate max time of this database
for(IWaveform waveform:signals) {
- NavigableMap 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>) {
- TreeMap events = (TreeMap) ((VCDSignal>)s).getEvents();
+ IEventList events = ((VCDSignal>)s).getEvents();
if(events.size()>0 && events.lastKey())s).addSignalChange(maxTime, (BitVector) val);
} else if(val instanceof DoubleVal)
@@ -147,7 +146,7 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder {
* @see com.minres.scviewer.database.ITrDb#getMaxTime()
*/
@Override
- public Long getMaxTime() {
+ public long getMaxTime() {
return maxTime;
}
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 4b2bb71..68b0127 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
@@ -10,12 +10,11 @@
*******************************************************************************/
package com.minres.scviewer.database.vcd;
-import java.util.Map.Entry;
-import java.util.NavigableMap;
-import java.util.TreeMap;
-
+import com.minres.scviewer.database.EventEntry;
+import com.minres.scviewer.database.EventList;
import com.minres.scviewer.database.HierNode;
import com.minres.scviewer.database.IEvent;
+import com.minres.scviewer.database.IEventList;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.WaveformType;
@@ -27,7 +26,7 @@ public class VCDSignal extends HierNode implements IWaveform {
private final int width;
- private NavigableMap values;
+ private IEventList values;
public VCDSignal(String name) {
this(0, name, 1);
@@ -42,7 +41,7 @@ public class VCDSignal extends HierNode implements IWaveform {
fullName=name;
this.id=id;
this.width=width;
- this.values=new TreeMap<>();
+ this.values=new EventList();
}
public VCDSignal(VCDSignal o, int id, String name) {
@@ -63,44 +62,36 @@ public class VCDSignal extends HierNode implements IWaveform {
}
@Override
- public Long getId() {
+ public long getId() {
return id;
}
public void addSignalChange(Long time, T value){
- if(values.containsKey(time)) {
- IEvent[] oldV = values.get(time);
- IEvent[] newV = new IEvent[oldV.length+1];
- System.arraycopy(oldV, 0, newV, 0, oldV.length);
- newV[oldV.length]=value;
- values.put(time, newV);
- } else {
- values.put(time, new IEvent[] {value});
- }
+ values.put(time, value);
}
@Override
- public NavigableMap getEvents() {
+ public IEventList getEvents() {
return values;
}
@Override
- public IEvent[] getEventsAtTime(Long time) {
+ public IEvent[] getEventsAtTime(long time) {
return values.get(time);
}
@Override
- public IEvent[] getEventsBeforeTime(Long time) {
- Entry e = values.floorEntry(time);
+ public IEvent[] getEventsBeforeTime(long time) {
+ EventEntry e = values.floorEntry(time);
if(e==null)
return new IEvent[] {};
else
- return values.floorEntry(time).getValue();
+ return values.floorEntry(time).events;
}
@Override
public boolean isSame(IWaveform other) {
- return( other instanceof VCDSignal> && this.getId().equals(other.getId()));
+ return( other instanceof VCDSignal> && this.getId() == other.getId());
}
@Override
diff --git a/plugins/com.minres.scviewer.database/.classpath b/plugins/com.minres.scviewer.database/.classpath
index cf36b56..685a699 100644
--- a/plugins/com.minres.scviewer.database/.classpath
+++ b/plugins/com.minres.scviewer.database/.classpath
@@ -1,7 +1,11 @@
-
+
+
+
+
+
-
+
diff --git a/plugins/com.minres.scviewer.database/.settings/org.eclipse.jdt.core.prefs b/plugins/com.minres.scviewer.database/.settings/org.eclipse.jdt.core.prefs
index 4e4a3ad..2bd4e77 100644
--- a/plugins/com.minres.scviewer.database/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/com.minres.scviewer.database/.settings/org.eclipse.jdt.core.prefs
@@ -1,9 +1,16 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.source=11
diff --git a/plugins/com.minres.scviewer.database/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.database/META-INF/MANIFEST.MF
index 24161ba..0b7dec7 100644
--- a/plugins/com.minres.scviewer.database/META-INF/MANIFEST.MF
+++ b/plugins/com.minres.scviewer.database/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Waveform database
Bundle-SymbolicName: com.minres.scviewer.database
-Bundle-Version: 3.0.0.qualifier
+Bundle-Version: 4.0.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
Export-Package: com.minres.scviewer.database,
com.minres.scviewer.database.tx
Bundle-ActivationPolicy: lazy
diff --git a/plugins/com.minres.scviewer.database/pom.xml b/plugins/com.minres.scviewer.database/pom.xml
index abaa87b..ac9aa04 100644
--- a/plugins/com.minres.scviewer.database/pom.xml
+++ b/plugins/com.minres.scviewer.database/pom.xml
@@ -4,9 +4,9 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
eclipse-plugin
- 3.0.0-SNAPSHOT
+ 4.0.0-SNAPSHOT
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/EventEntry.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/EventEntry.java
new file mode 100644
index 0000000..ac4f2f6
--- /dev/null
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/EventEntry.java
@@ -0,0 +1,41 @@
+package com.minres.scviewer.database;
+
+import java.util.Arrays;
+
+public class EventEntry implements Comparable{
+ public long timestamp; // unsigned
+ public IEvent[] events = null;
+
+
+ public EventEntry(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+
+ public EventEntry(long timestamp, IEvent[] events) {
+ this.timestamp = timestamp;
+ this.events = events;
+ }
+
+
+ @Override
+ public int compareTo(EventEntry o) {
+ return Long.compareUnsigned(timestamp, o.timestamp);
+ }
+
+ @Override
+ public String toString() {
+ return String.format("e.%d@%d", events.length,timestamp);
+ }
+
+
+ public void append(IEvent value) {
+ if(events.length==0)
+ events = new IEvent[] {value};
+ else {
+ int idx = events.length;
+ events = Arrays.copyOf(events, idx+1);
+ events[idx]=value;
+ }
+ }
+}
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/EventList.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/EventList.java
new file mode 100644
index 0000000..c5a7fea
--- /dev/null
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/EventList.java
@@ -0,0 +1,195 @@
+package com.minres.scviewer.database;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+public class EventList implements IEventList {
+
+ ArrayList store = new ArrayList<>();
+ int start = 0;
+ int end = store.size();
+ boolean unmodifiable = false;
+
+ public class Iterator implements java.util.Iterator {
+
+ EventList list;
+
+ private int pos;
+
+ public Iterator(EventList list) {
+ this.list=list;
+ this.pos=-1;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return pos<(list.end-1);
+ }
+
+ @Override
+ public EventEntry next() {
+ if(hasNext()) {
+ pos++;
+ return list.store.get(pos);
+ } else
+ return null;
+ }
+
+ @Override
+ public void remove() {
+ list.store.remove(pos);
+ }
+
+ }
+
+ public EventList() {
+ }
+
+ private EventList(ArrayList store , int start, int end) {
+ this.store=store;
+ this.start=start;
+ this.end=end;
+ this.unmodifiable=true;
+ }
+
+ @Override
+ public IEventList subMap(long from, boolean includeFrom, long to) {
+ //the index of the first element greater than the key, or list.size()
+ int beginIndex = Collections.binarySearch(store, new EventEntry(from));
+ int startIndex = beginIndex < 0? -(beginIndex + 1): beginIndex;
+ int endIndex = Collections.binarySearch(store, new EventEntry(to));
+ endIndex = endIndex < 0? -(endIndex + 1): endIndex+1;
+ if(beginIndex>0 && !includeFrom)
+ return new EventList(store, startIndex+1, endIndex);
+ else
+ return new EventList(store, startIndex, endIndex);
+ }
+
+ @Override
+ public int size() {
+ return end-start;
+ }
+
+ @Override
+ public boolean containsKey(long key) {
+ int index = Collections.binarySearch(store, new EventEntry(key));
+ return index>=0 && index>=start && index=start && index entrySet() {
+ if(start != 0 || end != store.size())
+ return Collections.unmodifiableList(store.subList(start, end));
+ else
+ return Collections.unmodifiableList(store);
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return start==end || store.isEmpty();
+ }
+
+ @Override
+ public long firstKey() {
+ return store.get(start).timestamp;
+ }
+
+ @Override
+ public long lastKey() {
+ return store.get(end-1).timestamp;
+ }
+
+ // Navigable map functions
+ @Override
+ public EventEntry firstEntry() {
+ return store.get(start);
+ }
+
+ @Override
+ public EventEntry lastEntry() {
+ return store.get(end-1);
+ }
+
+ @Override
+ public EventEntry floorEntry(long key) {
+ int index = Collections.binarySearch(store, new EventEntry(key));
+ if(index==-1) return null;
+ // < 0 if element is not in the list, see Collections.binarySearch
+ if (index < 0) {
+ index = -(index + 2);
+ }
+ if(index>=end)
+ return store.get(end-1);
+ return index=end? null: store.get(index);
+ }
+
+ @Override
+ public EventEntry lowerEntry(long key) {
+ int index = Collections.binarySearch(store, new EventEntry(key));
+ // < 0 if element is not in the list, see Collections.binarySearch
+ if (index < 0)
+ index = -(index + 1);
+ index--;
+ if(index>=end)
+ return store.get(end-1);
+ return index>=end || index=end || index iterator() {
+ return new Iterator(this);
+ }
+
+}
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/HierNode.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/HierNode.java
index c37416b..9abf33f 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/HierNode.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/HierNode.java
@@ -80,7 +80,7 @@ public class HierNode implements IHierNode {
}
/**
- * Gets the full name.
+ * Gets the full hierarchical name.
*
* @return the full name
*/
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IEventList.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IEventList.java
new file mode 100644
index 0000000..7561c16
--- /dev/null
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IEventList.java
@@ -0,0 +1,84 @@
+package com.minres.scviewer.database;
+
+import java.util.Collection;
+
+public interface IEventList extends Iterable {
+
+ int size();
+
+ Collection entrySet();
+
+ boolean containsKey(long key);
+
+ IEvent[] get(long key);
+
+ void put(long key, IEvent value);
+
+ long firstKey();
+
+ long lastKey();
+
+ boolean isEmpty();
+ /**
+ * Returns a key-value mapping associated with the greatest key less
+ * than or equal to the given key, or null if there is no such key.
+ *
+ * @param key
+ * @return
+ */
+ EventEntry floorEntry(long key);
+ /**
+ * Returns a key-value mapping associated with the least key greater
+ * than or equal to the given key, or null if there is no such key.
+ *
+ * @param key
+ * @return
+ */
+ EventEntry ceilingEntry(long key);
+ /**
+ * Returns a key-value mapping associated with the least key in this map,
+ * or null if the map is empty.
+ *
+ * @return
+ */
+ EventEntry firstEntry();
+ /**
+ * Returns a key-value mapping associated with the least key in this map,
+ * or null if the map is empty.
+ *
+ * @return
+ */
+ EventEntry lastEntry();
+ /**
+ * Returns a key-value mapping associated with the least key strictly greater
+ * than the given key, or null if there is no such key.
+ *
+ * @param key
+ * @return
+ */
+ EventEntry higherEntry(long key);
+ /**
+ * Returns a key-value mapping associated with the greatest key strictly less
+ * than the given key, or null if there is no such key.
+ *
+ * @param key
+ * @return
+ */
+ EventEntry lowerEntry(long key);
+ /**
+ * Returns a view of the portion of this map whose keys range from
+ * {@code fromKey} to {@code toKey}. If {@code fromKey} and
+ * {@code toKey} are equal, the returned map is empty unless
+ * {@code fromInclusive} is true. The
+ * returned map is backed by this map, so changes in the returned map are
+ * reflected in this map, and vice-versa. The returned map supports all
+ * optional map operations that this map supports.
+ *
+ * @param fromKey low endpoint of the keys in the returned map
+ * @param fromInclusive {@code true} if the low endpoint
+ * is to be included in the returned view
+ * @param toKey high endpoint of the keys in the returned map (inclusive)
+ */
+ IEventList subMap(long key, boolean b, long key2);
+
+}
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 c96b04a..a558c1b 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
@@ -10,7 +10,6 @@
*******************************************************************************/
package com.minres.scviewer.database;
-import java.util.NavigableMap;
// TODO: Auto-generated Javadoc
/**
@@ -25,7 +24,7 @@ public interface IWaveform extends IHierNode {
*
* @return the id
*/
- public Long getId();
+ public long getId();
/**
* Checks if is same.
@@ -40,7 +39,7 @@ public interface IWaveform extends IHierNode {
*
* @return the events
*/
- public NavigableMap getEvents();
+ public IEventList getEvents();
/**
* Gets the events at time.
@@ -48,7 +47,7 @@ public interface IWaveform extends IHierNode {
* @param time the time
* @return the events at time
*/
- public IEvent[] getEventsAtTime(Long time);
+ public IEvent[] getEventsAtTime(long time);
/**
* Gets the events before time.
@@ -56,7 +55,7 @@ public interface IWaveform extends IHierNode {
* @param time the time
* @return the events before time
*/
- public IEvent[] getEventsBeforeTime(Long time);
+ public IEvent[] getEventsBeforeTime(long time);
/**
* Gets the type.
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDb.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDb.java
index f4e60fa..3534a9a 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDb.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDb.java
@@ -23,7 +23,7 @@ public interface IWaveformDb extends IHierNode {
*
* @return the max time
*/
- public Long getMaxTime();
+ public long getMaxTime();
/**
* Gets the stream by name.
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDbLoader.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDbLoader.java
index 740f6cf..3a56058 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDbLoader.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDbLoader.java
@@ -69,7 +69,7 @@ public interface IWaveformDbLoader {
*
* @return the max time
*/
- public Long getMaxTime();
+ public long getMaxTime();
/**
* Gets the all waves.
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java
index d74db46..3331e36 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java
@@ -45,7 +45,7 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
private Map waveforms;
/** The max time. */
- private Long maxTime;
+ private long maxTime = -1;
/**
* Bind.
@@ -90,7 +90,7 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
* @return the max time
*/
@Override
- public Long getMaxTime() {
+ public long getMaxTime() {
return maxTime;
}
@@ -189,6 +189,7 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
if (IWaveformDbLoader.SIGNAL_ADDED.equals(evt.getPropertyName())
|| IWaveformDbLoader.STREAM_ADDED.equals(evt.getPropertyName())) {
IWaveform waveform = (IWaveform) evt.getNewValue();
+ waveforms.put(waveform.getFullName(), waveform);
putInHierarchy(waveform);
pcs.firePropertyChange(IHierNode.WAVEFORMS, null, waveforms);
pcs.firePropertyChange(IHierNode.CHILDS, null, childNodes);
@@ -226,14 +227,13 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
break;
}
}
- if (childNode != null) {
+ if (childNode == null) {
+ HierNode newNode = new HierNode(name, node);
+ node.addChild(newNode);
+ node = newNode;
+ } else {
node = childNode;
- break;
}
- HierNode newNode = new HierNode(name, node);
- node.addChild(newNode);
- node = newNode;
-
}
node.addChild(waveform);
waveform.setParent(node);
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java
index f539270..c9c69a5 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java
@@ -25,7 +25,7 @@ public interface ITx extends Comparable {
*
* @return the id
*/
- public Long getId();
+ public long getId();
/**
* Gets the stream.
@@ -46,14 +46,14 @@ public interface ITx extends Comparable {
*
* @return the begin time
*/
- public Long getBeginTime();
+ public long getBeginTime();
/**
* Gets the end time.
*
* @return the end time
*/
- public Long getEndTime();
+ public long getEndTime();
/**
* Gets the attributes.
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java
index 9f417a9..2bd5f33 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java
@@ -22,7 +22,7 @@ public interface ITxEvent extends IEvent {
*
* @return the time
*/
- public Long getTime();
+ public long getTime();
/**
* Gets the transaction.
diff --git a/plugins/com.minres.scviewer.e4.application/.classpath b/plugins/com.minres.scviewer.e4.application/.classpath
index 43b9862..1db08c6 100644
--- a/plugins/com.minres.scviewer.e4.application/.classpath
+++ b/plugins/com.minres.scviewer.e4.application/.classpath
@@ -1,6 +1,6 @@
-
+
diff --git a/plugins/com.minres.scviewer.e4.application/.settings/org.eclipse.jdt.core.prefs b/plugins/com.minres.scviewer.e4.application/.settings/org.eclipse.jdt.core.prefs
index 87b7a7a..a58ebdc 100644
--- a/plugins/com.minres.scviewer.e4.application/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/com.minres.scviewer.e4.application/.settings/org.eclipse.jdt.core.prefs
@@ -1,13 +1,15 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF
index 9132c4a..b1d0326 100644
--- a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF
+++ b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: com.minres.scviewer.e4.application;singleton:=true
-Bundle-Version: 2.12.0.qualifier
+Bundle-Version: 2.13.0
Bundle-Vendor: %Bundle-Vendor
Require-Bundle: javax.inject;bundle-version="1.0.0",
org.eclipse.core.runtime;bundle-version="3.11.1",
@@ -36,7 +36,7 @@ Require-Bundle: javax.inject;bundle-version="1.0.0",
org.eclipse.equinox.p2.engine;bundle-version="2.6.600",
org.eclipse.equinox.p2.operations;bundle-version="2.5.700",
org.eclipse.equinox.p2.metadata.repository;bundle-version="1.3.400"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
Import-Package: com.minres.scviewer.database,
javax.inject;version="1.0.0"
Automatic-Module-Name: com.minres.scviewer.e4.application
diff --git a/plugins/com.minres.scviewer.e4.application/pom.xml b/plugins/com.minres.scviewer.e4.application/pom.xml
index 51621b7..f81be42 100644
--- a/plugins/com.minres.scviewer.e4.application/pom.xml
+++ b/plugins/com.minres.scviewer.e4.application/pom.xml
@@ -6,7 +6,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/E4LifeCycle.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/E4LifeCycle.java
index 812260c..be6d932 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/E4LifeCycle.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/E4LifeCycle.java
@@ -61,6 +61,8 @@ public class E4LifeCycle {
final Options opt = new Options(args, 0, Integer.MAX_VALUE);
opt.getSet()
.addOption("clearPersistedState", Multiplicity.ZERO_OR_ONE)
+ .addOption("launcher.defaultAction", Separator.BLANK, Multiplicity.ZERO_OR_ONE)
+ .addOption("launcher.openFile", Multiplicity.ZERO_OR_ONE)
.addOption("c", Separator.BLANK, Multiplicity.ZERO_OR_ONE);
if (!opt.check(Options.DEFAULT_SET, true, false)) {
logger.error(opt.getCheckErrors());
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/elements/WaveformPopupMenuContribution.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/elements/WaveformPopupMenuContribution.java
index 58cf2a2..b85191a 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/elements/WaveformPopupMenuContribution.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/elements/WaveformPopupMenuContribution.java
@@ -40,7 +40,7 @@ public class WaveformPopupMenuContribution {
if(elem instanceof TrackEntry) {
TrackEntry e = (TrackEntry) elem;
if(e.waveform.getType() == WaveformType.SIGNAL) {
- Object o = e.waveform.getEvents().firstEntry().getValue()[0];
+ Object o = e.waveform.getEvents().firstEntry().events[0];
if(checkForDouble && o instanceof DoubleVal)
return true;
else if(o instanceof BitVector && ((BitVector)o).getWidth()>1)
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/messages.properties b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/messages.properties
index ca29482..27b8b44 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/messages.properties
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/messages.properties
@@ -9,7 +9,7 @@ DesignBrowser_8=Insert before
LoadingWaveformDb_0=Database loading...
LoadStoreSettingsHandler_2=*.scview
LoadStoreSettingsHandler_3=SCViewer.scview
-OpenHandler_0=*.vcd;*.txdb;*.txlog;*.fbrdb
+OpenHandler_0=*.vcd;*.vcd.gz;*.txdb;*.txdb.gz;*.txlog;*.fbrdb
QuitHandler_0=Confirmation
QuitHandler_1=Do you want to exit?
RelationTypeToolControl_0=------------
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java
index 4b47c91..22314cd 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java
@@ -133,10 +133,11 @@ public class DesignBrowser {
treeViewer.refresh();
});
} else if(IHierNode.LOADING_FINISHED.equals(evt.getPropertyName())) {
- treeViewer.getTree().getDisplay().asyncExec(() -> {
- treeViewer.update(waveformViewerPart.getDatabase(), null);
- DesignBrowser.this.updateButtons();
- });
+ if(!treeViewer.getControl().isDisposed())
+ treeViewer.getTree().getDisplay().asyncExec(() -> {
+ treeViewer.update(waveformViewerPart.getDatabase(), null);
+ DesignBrowser.this.updateButtons();
+ });
}
};
@@ -596,6 +597,7 @@ public class DesignBrowser {
* Apply.
*/
public void apply() {
+ if(treeViewer.getControl().isDisposed()) return;
treeViewer.setExpandedElements(expandedElements);
treeViewer.setSelection(treeSelection, true);
txTableViewer.setSelection(tableSelection, true);
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/FileBrowserDialog.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/FileBrowserDialog.java
index 24a1074..f3924fc 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/FileBrowserDialog.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/FileBrowserDialog.java
@@ -337,7 +337,11 @@ public class FileBrowserDialog extends TrayDialog {
if(f instanceof File) {
if(matchers.isEmpty()) return true;
for (PathMatcher m : matchers) {
+ try {
if(m.matches(((File)f).toPath())) return true;
+ } catch (Exception e) {
+ return false;
+ }
}
}
return false;
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java
index be0abe4..1bfa169 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java
@@ -32,8 +32,8 @@ import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import com.minres.scviewer.database.DataType;
+import com.minres.scviewer.database.EventEntry;
import com.minres.scviewer.database.EventKind;
-import com.minres.scviewer.database.IEvent;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.WaveformType;
import com.minres.scviewer.database.tx.ITx;
@@ -249,8 +249,10 @@ public class TransactionList extends Composite {
}catch(SecurityException e){}
updateThread = new Thread(()-> {
final ConcurrentHashMap propNames=new ConcurrentHashMap<>();
- Collection values = stream.getEvents().values();
- final List txList = values.parallelStream().map(Arrays::asList)
+ Collection values = stream.getEvents().entrySet();
+ final List txList = values.parallelStream()
+ .map(e->e.events)
+ .map(Arrays::asList)
.flatMap(List::stream)
.filter(evt -> evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE)
.map(evt-> {
@@ -258,7 +260,7 @@ public class TransactionList extends Composite {
tx.getAttributes().forEach(attr -> propNames.put(attr.getName(), attr.getDataType()));
return tx;
})
- .sorted((t1, t2)-> t1.getBeginTime().compareTo(t2.getBeginTime()))
+ .sorted((t1, t2)-> Long.compare(t1.getBeginTime(),t2.getBeginTime()))
.collect(Collectors.toList());
final List newAttrNames=propNames.entrySet().stream()
.sorted((e1,e2)->e1.getKey().compareTo(e2.getKey()))
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java
index d6ede73..54e71b3 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java
@@ -577,7 +577,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
} else
sync.asyncExec(()->{
waveformPane.setMaxTime(database.getMaxTime());
- if (state != null)
+ if(partConfig!=null && !partConfig.isEmpty())
+ loadState(partConfig);
+ if (state != null && !state.isEmpty())
restoreWaveformViewerState(state);
fileChecker = null;
if (checkForUpdates)
@@ -630,13 +632,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
if (file.exists())
filesToLoad.add(file);
}
- if(partConfig!=null) {
- this.partConfig=partConfig;
- }
+ this.partConfig=partConfig;
if (!filesToLoad.isEmpty())
loadDatabase(persistedState);
- if(partConfig!=null && !partConfig.isEmpty())
- loadState(partConfig);
}
/**
@@ -815,9 +813,18 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
String trackentryName = state.get(SELECTED_TRACKENTRY_NAME);
//get TrackEntry Object based on name and TX Object by id and put into selectionList
trackEntries.stream().filter(e->trackentryName.equals(e.waveform.getFullName())).forEach(trackEntry ->
- trackEntry.waveform.getEvents().values().stream().filter(Objects::nonNull).forEach(entries->
- Arrays.stream(entries).filter(e->e instanceof ITxEvent && txId.equals(((ITxEvent)e).getTransaction().getId())).forEach(event ->
- waveformPane.setSelection(new StructuredSelection(new Object[] {((ITxEvent)event).getTransaction(), trackEntry})))));
+ trackEntry.waveform.getEvents().entrySet().stream()
+ .map(e->e.events)
+ .filter(Objects::nonNull)
+ .forEach(entries->
+ Arrays.stream(entries)
+ .filter(e->e instanceof ITxEvent && txId.equals(((ITxEvent)e).getTransaction().getId()))
+ .forEach(event ->
+ waveformPane.setSelection(new StructuredSelection(
+ new Object[] {((ITxEvent)event).getTransaction(), trackEntry}))
+ )
+ )
+ );
} catch (NumberFormatException e) {
}
}
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/txTableTree/AttributeLabelProvider.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/txTableTree/AttributeLabelProvider.java
index 10e4b33..9daf7bf 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/txTableTree/AttributeLabelProvider.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/txTableTree/AttributeLabelProvider.java
@@ -69,7 +69,7 @@ public class AttributeLabelProvider extends LabelProvider implements IStyledLabe
ITx iTx = (ITx) element;
switch(field){
case NAME:
- return new StyledString(iTx.getId().toString());
+ return new StyledString(String.format("%d", iTx.getId()));
case TX_TIME:
return new StyledString(waveformViewerPart.getScaledTime(iTx.getBeginTime()));
case TYPE:
diff --git a/plugins/com.minres.scviewer.ui/.classpath b/plugins/com.minres.scviewer.ui/.classpath
index cf36b56..bc57d23 100644
--- a/plugins/com.minres.scviewer.ui/.classpath
+++ b/plugins/com.minres.scviewer.ui/.classpath
@@ -1,6 +1,6 @@
-
+
diff --git a/plugins/com.minres.scviewer.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/com.minres.scviewer.ui/.settings/org.eclipse.jdt.core.prefs
index 87b7a7a..a58ebdc 100644
--- a/plugins/com.minres.scviewer.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/com.minres.scviewer.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,13 +1,15 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/plugins/com.minres.scviewer.ui/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.ui/META-INF/MANIFEST.MF
index e823ab3..9e29130 100644
--- a/plugins/com.minres.scviewer.ui/META-INF/MANIFEST.MF
+++ b/plugins/com.minres.scviewer.ui/META-INF/MANIFEST.MF
@@ -18,7 +18,7 @@ Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0",
org.eclipse.osgi,
org.eclipse.core.expressions;bundle-version="3.4.600",
org.eclipse.jface
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
Bundle-ActivationPolicy: lazy
Import-Package: com.google.common.collect
Service-Component: OSGI-INF/component.xml
diff --git a/plugins/com.minres.scviewer.ui/pom.xml b/plugins/com.minres.scviewer.ui/pom.xml
index d00df08..79856d2 100644
--- a/plugins/com.minres.scviewer.ui/pom.xml
+++ b/plugins/com.minres.scviewer.ui/pom.xml
@@ -4,7 +4,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/RelatedProperty.java b/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/RelatedProperty.java
index 1833506..4ae1ecf 100644
--- a/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/RelatedProperty.java
+++ b/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/RelatedProperty.java
@@ -182,9 +182,9 @@ public class RelatedProperty extends AbstractPropertySection implements ISelecti
else if (columnIndex == 2 && element instanceof ITxRelation){
ITxRelation rel = (ITxRelation) element;
if(rel.getTarget()==iTr)
- return ((ITxRelation) element).getSource().getId().toString();
+ return String.format("%d", ((ITxRelation) element).getSource().getId());
else
- return ((ITxRelation) element).getTarget().getId().toString();
+ return String.format("%d", ((ITxRelation) element).getTarget().getId());
}
else
return null;
diff --git a/pom.xml b/pom.xml
index 20d4ad9..ed8eb1e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
pom
releng/com.minres.scviewer.target
@@ -26,7 +26,6 @@
- 2.11.0-SNAPSHOT
1.5.0
3.6.0-03
3.0.3-01
@@ -68,7 +67,7 @@
com.minres.scviewer
com.minres.scviewer.target
- 2.12.0-SNAPSHOT
+ 2.13.0
diff --git a/products/com.minres.scviewer.e4.product/pom.xml b/products/com.minres.scviewer.e4.product/pom.xml
index 0e14bcb..fea2e34 100644
--- a/products/com.minres.scviewer.e4.product/pom.xml
+++ b/products/com.minres.scviewer.e4.product/pom.xml
@@ -6,11 +6,11 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
com.minres.scviewer.e4.product
- 2.12.0-SNAPSHOT
+ 2.13.0
eclipse-repository
com.minres.scviewer
diff --git a/products/com.minres.scviewer.e4.product/scviewer.product b/products/com.minres.scviewer.e4.product/scviewer.product
index 5c1cc84..b35d3c8 100644
--- a/products/com.minres.scviewer.e4.product/scviewer.product
+++ b/products/com.minres.scviewer.e4.product/scviewer.product
@@ -1,7 +1,7 @@
-
+
@@ -9,7 +9,7 @@
-clearPersistedState
- -Xmx2G -Dosgi.instance.area=@user.home/.scviewer -Dosgi.instance.area.default=@user.home/.scviewer
+ -Xms64m -Xmx2G -Dosgi.instance.area=@user.home/.scviewer -Dosgi.instance.area.default=@user.home/.scviewer --add-modules=ALL-SYSTEM -Dfile.encoding=UTF-8
-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
@@ -34,9 +34,9 @@
- org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8
- org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8
- org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8
+ org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11
+ org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11
+ org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11
@@ -51,17 +51,13 @@
-
-
-
-
diff --git a/releng/com.minres.scviewer.target/pom.xml b/releng/com.minres.scviewer.target/pom.xml
index f370caf..0edf361 100644
--- a/releng/com.minres.scviewer.target/pom.xml
+++ b/releng/com.minres.scviewer.target/pom.xml
@@ -12,7 +12,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
diff --git a/releng/com.minres.scviewer.updateSite/pom.xml b/releng/com.minres.scviewer.updateSite/pom.xml
index afcadd7..131bd9c 100644
--- a/releng/com.minres.scviewer.updateSite/pom.xml
+++ b/releng/com.minres.scviewer.updateSite/pom.xml
@@ -7,7 +7,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
diff --git a/tests/com.minres.scviewer.database.test/.classpath b/tests/com.minres.scviewer.database.test/.classpath
index cc5ee2d..336abe9 100644
--- a/tests/com.minres.scviewer.database.test/.classpath
+++ b/tests/com.minres.scviewer.database.test/.classpath
@@ -1,6 +1,6 @@
-
+
diff --git a/tests/com.minres.scviewer.database.test/.settings/org.eclipse.jdt.core.prefs b/tests/com.minres.scviewer.database.test/.settings/org.eclipse.jdt.core.prefs
index 4e4a3ad..e8c450c 100644
--- a/tests/com.minres.scviewer.database.test/.settings/org.eclipse.jdt.core.prefs
+++ b/tests/com.minres.scviewer.database.test/.settings/org.eclipse.jdt.core.prefs
@@ -1,9 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/tests/com.minres.scviewer.database.test/META-INF/MANIFEST.MF b/tests/com.minres.scviewer.database.test/META-INF/MANIFEST.MF
index 011837d..514f11a 100644
--- a/tests/com.minres.scviewer.database.test/META-INF/MANIFEST.MF
+++ b/tests/com.minres.scviewer.database.test/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: SCViewer database tests
Bundle-SymbolicName: com.minres.scviewer.database.test
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 4.0.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
Require-Bundle: com.minres.scviewer.database,
com.minres.scviewer.database.sqlite;bundle-version="1.0.0",
com.minres.scviewer.database.text;bundle-version="1.0.0",
diff --git a/tests/com.minres.scviewer.database.test/pom.xml b/tests/com.minres.scviewer.database.test/pom.xml
index 9b902fe..9058cff 100644
--- a/tests/com.minres.scviewer.database.test/pom.xml
+++ b/tests/com.minres.scviewer.database.test/pom.xml
@@ -2,11 +2,11 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.minres.scviewer.database.test
- 1.0.1-SNAPSHOT
+ 4.0.0-SNAPSHOT
com.minres.scviewer
com.minres.scviewer.parent
- 2.12.0-SNAPSHOT
+ 2.13.0
../..
eclipse-test-plugin
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 35b9c93..21c3ac4 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
@@ -16,13 +16,12 @@ import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.List;
-import java.util.Map.Entry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import com.minres.scviewer.database.IEvent;
+import com.minres.scviewer.database.EventEntry;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.IWaveformDb;
@@ -50,11 +49,11 @@ public class DatabaseServicesTest {
assertEquals(14, waves.size());
assertEquals(2, waveformDb.getChildNodes().size());
IWaveform bus_data_wave = waves.get(0);
- Entry bus_data_entry = bus_data_wave.getEvents().floorEntry(1400000000L);
- assertEquals("01111000", bus_data_entry.getValue()[0].toString());
+ EventEntry bus_data_entry = bus_data_wave.getEvents().floorEntry(1400000000L);
+ assertEquals("01111000", bus_data_entry.events[0].toString());
IWaveform rw_wave = waves.get(2);
- Entry rw_entry = rw_wave.getEvents().floorEntry(2360000000L);
- assertEquals("1", rw_entry.getValue()[0].toString());
+ EventEntry rw_entry = rw_wave.getEvents().floorEntry(2360000000L);
+ assertEquals("1", rw_entry.events[0].toString());
}
@Test
@@ -77,11 +76,11 @@ public class DatabaseServicesTest {
assertEquals(3, waveforms.size());
assertEquals(1, waveformDb.getChildNodes().size());
for(IWaveform w:waveforms) {
- if(w.getId().equals(1l)) {
+ if(w.getId()==1) {
assertEquals(2, w.getRowCount());
- } else if(w.getId().equals(2l)) {
+ } else if(w.getId()==2l) {
assertEquals(1, w.getRowCount());
- } else if(w.getId().equals(3l)) {
+ } else if(w.getId()==3l) {
assertEquals(1, w.getRowCount());
}
}
diff --git a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/EventListTest.java b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/EventListTest.java
new file mode 100644
index 0000000..21db15f
--- /dev/null
+++ b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/EventListTest.java
@@ -0,0 +1,197 @@
+package com.minres.scviewer.database.test;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.stream.Collectors;
+
+import org.junit.Test;
+
+import com.minres.scviewer.database.EventList;
+import com.minres.scviewer.database.IEventList;
+
+public class EventListTest {
+
+ EventList createList(int[] times) {
+ EventList list = new EventList();
+ for(int time: times)
+ list.put(time, null);
+ return list;
+ }
+
+ Long[] getTimestamps(IEventList list) {
+ return list.entrySet().stream().map(e->e.timestamp).collect(Collectors.toList()).toArray(new Long[] {});
+ }
+
+ @Test
+ public void testInsertion() throws Exception {
+ IEventList list = createList(new int[] {5, 7, 3, 6, 2, 0});
+ assertEquals(6, list.size());
+ assertArrayEquals(new Long[]{0L, 2L, 3L, 5L, 6L, 7L}, getTimestamps(list));
+ }
+
+ @Test
+ public void testSublist() throws Exception {
+ IEventList list = createList(new int[] {5, 7, 3, 8, 2, 0});
+ {
+ IEventList subList = list.subMap(3, true, 5);
+ assertEquals(2, subList.size());
+ assertArrayEquals(new Long[]{3L, 5L}, getTimestamps(subList));
+ } {
+ IEventList subList = list.subMap(3, false, 5);
+ assertEquals(1, subList.size());
+ assertArrayEquals(new Long[]{5L}, getTimestamps(subList));
+ } {
+ IEventList subList = list.subMap(4, true, 6);
+ assertEquals(1, subList.size());
+ assertArrayEquals(new Long[]{5L}, getTimestamps(subList));
+ } {
+ IEventList subList = list.subMap(4, false, 6);
+ assertEquals(1, subList.size());
+ assertArrayEquals(new Long[]{5L}, getTimestamps(subList));
+ } {
+ IEventList subList = list.subMap(4, true, 9);
+ assertEquals(3, subList.size());
+ assertArrayEquals(new Long[]{5L, 7L, 8L}, getTimestamps(subList));
+ } {
+ IEventList subList = list.subMap(4, false, 9);
+ assertEquals(3, subList.size());
+ assertArrayEquals(new Long[]{5L, 7L, 8L}, getTimestamps(subList));
+ }
+ }
+
+ @Test
+ public void testEntries() throws Exception {
+ IEventList list = createList(new int[] {2, 5, 8, 11});
+ assertEquals(2, list.firstEntry().timestamp);
+ assertEquals(11, list.lastEntry().timestamp);
+
+ assertNull(list.floorEntry(1));
+ assertEquals(2, list.floorEntry(2).timestamp);
+ assertEquals(2, list.floorEntry(3).timestamp);
+ assertEquals(2, list.floorEntry(4).timestamp);
+ assertEquals(5, list.floorEntry(5).timestamp);
+ assertEquals(5, list.floorEntry(6).timestamp);
+ assertEquals(8, list.floorEntry(10).timestamp);
+ assertEquals(11, list.floorEntry(11).timestamp);
+ assertEquals(11, list.floorEntry(12).timestamp);
+
+ assertEquals(2, list.ceilingEntry(1).timestamp);
+ assertEquals(2, list.ceilingEntry(2).timestamp);
+ assertEquals(5, list.ceilingEntry(3).timestamp);
+ assertEquals(5, list.ceilingEntry(4).timestamp);
+ assertEquals(5, list.ceilingEntry(5).timestamp);
+ assertEquals(8, list.ceilingEntry(6).timestamp);
+ assertEquals(11, list.ceilingEntry(10).timestamp);
+ assertEquals(11, list.ceilingEntry(11).timestamp);
+ assertNull(list.ceilingEntry(12));
+
+ assertNull(list.lowerEntry(1));
+ assertNull(list.lowerEntry(2));
+ assertEquals(2, list.lowerEntry(3).timestamp);
+ assertEquals(2, list.lowerEntry(4).timestamp);
+ assertEquals(2, list.lowerEntry(5).timestamp);
+ assertEquals(5, list.lowerEntry(6).timestamp);
+ assertEquals(8, list.lowerEntry(10).timestamp);
+ assertEquals(8, list.lowerEntry(11).timestamp);
+ assertEquals(11, list.lowerEntry(12).timestamp);
+
+ assertEquals(2, list.higherEntry(1).timestamp);
+ assertEquals(5, list.higherEntry(2).timestamp);
+ assertEquals(5, list.higherEntry(3).timestamp);
+ assertEquals(5, list.higherEntry(4).timestamp);
+ assertEquals(8, list.higherEntry(5).timestamp);
+ assertEquals(8, list.higherEntry(6).timestamp);
+ assertEquals(11, list.higherEntry(10).timestamp);
+ assertNull(list.higherEntry(11));
+ assertNull(list.higherEntry(12));
+ }
+
+ @Test
+ public void testSubListEntries() throws Exception {
+ IEventList fullList = createList(new int[] {2, 5, 8, 11});
+ IEventList list = fullList.subMap(5, true, 8);
+
+ assertEquals(5, list.firstEntry().timestamp);
+ assertEquals(8, list.lastEntry().timestamp);
+
+ assertNull(list.floorEntry(1));
+ assertNull(list.floorEntry(2));
+ assertNull(list.floorEntry(3));
+ assertNull(list.floorEntry(4));
+ assertEquals(5, list.floorEntry(5).timestamp);
+ assertEquals(5, list.floorEntry(6).timestamp);
+ assertEquals(8, list.floorEntry(10).timestamp);
+ assertEquals(8, list.floorEntry(11).timestamp);
+ assertEquals(8, list.floorEntry(12).timestamp);
+
+ assertEquals(5, list.ceilingEntry(1).timestamp);
+ assertEquals(5, list.ceilingEntry(2).timestamp);
+ assertEquals(5, list.ceilingEntry(3).timestamp);
+ assertEquals(5, list.ceilingEntry(4).timestamp);
+ assertEquals(5, list.ceilingEntry(5).timestamp);
+ assertEquals(8, list.ceilingEntry(6).timestamp);
+ assertEquals(8, list.ceilingEntry(8).timestamp);
+ assertNull(list.ceilingEntry(10));
+ assertNull(list.ceilingEntry(11));
+ assertNull(list.ceilingEntry(12));
+
+ assertNull(list.lowerEntry(1));
+ assertNull(list.lowerEntry(2));
+ assertNull(list.lowerEntry(3));
+ assertNull(list.lowerEntry(4));
+ assertNull(list.lowerEntry(5));
+ assertEquals(5, list.lowerEntry(6).timestamp);
+ assertEquals(8, list.lowerEntry(10).timestamp);
+ assertEquals(8, list.lowerEntry(11).timestamp);
+ assertEquals(8, list.lowerEntry(12).timestamp);
+
+ assertEquals(5, list.higherEntry(1).timestamp);
+ assertEquals(5, list.higherEntry(2).timestamp);
+ assertEquals(5, list.higherEntry(3).timestamp);
+ assertEquals(5, list.higherEntry(4).timestamp);
+ assertEquals(8, list.higherEntry(5).timestamp);
+ assertEquals(8, list.higherEntry(6).timestamp);
+ assertNull(list.higherEntry(8));
+ assertNull(list.higherEntry(10));
+ assertNull(list.higherEntry(11));
+ assertNull(list.higherEntry(12));
+ }
+
+ @Test
+ public void testInterface() throws Exception {
+ EventList emptyList = new EventList();
+ IEventList populatedList = createList(new int[] {0, 2, 3, 5, 6, 7});
+ assertEquals(0, emptyList.size());
+ assertEquals(6, populatedList.size());
+ assertTrue(emptyList.isEmpty());
+ assertFalse(populatedList.isEmpty());
+ assertFalse(emptyList.containsKey(5));
+ assertTrue(populatedList.containsKey(5));
+ assertFalse(populatedList.containsKey(8));
+ assertNull(emptyList.get(5));
+ assertNotNull(populatedList.get(5));
+ assertNull(populatedList.get(8));
+ }
+
+ @Test
+ public void testInterfaceSublist() throws Exception {
+ IEventList fullList = createList(new int[] {0, 2, 3, 5, 6, 7});
+ IEventList emptyList = fullList.subMap(3, false, 4);
+ IEventList populatedList = fullList.subMap(2, true, 6);
+ assertEquals(0, emptyList.size());
+ assertEquals(4, populatedList.size());
+ assertTrue(emptyList.isEmpty());
+ assertFalse(populatedList.isEmpty());
+ assertFalse(emptyList.containsKey(5));
+ assertTrue(populatedList.containsKey(5));
+ assertFalse(populatedList.containsKey(8));
+ assertNull(emptyList.get(5));
+ assertNotNull(populatedList.get(5));
+ assertNull(populatedList.get(7));
+ }
+}