Compare commits

..

16 Commits

Author SHA1 Message Date
eyck 7360fcea2c add note about plugins 2021-12-11 10:54:42 +01:00
eyck f763ee842e Update index 2021-12-11 10:33:33 +01:00
eyck fadfec46ab add version 2.15.1 2021-12-02 17:57:50 +01:00
eyck 2ff69be4f8 add .gitignore 2021-11-28 11:39:36 +01:00
eyck af7eef7fd3 Merge branch 'gh-pages' of https://git.minres.com/VP-Tools/SCViewer into gh-pages 2021-11-27 17:11:21 +01:00
eyck 4209f5dc5a add version 2.15.0 repo 2021-11-27 17:09:02 +01:00
eyck de40522533 Merge branch 'gh-pages' of https://github.com/Minres/SCViewer into gh-pages 2021-11-27 17:07:48 +01:00
eyck c57bf22bbb update keyboard shortcuts 2021-11-27 16:52:56 +01:00
eyck 567b01b80d add version 2.15.0 repo 2021-11-27 16:47:01 +01:00
eyck 4a8424634b Update index.md 2021-11-20 16:10:16 +01:00
eyck e342a2de4f add scroll wheel description 2021-11-18 14:26:39 +01:00
eyck 2d61095f90 update config 2021-11-18 13:12:08 +01:00
eyck b24e6cd060 add icon 2021-11-18 11:35:28 +01:00
eyck 247d7a768d Update index.md 2021-11-18 09:31:46 +01:00
eyck 2db2e9cc2d Create index.md 2021-11-18 09:26:24 +01:00
Eyck Jentzsch 3fb6da5306 Set theme jekyll-theme-minimal 2021-11-18 09:26:12 +01:00
632 changed files with 405 additions and 843396 deletions
+1 -12
View File
@@ -1,12 +1 @@
/.metadata/ /.project
/.graph-browser/
/.recommenders/
/RemoteSystemsTempFiles/
/*.zip
SCViewer initiator_target.launch
SCViewer.xcf
SCViewer_1.png
copyrightLog.txt
/workspace
?*.launch
/.settings/
-21
View File
@@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
<intAttribute key="M2_COLORS" value="0"/>
<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
<stringAttribute key="M2_GOALS" value="package"/>
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
<booleanAttribute key="M2_OFFLINE" value="false"/>
<stringAttribute key="M2_PROFILES" value=""/>
<listAttribute key="M2_PROPERTIES"/>
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
<intAttribute key="M2_THREADS" value="1"/>
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
<stringAttribute key="M2_USER_SETTINGS" value=""/>
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
<booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:com.minres.scviewer.parent}"/>
</launchConfiguration>
-19
View File
@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
<stringAttribute key="M2_GOALS" value="package"/>
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
<booleanAttribute key="M2_OFFLINE" value="false"/>
<stringAttribute key="M2_PROFILES" value="release-composite"/>
<listAttribute key="M2_PROPERTIES"/>
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
<intAttribute key="M2_THREADS" value="1"/>
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
<stringAttribute key="M2_USER_SETTINGS" value=""/>
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="true"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:com.minres.scviewer.parent}"/>
</launchConfiguration>
-24
View File
@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
<intAttribute key="M2_COLORS" value="0"/>
<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
<stringAttribute key="M2_GOALS" value="tycho-versions:set-version tycho-versions:update-pom"/>
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
<booleanAttribute key="M2_OFFLINE" value="false"/>
<stringAttribute key="M2_PROFILES" value=""/>
<listAttribute key="M2_PROPERTIES">
<listEntry value="newVersion=${string_prompt:new version number}"/>
</listAttribute>
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
<intAttribute key="M2_THREADS" value="1"/>
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
<stringAttribute key="M2_USER_SETTINGS" value=""/>
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
<stringAttribute key="bad_container_name" value="/com.minres.scviewer.parent/.launch"/>
<booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:com.minres.scviewer.parent}"/>
</launchConfiguration>
-17
View File
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.parent</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
-203
View File
@@ -1,203 +0,0 @@
Eclipse Public License - v 1.0
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
1. DEFINITIONS
"Contribution" means:
a) in the case of the initial Contributor, the initial code and documentation
distributed under this Agreement, and
b) in the case of each subsequent Contributor:
i) changes to the Program, and
ii) additions to the Program;
where such changes and/or additions to the Program originate from and are
distributed by that particular Contributor. A Contribution 'originates'
from a Contributor if it was added to the Program by such Contributor
itself or anyone acting on such Contributor's behalf. Contributions do not
include additions to the Program which: (i) are separate modules of
software distributed in conjunction with the Program under their own
license agreement, and (ii) are not derivative works of the Program.
"Contributor" means any person or entity that distributes the Program.
"Licensed Patents" mean patent claims licensable by a Contributor which are
necessarily infringed by the use or sale of its Contribution alone or when
combined with the Program.
"Program" means the Contributions distributed in accordance with this
Agreement.
"Recipient" means anyone who receives the Program under this Agreement,
including all Contributors.
2. GRANT OF RIGHTS
a) Subject to the terms of this Agreement, each Contributor hereby grants
Recipient a non-exclusive, worldwide, royalty-free copyright license to
reproduce, prepare derivative works of, publicly display, publicly
perform, distribute and sublicense the Contribution of such Contributor,
if any, and such derivative works, in source code and object code form.
b) Subject to the terms of this Agreement, each Contributor hereby grants
Recipient a non-exclusive, worldwide, royalty-free patent license under
Licensed Patents to make, use, sell, offer to sell, import and otherwise
transfer the Contribution of such Contributor, if any, in source code and
object code form. This patent license shall apply to the combination of
the Contribution and the Program if, at the time the Contribution is
added by the Contributor, such addition of the Contribution causes such
combination to be covered by the Licensed Patents. The patent license
shall not apply to any other combinations which include the Contribution.
No hardware per se is licensed hereunder.
c) Recipient understands that although each Contributor grants the licenses
to its Contributions set forth herein, no assurances are provided by any
Contributor that the Program does not infringe the patent or other
intellectual property rights of any other entity. Each Contributor
disclaims any liability to Recipient for claims brought by any other
entity based on infringement of intellectual property rights or
otherwise. As a condition to exercising the rights and licenses granted
hereunder, each Recipient hereby assumes sole responsibility to secure
any other intellectual property rights needed, if any. For example, if a
third party patent license is required to allow Recipient to distribute
the Program, it is Recipient's responsibility to acquire that license
before distributing the Program.
d) Each Contributor represents that to its knowledge it has sufficient
copyright rights in its Contribution, if any, to grant the copyright
license set forth in this Agreement.
3. REQUIREMENTS
A Contributor may choose to distribute the Program in object code form under
its own license agreement, provided that:
a) it complies with the terms and conditions of this Agreement; and
b) its license agreement:
i) effectively disclaims on behalf of all Contributors all warranties
and conditions, express and implied, including warranties or
conditions of title and non-infringement, and implied warranties or
conditions of merchantability and fitness for a particular purpose;
ii) effectively excludes on behalf of all Contributors all liability for
damages, including direct, indirect, special, incidental and
consequential damages, such as lost profits;
iii) states that any provisions which differ from this Agreement are
offered by that Contributor alone and not by any other party; and
iv) states that source code for the Program is available from such
Contributor, and informs licensees how to obtain it in a reasonable
manner on or through a medium customarily used for software exchange.
When the Program is made available in source code form:
a) it must be made available under this Agreement; and
b) a copy of this Agreement must be included with each copy of the Program.
Contributors may not remove or alter any copyright notices contained
within the Program.
Each Contributor must identify itself as the originator of its Contribution,
if
any, in a manner that reasonably allows subsequent Recipients to identify the
originator of the Contribution.
4. COMMERCIAL DISTRIBUTION
Commercial distributors of software may accept certain responsibilities with
respect to end users, business partners and the like. While this license is
intended to facilitate the commercial use of the Program, the Contributor who
includes the Program in a commercial product offering should do so in a manner
which does not create potential liability for other Contributors. Therefore,
if a Contributor includes the Program in a commercial product offering, such
Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
every other Contributor ("Indemnified Contributor") against any losses,
damages and costs (collectively "Losses") arising from claims, lawsuits and
other legal actions brought by a third party against the Indemnified
Contributor to the extent caused by the acts or omissions of such Commercial
Contributor in connection with its distribution of the Program in a commercial
product offering. The obligations in this section do not apply to any claims
or Losses relating to any actual or alleged intellectual property
infringement. In order to qualify, an Indemnified Contributor must:
a) promptly notify the Commercial Contributor in writing of such claim, and
b) allow the Commercial Contributor to control, and cooperate with the
Commercial Contributor in, the defense and any related settlement
negotiations. The Indemnified Contributor may participate in any such claim at
its own expense.
For example, a Contributor might include the Program in a commercial product
offering, Product X. That Contributor is then a Commercial Contributor. If
that Commercial Contributor then makes performance claims, or offers
warranties related to Product X, those performance claims and warranties are
such Commercial Contributor's responsibility alone. Under this section, the
Commercial Contributor would have to defend claims against the other
Contributors related to those performance claims and warranties, and if a
court requires any other Contributor to pay any damages as a result, the
Commercial Contributor must pay those damages.
5. NO WARRANTY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
Recipient is solely responsible for determining the appropriateness of using
and distributing the Program and assumes all risks associated with its
exercise of rights under this Agreement , including but not limited to the
risks and costs of program errors, compliance with applicable laws, damage to
or loss of data, programs or equipment, and unavailability or interruption of
operations.
6. DISCLAIMER OF LIABILITY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGES.
7. GENERAL
If any provision of this Agreement is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of the
remainder of the terms of this Agreement, and without further action by the
parties hereto, such provision shall be reformed to the minimum extent
necessary to make such provision valid and enforceable.
If Recipient institutes patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Program itself
(excluding combinations of the Program with other software or hardware)
infringes such Recipient's patent(s), then such Recipient's rights granted
under Section 2(b) shall terminate as of the date such litigation is filed.
All Recipient's rights under this Agreement shall terminate if it fails to
comply with any of the material terms or conditions of this Agreement and does
not cure such failure in a reasonable period of time after becoming aware of
such noncompliance. If all Recipient's rights under this Agreement terminate,
Recipient agrees to cease use and distribution of the Program as soon as
reasonably practicable. However, Recipient's obligations under this Agreement
and any licenses granted by Recipient relating to the Program shall continue
and survive.
Everyone is permitted to copy and distribute copies of this Agreement, but in
order to avoid inconsistency the Agreement is copyrighted and may only be
modified in the following manner. The Agreement Steward reserves the right to
publish new versions (including revisions) of this Agreement from time to
time. No one other than the Agreement Steward has the right to modify this
Agreement. The Eclipse Foundation is the initial Agreement Steward. The
Eclipse Foundation may assign the responsibility to serve as the Agreement
Steward to a suitable separate entity. Each new version of the Agreement will
be given a distinguishing version number. The Program (including
Contributions) may always be distributed subject to the version of the
Agreement under which it was received. In addition, after a new version of the
Agreement is published, Contributor may elect to distribute the Program
(including its Contributions) under the new version. Except as expressly
stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
licenses to the intellectual property of any Contributor under this Agreement,
whether expressly, by implication, estoppel or otherwise. All rights in the
Program not expressly granted under this Agreement are reserved.
This Agreement is governed by the laws of the State of New York and the
intellectual property laws of the United States of America. No party to this
Agreement will bring a legal action under this Agreement more than one year
after the cause of action arose. Each party waives its rights to a jury trial in
any resulting litigation.
-72
View File
@@ -1,72 +0,0 @@
SCViewer
========
SCViewer is composed of a set of eclipse plugins to display VCD and transaction streams
created by the SystemC VCD trace implementation and the SystemC Verification Library (SCV).
For further description of the SCV please refer to
http://www.accellera.org/activities/committees/systemc-verification.
> If you encounter issue when running on Linux please try running as `SWT_GTK3=0 scviewer` as there exist issues wiht GTK3.
The viewer has the following features
- support of VCD files (compressed and uncompressed)
- real numbers
- showing vectors and real numbers as analog (step-wise & continuous)
- various value representations of bit vectors
- support of SCV transaction recordings in various formats
- text log files (compressed and uncompressed)
- sqlite based
- visualization of transaction relations
To build the plugins the Eclipse SDK or PDE can be used.
Key Shortcuts
=============
Legend:
* Left Mouse Button: LMB
* Middle Mouse Button: MMB
* Mouse Scroll wheel: MScrl
* Context any means Name List, Value List or Waveform
| Input | Modifier | Context | Action |
|------------|----------|----------|-----------------------------------|
| LMB click | | any | select |
| LMB click | Shift | Waveform | move selected marker to position |
| LMB click | Control | Waveform | move cursor to position |
| LMB drag | | Waveform | zoom to range |
| MMB click | | Waveform | move selected marker to position |
| MScrl | | any | scroll window up/down |
| MScrl | Shift | any | scroll window left/right |
| MScrl | Control | Waveform | zoom in/out |
| Key left | | Waveform | scroll window to the left (slow) |
| Key right | | Waveform | scroll window to the right (slow) |
| Key left | Shift | Waveform | scroll window to the left (fast) |
| Key right | Shift | Waveform | scroll window to the right (fast) |
| Key up | | Waveform | move selection up |
| Key down | | Waveform | move selection down |
| Key up | Control | Waveform | move selected track up |
| Key down | Control | Waveform | move selected track down |
| Key + | Control | Waveform | zoom in |
| Key - | Control | Waveform | zoom out |
| Key Pos1 | | Waveform | jump to selected marker |
| Key End | | Waveform | jump to cursor |
| Key Del | | any | delete selected entries |
| LMB click | | ZoomBar | increment/decrement 1 page |
| LMB drag | | ZoomBar | drag both markers (pan) |
| LMB drag | Control | ZoomBar | drag one marker (zoom) |
| MMB drag | | ZoomBar | drag one marker (zoom) |
| xMB dclick | | ZoomBar | pan to position |
| MScrl | | ZoomBar | scroll window left/right |
| MScrl | Shift | ZoomBar | scroll window left/right double speed |
| MScrl | Control | ZoomBar | zoom in/out |
| Key left | | ZoomBar | scroll window to the left (slow) |
| Key right | | ZoomBar | scroll window to the right (slow) |
| Key up | | ZoomBar | scroll window to the left (slow) |
| Key down | | ZoomBar | scroll window to the right (slow) |
| Key PgUp | | ZoomBar | scroll window to the left (fast) |
| Key PgDown | | ZoomBar | scroll window to the right (fast) |
| Key Pos1 | | ZoomBar | scroll to begin |
| Key End | | ZoomBar | scroll to end |
+4
View File
@@ -0,0 +1,4 @@
theme: jekyll-theme-minimal
logo: /assets/img/SCViewer_logo.png
title: SCViewer
description: A a simple tool to display waveforms

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

-1
View File
@@ -1 +0,0 @@
/target/
-11
View File
@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.doc</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
-168
View File
@@ -1,168 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>com.minres.scviewer.doc</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.17.1</version>
<relativePath>../..</relativePath>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<asciidoctor.maven.plugin.version>2.0.0</asciidoctor.maven.plugin.version>
<asciidoctorj.pdf.version>1.6.2</asciidoctorj.pdf.version>
<help.plugin.target.dir>../../plugins/com.minres.scviewer.e4.application.help</help.plugin.target.dir>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>${asciidoctor.maven.plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctorj-pdf</artifactId>
<version>${asciidoctorj.pdf.version}</version>
</dependency>
</dependencies>
<configuration>
<sourceDirectory>src/asciidoc</sourceDirectory>
<sourceDocumentName>SCViewerHelp.adoc</sourceDocumentName>
<headerFooter>true</headerFooter>
</configuration>
<executions>
<execution>
<id>output-html</id>
<phase>generate-resources</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<sourceHighlighter>coderay</sourceHighlighter>
<backend>html</backend>
<attributes>
<toc />
<linkcss>false</linkcss>
</attributes>
</configuration>
</execution>
<execution>
<id>output-docbook</id>
<phase>generate-resources</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>docbook</backend>
</configuration>
</execution>
<execution>
<id>output-pdf</id>
<phase>generate-resources</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>pdf</backend>
<sourceHighlighter>coderay</sourceHighlighter>
<attributes>
<icons>font</icons>
<pagenums />
<toc />
<idprefix />
<idseparator>-</idseparator>
</attributes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-asciidoc-resources</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>target/generated-docs/</directory>
<includes>
<include>SCViewerHelp.xml</include>
<include>**/*.jpg</include>
<include>**/*.png</include>
<include>**/*.svg</include>
</includes>
</resource>
</resources>
<outputDirectory>src/docbkx</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.agilejava.docbkx</groupId>
<artifactId>docbkx-maven-plugin</artifactId>
<version>2.0.17</version>
<executions>
<execution>
<!-- <phase>generate-sources</phase> -->
<phase>generate-resources</phase>
<goals>
<goal>generate-eclipse</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.docbook</groupId>
<artifactId>docbook-xml</artifactId>
<version>4.4</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<configuration>
<sourceDirectory>src/docbkx</sourceDirectory>
<targetDirectory>${help.plugin.target.dir}</targetDirectory>
<preProcess>
<copy todir="${help.plugin.target.dir}/images">
<fileset dir="src/docbkx/images" />
</copy>
<copy todir="${help.plugin.target.dir}/css">
<fileset dir="src/docbkx/css" />
</copy>
</preProcess>
<imgSrcPath>./</imgSrcPath>
<useExtensions>1</useExtensions>
<highlightSource>1</highlightSource>
<highlightDefaultLanguage>java</highlightDefaultLanguage>
<calloutsExtension>1</calloutsExtension>
<paperType>A4</paperType>
<!--<fop1Extensions>1</fop1Extensions>
<foCustomization>${basedir}/conf/customization-fopdf.xsl</foCustomization>-->
<!-- This copies content (images, etc) for the HTML version -->
<!-- Any parameters specific to HTML version go here -->
<htmlStylesheet>css/narrow_style.css</htmlStylesheet>
<!-- <includes>titlepage/titlepage.templates.xml</includes> -->
<includes>SCViewerHelp.xml</includes>
<chunkedOutput>true</chunkedOutput>
<xincludeSupported>true</xincludeSupported>
<!-- <foCustomization>src/test/resources/docbook-fo.xsl</foCustomization> -->
<eclipsePluginId>com.minres.scviewer.e4.application.help</eclipsePluginId>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -1,25 +0,0 @@
[#_introduction]
== Introduction
[#_overview]
=== SCViewer overview
SCViewer is composed of a set of eclipse plugins to display VCD and transaction streams
created by the SystemC VCD trace implementation and the SystemC Verification Library (SCV).
For further description of the SCV please refer to
http://www.accellera.org/activities/committees/systemc-verification.
[#_features]
=== SCViewer features
Features include:
* support of VCD files (compressed and uncompressed)
** real numbers
** showing vectors and real numbers as analog (step-wise & continuous)
* various value representations of bit vectors
* support of SCV transaction recordings in various formats
** text log files (compressed and uncompressed)
** sqlite based
** visualization of transaction relations
@@ -1,55 +0,0 @@
[#_reference]
== Reference
In this section you will find detailed descriptions of all GUI and menu elements of the SCViewer including their functions and keyboard shortcuts.
[#_keybindings]
=== Key Shortcuts
Legend:
* Left Mouse Button: LMB
* Middle Mouse Button: MMB
* Mouse Scroll wheel: MScrl
* Context any means Name List, Value List or Waveform
[cols="1,1,1,4",options="header"]
|===
| Input | Modifier | Context | Action
| LMB click | | any | select
| LMB click | Shift | Waveform | move selected marker to position
| LMB click | Control | Waveform | move cursor to position
| LMB drag | | Waveform | zoom to range
| MMB click | | Waveform | move selected marker to position
| MScrl | | any | scroll window up/down
| MScrl | Shift | any | scroll window left/right
| Key left | | Waveform | scroll window to the left (slow)
| Key right | | Waveform | scroll window to the right (slow)
| Key left | Shift | Waveform | scroll window to the left (fast)
| Key right | Shift | Waveform | scroll window to the right (fast)
| Key up | | Waveform | move selection up
| Key down | | Waveform | move selection down
| Key up | Control | Waveform | move selected track up
| Key down | Control | Waveform | move selected track down
| Key + | Control | Waveform | zoom in
| Key - | Control | Waveform | zoom out
| Key Pos1 | | Waveform | jump to selected marker
| Key End | | Waveform | jump to cursor
| Key Del | | any | delete selected entries
| LMB click | | ZoomBar | increment/decrement 1 page
| LMB drag | | ZoomBar | drag both markers (pan)
| LMB drag | Control | ZoomBar | drag one marker (zoom)
| MMB drag | | ZoomBar | drag one marker (zoom)
| xMB dclick | | ZoomBar | pan to position
| MScrl | | ZoomBar | scroll window left/right
| MScrl | Shift | ZoomBar | scroll window left/right double speed
| MScrl | Control | ZoomBar | zoom in/out
| Key left | | ZoomBar | scroll window to the left (slow)
| Key right | | ZoomBar | scroll window to the right (slow)
| Key up | | ZoomBar | scroll window to the left (slow)
| Key down | | ZoomBar | scroll window to the right (slow)
| Key PgUp | | ZoomBar | scroll window to the left (fast)
| Key PgDown | | ZoomBar | scroll window to the right (fast)
| Key Pos1 | | ZoomBar | scroll to begin
| Key End | | ZoomBar | scroll to end
|===
@@ -1,39 +0,0 @@
[#_start]
= SCViewer User Guide
:title-logo-image: image:Minres_logo_docs.png[width=750, align="right"]
:doctype: book
:source-highlighter: coderay
:coderay-linenums-mode: inline
:coderay-css: class
:listing-caption: Listing
:icons: font
//add table-of-contents (toc) and set its depth
:toc:
:toclevels: 3
:data-uri:
:sectnums:
:toc-title: Contents
:homepage: https://www.minres.com/
:keywords:
:title-page:
:xrefstyle: short
:table-caption: Table
:figure-caption: Figure
:appendix-caption: Appendix
:section-refsig: Chapter
//set directories
:imagesdir: ./images
:iconsdir: ./icons
:stylesdir: ./styles
:scriptsdir: ./js
:pdf-themesdir: ./themes
:pdf-theme: mnrs-doc
:pdf-fontsdir: ./fonts
// unset toc, otherwise it appears in table cells -> known bug, should be fixed in later versions!
:toc!:
include::Overview.adoc[]
include::Reference.adoc[]
@@ -1,93 +0,0 @@
Copyright (c) 2009-2011 by Accademia di Belle Arti di Urbino and students of MA course of Visual design. Some rights reserved.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

@@ -1,55 +0,0 @@
page:
layout: portrait
margin: [2.3cm, 2cm, 2cm, 2.2cm]
size: A4
base:
font-color: #000000
font-color-mnrs-grey: #6a747c
font-color-mnrs-blue: #197788
font-family: titillium
font-size: 12
line-height-length: 16
line-height: $base-line-height-length / $base-font-size
align: justify
vertical-spacing: $base-line-height-length
heading:
font-color: $base-font-color-mnrs-grey
font-size: $base-font-size * 1.25
font-style: bold
line-height: $base-line-height * 1.2
margin-bottom: $vertical-spacing
link:
font-color: $base_font-color-mnrs-blue
outline-list:
indent: $base-font-size * 1.5
footer:
height: $base-line-height-length * 3.0
font-color: $base-font-color-mnrs-grey
font-size: $base-font-size * 0.9
line-height: 1
recto:
left:
content: '{description} v{revision}, &#169; 2021 MINRES'
right:
content: '{page-number}'
verso:
left:
content: $footer_recto_right_content
right:
content: $footer_recto_left_content
table:
border_color: $base-font-color
border_width: 0.1
title-page:
align: right
font-color: $base-font-color-mnrs-grey
font-size: $base-font-size * 1.80
font-style: bold
font:
fallbacks: titilliumtext22l002-webfont.ttf
catalog:
titillium:
normal: titilliumtext22l002-webfont.ttf
bold: titilliumtext22l005-webfont.ttf
italic: TitilliumWeb-Italic.ttf
bold_italic: TitilliumWeb-BoldItalic.ttf
@@ -1 +0,0 @@
/SCViewerHelp.xml
@@ -1,124 +0,0 @@
P.Code {
display: block;
text-align: left;
text-indent: 0.00pt;
margin-top: 0.000000pt;
margin-bottom: 0.000000pt;
margin-right: 0.000000pt;
margin-left: 1.5em;
font-size: 100%;
font-weight: medium;
font-style: Regular;
color: #4444CC;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
font-family: "Courier New";
}
H6.CaptionFigColumn {
display: block;
text-align: left;
text-indent: 0.000000pt;
margin-top: 0.3em;
margin-bottom: 1.1em;
margin-right: 0.000000pt;
margin-left: 0.000000pt;
font-size: 90%;
font-weight: medium;
font-style: Italic;
color: #000000;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
font-family: "Arial";
}
P.Note {
display: block;
text-align: left;
text-indent: 0pt;
margin-top: 1.95em;
margin-bottom: 1.95em;
margin-right: 0.000000pt;
margin-left: 3.0em;
font-size: 110%;
font-weight: medium;
font-style: Italic;
color: #000000;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
font-family: "Arial";
}
EM.UILabel {
font-weight: Bold;
font-style: Regular;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
}
EM.CodeName {
font-weight: Bold;
font-style: Regular;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
font-family:"Courier New";
}
body, html { border: 0px }
/* following font face declarations need to be removed for DBCS */
body, h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font: message-box; color: #000000}
pre { font-family: Courier, monospace}
/* end font face declarations */
/* following font size declarations should be OK for DBCS */
body, h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font: message-box; }
pre { font-size: 100% }
code,samp { font-size: 100%; }
/* end font size declarations */
body { background: #FFFFFF}
h1 { font-size: 180%; font-weight: medium; margin-top: 0.28em; margin-bottom: 0.05em; color: Highlight }
h2 { font-size: 140%; font-weight: bold; margin-top: 0.22em; margin-bottom: 3; color: Highlight }
h3 { font-size: 110%; font-weight: bold; margin-top: 0.18em; margin-bottom: 3 }
h4 { font-size: 100%; font-weight: bold; margin-top: 0.2em; margin-bottom: 3; font-style: italic }
p { margin-top: 1.0em; margin-bottom: 1.0em }
pre { margin-left: 6; font-size: 90% }
a:link { color: #0000FF }
a:hover { color: #000080 }
a:visited { text-decoration: underline }
ul { margin-top: 0;
margin-bottom: 1.0em;
margin-left : 1.0em;
padding-left: 0;
}
li { margin-top: 0;
margin-bottom: 0;
padding-left: 0;
margin-left: 0;
}
li p { margin-top: 0; margin-bottom: 0 }
ol { margin-top: 0;
margin-bottom: 10;
padding-left: 0;
margin-left: 1.4em }
dl { margin-top: 0; margin-bottom: 10 }
dt { margin-top: 0; margin-bottom: 0; font-weight: bold }
dd { margin-top: 0; margin-bottom: 0 }
strong { font-weight: bold}
em { font-style: italic}
var { font-style: italic}
div.revision { border-left-style: solid; border-left-width: thin;
border-left-color: #7B68EE; padding-left:5 }
th { font-weight: bold }
.figure-contents .mediaobject img {
width: 100%;
heigth: auto;
}
@@ -1,108 +0,0 @@
P.Code {
display: block;
text-align: left;
text-indent: 0.00pt;
margin-top: 0.000000pt;
margin-bottom: 0.000000pt;
margin-right: 0.000000pt;
margin-left: 15pt;
font-weight: normal;
font-style: normal;
color: #4444CC;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
font-family: "Courier New", Courier, monospace;
}
H6.CaptionFigColumn {
display: block;
text-align: left;
text-indent: 0.000000pt;
margin-top: 3.000000pt;
margin-bottom: 11.000000pt;
margin-right: 0.000000pt;
margin-left: 0.000000pt;
font-size: 75%;
font-weight: bold;
font-style: Italic;
color: #000000;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
}
P.Note {
display: block;
text-align: left;
text-indent: 0pt;
margin-top: 19.500000pt;
margin-bottom: 19.500000pt;
margin-right: 0.000000pt;
margin-left: 30pt;
font-size: 110%;
font-weight: normal;
font-style: Italic;
color: #000000;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
}
EM.UILabel {
font-weight: Bold;
font-style: normal;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
}
EM.CodeName {
font-weight: Bold;
font-style: normal;
text-decoration: none;
vertical-align: baseline;
text-transform: none;
font-family: "Courier New", Courier, monospace;
}
UL.NavList {
margin-left: 1.5em;
padding-left: 0px;
list-style-type: none;
}
body, html { border: 0px }
/* following font face declarations need to be removed for DBCS */
body, h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font-family: Arial, Helvetica, sans-serif; color: #000000}
pre, code { font-family: "Courier New", Courier, monospace;}
/* end font face declarations */
@media print {
html { font-size: 12pt }
}
body { font-size: 83%; background: #FFFFFF; margin-bottom: 1em }
h1 { font-size: 180%; margin-top: 5px; margin-bottom: 1px }
h2 { font-size: 140%; margin-top: 25px; margin-bottom: 3px }
h3 { font-size: 110%; margin-top: 20px; margin-bottom: 3px }
h4 { font-size: 100%; margin-top: 20px; margin-bottom: 3px; font-style: italic }
p { margin-top: 10px; margin-bottom: 10px }
pre { font-size: 93%; margin-left: 6; color: #4444CC }
code { font-size: 93%; }
table { font-size: 100% } /* needed for quirks mode */
a:link { color: #0000FF }
a:hover { color: #000080 }
a:visited { text-decoration: underline }
ul { margin-top: 10px; margin-bottom: 10px; }
li { margin-top: 5px; margin-bottom: 5px; }
li p { margin-top: 5px; margin-bottom: 5px; }
ol { margin-top: 10px; margin-bottom: 10px; }
dl { margin-top: 10px; margin-bottom: 10px; }
dt { margin-top: 5px; margin-bottom: 5px; font-weight: bold; }
dd { margin-top: 5px; margin-bottom: 5px; }
strong { font-weight: bold}
em { font-style: italic}
var { font-style: italic}
div.revision { border-left-style: solid; border-left-width: thin;
border-left-color: #7B68EE; padding-left:5 }
th { font-weight: bold }
@@ -1 +0,0 @@
/*.png
@@ -1 +0,0 @@
/target/
@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.database.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>
@@ -1,4 +0,0 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
@@ -1,4 +0,0 @@
bin.includes = feature.xml,\
feature.properties
src.includes = feature.properties,\
feature.xml
@@ -1,102 +0,0 @@
featureName=SystemC simulation results viewer database loaders
providerName=MINRES Technologies GmbH
updateSiteName=SC Viewer Database Loader Updates
description=A viewer for SystemC Verification Library transactions and VCD signals.
licenseURL=license.html
license=\
ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
March 17, 2005\n\
\n\
Usage Of Content\n\
\n\
THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
\n\
Applicable Licenses\n\
\n\
Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
is provided to you under the terms and conditions of the Eclipse Public\n\
License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
For purposes of the EPL, "Program" will mean the Content.\n\
\n\
Content includes, but is not limited to, source code, object code,\n\
documentation and other files maintained in the Eclipse.org CVS\n\
repository ("Repository") in CVS modules ("Modules") and made available\n\
as downloadable archives ("Downloads").\n\
\n\
- Content may be structured and packaged into modules to facilitate delivering,\n\
extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
plug-in fragments ("Fragments"), and features ("Features").\n\
- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
in a directory named "plugins".\n\
- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
Each Feature may be packaged as a sub-directory in a directory named "features".\n\
Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
- Features may also include other Features ("Included Features"). Within a Feature, files\n\
named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
\n\
Features may also include other Features ("Included Features"). Files named\n\
"feature.xml" may contain a list of the names and version numbers of\n\
Included Features.\n\
\n\
The terms and conditions governing Plug-ins and Fragments should be\n\
contained in files named "about.html" ("Abouts"). The terms and\n\
conditions governing Features and Included Features should be contained\n\
in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
Licenses may be located in any directory of a Download or Module\n\
including, but not limited to the following locations:\n\
\n\
- The top-level (root) directory\n\
- Plug-in and Fragment directories\n\
- Inside Plug-ins and Fragments packaged as JARs\n\
- Sub-directories of the directory named "src" of certain Plug-ins\n\
- Feature directories\n\
\n\
Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
Eclipse Update Manager, you must agree to a license ("Feature Update\n\
License") during the installation process. If the Feature contains\n\
Included Features, the Feature Update License should either provide you\n\
with the terms and conditions governing the Included Features or inform\n\
you where you can locate them. Feature Update Licenses may be found in\n\
the "license" property of files named "feature.properties". Such Abouts,\n\
Feature Licenses and Feature Update Licenses contain the terms and\n\
conditions (or references to such terms and conditions) that govern your\n\
use of the associated Content in that directory.\n\
\n\
THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
\n\
- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
- IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
- Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
\n\
IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
govern that particular Content.\n\
\n\
Cryptography\n\
\n\
Content may contain encryption software. The country in which you are\n\
currently may have restrictions on the import, possession, and use,\n\
and/or re-export to another country, of encryption software. BEFORE\n\
using any encryption software, please check the country's laws,\n\
regulations and policies concerning the import, possession, or use,\n\
and re-export of encryption software, to see if this is permitted.\n\
\n\
Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
@@ -1,80 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.minres.scviewer.database.feature"
label="%featureName"
version="3.0.0.qualifier"
provider-name="%providerName">
<description>
The database loaders for SystemC Verification Library transactions and VCD signals. They support SQLite based recording as well as the built-in text base recording.
</description>
<copyright>
Copyright (c) 2015-2021 MINRES Technologies GmbH.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License
v1.0 which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html
</copyright>
<license url="%licenseURL">
%license
</license>
<url>
<update label="%updateSiteName" url="http://www.minres.com/scviewer/update"/>
<discovery label="MINRES Website" url="http://www.minres.com"/>
</url>
<requires>
<import plugin="org.eclipse.osgi.services" version="3.4.0" match="greaterOrEqual"/>
<import plugin="com.google.guava" version="15.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.osgi"/>
<import plugin="com.minres.scviewer.database" version="1.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.core.runtime"/>
<import feature="org.eclipse.collections.feature" version="10.4.0.v20200820-2049"/>
</requires>
<plugin
id="com.minres.scviewer.database"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.minres.scviewer.database.text"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.minres.scviewer.database.sqlite"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.minres.scviewer.database.vcd"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.google.guava"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.minres.scviewer.database.ftr"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>
@@ -1,12 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>com.minres.scviewer.database.feature</artifactId>
<packaging>eclipse-feature</packaging>
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.17.1</version>
<relativePath>../..</relativePath>
</parent>
<version>3.0.0-SNAPSHOT</version>
</project>
@@ -1 +0,0 @@
/target/
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.e4.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>
@@ -1 +0,0 @@
bin.includes = feature.xml
@@ -1,67 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.minres.scviewer.e4.feature"
label="SCViewer Feature"
version="1.1.0.qualifier"
provider-name="MINRES Technologies GmbH">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<url>
<update label="SC Viewer Updates" url="http://www.minres.com/scviewer/update"/>
</url>
<requires>
<import plugin="javax.inject" version="1.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.core.runtime" version="3.11.1" match="greaterOrEqual"/>
<import plugin="org.eclipse.swt" version="3.104.1" match="greaterOrEqual"/>
<import plugin="org.eclipse.e4.ui.model.workbench" version="1.1.100" match="greaterOrEqual"/>
<import plugin="org.eclipse.jface" version="3.11.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.e4.ui.services" version="1.2.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.e4.ui.workbench" version="1.3.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.e4.core.di" version="1.5.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.e4.ui.di" version="1.1.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.e4.core.contexts" version="1.4.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.osgi.services" version="3.5.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.e4.core.services" version="2.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.core.jobs"/>
<import plugin="org.eclipse.osgi"/>
<import plugin="org.eclipse.equinox.preferences"/>
<import plugin="org.eclipse.core.expressions"/>
<import plugin="org.eclipse.e4.core.commands" version="0.11.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.e4.core.di.extensions"/>
<import plugin="org.eclipse.e4.ui.css.swt.theme" version="0.10.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.core.resources" version="3.13.0" match="greaterOrEqual"/>
<import feature="com.opcoach.e4.preferences.feature" version="1.3.0.202004072127"/>
<import feature="org.eclipse.equinox.executable" version="3.8.700.v20200207-2156"/>
<import feature="org.eclipse.rcptt.core" version="2.5.1.M3"/>
<import plugin="org.eclipse.core.commands"/>
<import feature="com.minres.scviewer.database.feature" version="3.0.0.qualifier"/>
<import feature="com.minres.scviewer.ui.feature" version="1.1.0.qualifier"/>
</requires>
<plugin
id="com.minres.scviewer.e4.application"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.opcoach.e4.preferences"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>
@@ -1,12 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>com.minres.scviewer.e4.feature</artifactId>
<packaging>eclipse-feature</packaging>
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.17.1</version>
<relativePath>../..</relativePath>
</parent>
<version>1.1.0-SNAPSHOT</version>
</project>
@@ -1 +0,0 @@
/target/
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.e4.help.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>
@@ -1 +0,0 @@
bin.includes = feature.xml
@@ -1,207 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.minres.scviewer.e4.help.feature"
label="Feature"
version="1.0.0.qualifier"
provider-name="MINRES Technologies GmbH">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<plugin
id="org.eclipse.help"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.help.webapp"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.help.base"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.apache.lucene.core"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.apache.lucene.analyzers-common"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.apache.lucene.analyzers-smartcn"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.core.net"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.equinox.security"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.equinox.security.linux.x86_64"
os="linux"
arch="x86_64"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"/>
<plugin
id="javax.el"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="javax.servlet"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="javax.servlet.jsp"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.equinox.http.jetty"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.equinox.http.registry"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.equinox.http.servlet"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.equinox.jsp.jasper"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.equinox.jsp.jasper.registry"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.apache.jasper.glassfish"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.jetty.http"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.jetty.io"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.jetty.security"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.jetty.server"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.jetty.servlet"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.jetty.util"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.minres.scviewer.e4.application.help"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.equinox.security.win32.x86_64"
os="win32"
arch="x86_64"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
</feature>
@@ -1,12 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>com.minres.scviewer.e4.help.feature</artifactId>
<packaging>eclipse-feature</packaging>
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.17.1</version>
<relativePath>../..</relativePath>
</parent>
<version>1.0.0-SNAPSHOT</version>
</project>
@@ -1 +0,0 @@
/target/
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.e4.platform.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>
@@ -1 +0,0 @@
bin.includes = feature.xml
@@ -1,79 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.minres.scviewer.e4.platform.feature"
label="SCViewer Platform Feature"
version="1.0.0.qualifier"
provider-name="MINRES Technologies GmbH">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<includes
id="org.eclipse.e4.rcp"
version="0.0.0"/>
<includes
id="org.eclipse.emf.ecore"
version="0.0.0"/>
<includes
id="org.eclipse.emf.common"
version="0.0.0"/>
<includes
id="org.eclipse.collections.feature"
version="0.0.0"/>
<requires>
<import plugin="org.eclipse.core.expressions" version="3.2.0" match="compatible"/>
<import plugin="org.eclipse.core.filesystem" version="1.3.0" match="compatible"/>
<import plugin="org.eclipse.core.runtime" version="3.12.0" match="compatible"/>
<import plugin="org.eclipse.equinox.common" version="3.2.0" match="compatible"/>
<import plugin="org.eclipse.equinox.registry" version="3.2.0" match="compatible"/>
<import plugin="org.eclipse.osgi" version="3.2.0" match="compatible"/>
</requires>
<plugin
id="org.eclipse.core.resources"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.core.filesystem"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.core.filesystem.linux.x86_64"
os="linux"
arch="x86_64"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.eclipse.core.filesystem.win32.x86_64"
os="win32"
arch="x86_64"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
</feature>
@@ -1,12 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>com.minres.scviewer.e4.platform.feature</artifactId>
<packaging>eclipse-feature</packaging>
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.17.1</version>
<relativePath>../..</relativePath>
</parent>
<version>1.0.0-SNAPSHOT</version>
</project>
@@ -1 +0,0 @@
/target/
@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>
@@ -1,4 +0,0 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
@@ -1,4 +0,0 @@
bin.includes = feature.xml,\
feature.properties
src.includes = feature.properties,\
feature.xml
@@ -1,102 +0,0 @@
featureName=SystemC simulation results viewer
providerName=MINRES Technologies GmbH
updateSiteName=SC Viewer Updates
description=A viewer for SystemC Verification Library transactions and VCD signals.
licenseURL=license.html
license=\
ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
March 17, 2005\n\
\n\
Usage Of Content\n\
\n\
THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
\n\
Applicable Licenses\n\
\n\
Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
is provided to you under the terms and conditions of the Eclipse Public\n\
License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
For purposes of the EPL, "Program" will mean the Content.\n\
\n\
Content includes, but is not limited to, source code, object code,\n\
documentation and other files maintained in the Eclipse.org CVS\n\
repository ("Repository") in CVS modules ("Modules") and made available\n\
as downloadable archives ("Downloads").\n\
\n\
- Content may be structured and packaged into modules to facilitate delivering,\n\
extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
plug-in fragments ("Fragments"), and features ("Features").\n\
- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
in a directory named "plugins".\n\
- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
Each Feature may be packaged as a sub-directory in a directory named "features".\n\
Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
- Features may also include other Features ("Included Features"). Within a Feature, files\n\
named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
\n\
Features may also include other Features ("Included Features"). Files named\n\
"feature.xml" may contain a list of the names and version numbers of\n\
Included Features.\n\
\n\
The terms and conditions governing Plug-ins and Fragments should be\n\
contained in files named "about.html" ("Abouts"). The terms and\n\
conditions governing Features and Included Features should be contained\n\
in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
Licenses may be located in any directory of a Download or Module\n\
including, but not limited to the following locations:\n\
\n\
- The top-level (root) directory\n\
- Plug-in and Fragment directories\n\
- Inside Plug-ins and Fragments packaged as JARs\n\
- Sub-directories of the directory named "src" of certain Plug-ins\n\
- Feature directories\n\
\n\
Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
Eclipse Update Manager, you must agree to a license ("Feature Update\n\
License") during the installation process. If the Feature contains\n\
Included Features, the Feature Update License should either provide you\n\
with the terms and conditions governing the Included Features or inform\n\
you where you can locate them. Feature Update Licenses may be found in\n\
the "license" property of files named "feature.properties". Such Abouts,\n\
Feature Licenses and Feature Update Licenses contain the terms and\n\
conditions (or references to such terms and conditions) that govern your\n\
use of the associated Content in that directory.\n\
\n\
THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
\n\
- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
- IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
- Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
\n\
IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
govern that particular Content.\n\
\n\
Cryptography\n\
\n\
Content may contain encryption software. The country in which you are\n\
currently may have restrictions on the import, possession, and use,\n\
and/or re-export to another country, of encryption software. BEFORE\n\
using any encryption software, please check the country's laws,\n\
regulations and policies concerning the import, possession, or use,\n\
and re-export of encryption software, to see if this is permitted.\n\
\n\
Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
@@ -1,67 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.minres.scviewer.feature"
label="%featureName"
version="1.1.0.qualifier"
provider-name="%providerName">
<description>
A viewer for SystemC Verification Library transactions and VCD
signals. It supports a SQLite based recording as well as the
built-in text base recording.
</description>
<copyright>
Copyright (c) 2015-2021 MINRES Technologies GmbH.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License
v1.0 which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html
</copyright>
<license url="%licenseURL">
%license
</license>
<url>
<discovery label="MINRES Website" url="http://www.minres.com"/>
</url>
<requires>
<import plugin="org.hamcrest.core" version="1.3.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.core.runtime"/>
<import plugin="org.eclipse.core.resources"/>
<import plugin="org.eclipse.jface.text"/>
<import plugin="org.eclipse.ui"/>
<import plugin="org.eclipse.ui.editors"/>
<import plugin="org.eclipse.ui.ide"/>
<import plugin="org.eclipse.ui.views.properties.tabbed"/>
<import plugin="org.eclipse.swt"/>
<import plugin="org.eclipse.osgi"/>
<import plugin="org.eclipse.core.expressions" version="3.4.600" match="greaterOrEqual"/>
<import plugin="org.eclipse.jface"/>
<import feature="com.minres.scviewer.database.feature" version="3.0.0.qualifier"/>
<import feature="com.minres.scviewer.ui.feature" version="1.1.0.qualifier"/>
</requires>
<plugin
id="org.junit"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.hamcrest.core"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.minres.scviewer.ui"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>
@@ -1,12 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>com.minres.scviewer.feature</artifactId>
<packaging>eclipse-feature</packaging>
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.17.1</version>
<relativePath>../..</relativePath>
</parent>
<version>1.1.0-SNAPSHOT</version>
</project>
@@ -1 +0,0 @@
/target/
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.ui.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>
@@ -1,4 +0,0 @@
bin.includes = feature.xml,\
feature.properties
src.includes = feature.properties,\
feature.xml
@@ -1,102 +0,0 @@
featureName=SCViewer UI elements
providerName=MINRES Technologies GmbH
updateSiteName=SC Viewer UI Updates
description=A viewer for SystemC Verification Library transactions and VCD signals.
licenseURL=license.html
license=\
ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
March 17, 2005\n\
\n\
Usage Of Content\n\
\n\
THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
\n\
Applicable Licenses\n\
\n\
Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
is provided to you under the terms and conditions of the Eclipse Public\n\
License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
For purposes of the EPL, "Program" will mean the Content.\n\
\n\
Content includes, but is not limited to, source code, object code,\n\
documentation and other files maintained in the Eclipse.org CVS\n\
repository ("Repository") in CVS modules ("Modules") and made available\n\
as downloadable archives ("Downloads").\n\
\n\
- Content may be structured and packaged into modules to facilitate delivering,\n\
extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
plug-in fragments ("Fragments"), and features ("Features").\n\
- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
in a directory named "plugins".\n\
- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
Each Feature may be packaged as a sub-directory in a directory named "features".\n\
Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
- Features may also include other Features ("Included Features"). Within a Feature, files\n\
named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
\n\
Features may also include other Features ("Included Features"). Files named\n\
"feature.xml" may contain a list of the names and version numbers of\n\
Included Features.\n\
\n\
The terms and conditions governing Plug-ins and Fragments should be\n\
contained in files named "about.html" ("Abouts"). The terms and\n\
conditions governing Features and Included Features should be contained\n\
in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
Licenses may be located in any directory of a Download or Module\n\
including, but not limited to the following locations:\n\
\n\
- The top-level (root) directory\n\
- Plug-in and Fragment directories\n\
- Inside Plug-ins and Fragments packaged as JARs\n\
- Sub-directories of the directory named "src" of certain Plug-ins\n\
- Feature directories\n\
\n\
Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
Eclipse Update Manager, you must agree to a license ("Feature Update\n\
License") during the installation process. If the Feature contains\n\
Included Features, the Feature Update License should either provide you\n\
with the terms and conditions governing the Included Features or inform\n\
you where you can locate them. Feature Update Licenses may be found in\n\
the "license" property of files named "feature.properties". Such Abouts,\n\
Feature Licenses and Feature Update Licenses contain the terms and\n\
conditions (or references to such terms and conditions) that govern your\n\
use of the associated Content in that directory.\n\
\n\
THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
\n\
- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
- IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
- Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
\n\
IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
govern that particular Content.\n\
\n\
Cryptography\n\
\n\
Content may contain encryption software. The country in which you are\n\
currently may have restrictions on the import, possession, and use,\n\
and/or re-export to another country, of encryption software. BEFORE\n\
using any encryption software, please check the country's laws,\n\
regulations and policies concerning the import, possession, or use,\n\
and re-export of encryption software, to see if this is permitted.\n\
\n\
Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
@@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.minres.scviewer.ui.feature"
label="%featureName"
version="1.1.0.qualifier"
provider-name="%providerName">
<description>
The UI for the SCViewer databases
</description>
<copyright>
Copyright (c) 2015-2021 MINRES Technologies GmbH.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License
v1.0 which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html
</copyright>
<license url="%licenseURL">
%license
</license>
<url>
<discovery label="MINRES Website" url="http://www.minres.com"/>
</url>
<requires>
<import plugin="org.eclipse.swt" version="3.103.1" match="greaterOrEqual"/>
<import plugin="org.eclipse.jface"/>
<import plugin="org.eclipse.equinox.registry"/>
<import plugin="org.eclipse.core.runtime"/>
<import plugin="org.eclipse.osgi"/>
<import feature="com.minres.scviewer.database.feature" version="3.0.0.qualifier"/>
</requires>
<plugin
id="com.minres.scviewer.database.ui.swt"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>
@@ -1,12 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>com.minres.scviewer.ui.feature</artifactId>
<packaging>eclipse-feature</packaging>
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.17.1</version>
<relativePath>../..</relativePath>
</parent>
<version>1.1.0-SNAPSHOT</version>
</project>
+54
View File
@@ -0,0 +1,54 @@
# Welcome to SCViewer
SCViewer is a simple tool to display VCD and transaction streams created by the SystemC VCD trace implementation and the SystemC Verification Library (SCV).
The viewer has the following features
* support of VCD files (compressed and uncompressed)
* real numbers
* showing vectors and real numbers as analog (step-wise & continuous)
* various value representations of bit vectors
* support of SCV transaction recordings in various formats
* text log files (compressed and uncompressed)
* visualization of transaction relations
SCViewer is available as standalone version and can be downloaded at [Github](https://github.com/Minres/SCViewer/releases).
It can also be installed into an Eclipse application by using the update site at https://minres.github.io/SCViewer/repository.
> Please note that this is work in progress
------------------------
# Help
## Key Shortcuts
Legend:
* Left Mouse Button: LMB
* Middle Mouse Button: MMB
* Mouse Scroll wheel: MScrl
* Context any means Name List, Value List or Waveform
| Input | Modifier | Context | Action |
|-----------|----------|----------|-----------------------------------|
| LMB klick | | any | select |
| LMB klick | Shift | Waveform | move selected marker to position |
| LMB klick | Control | Waveform | move cursor to position |
| LMB drag | | Waveform | zoom to range |
| MMB klick | | Waveform | move selected marker to position |
| MScrl | | any | scroll window up/down |
| MScrl | Shift | any | scroll window left/right |
| MScrl | Control | Waveform | increase/decrease zoom level |
| Key left | | Waveform | scroll window to the left (slow) |
| Key right | | Waveform | scroll window to the right (slow) |
| Key left | Shift | Waveform | scroll window to the left (fast) |
| Key right | Shift | Waveform | scroll window to the right (fast) |
| Key up | | Waveform | move selection up |
| Key down | | Waveform | move selection down |
| Key up | Control | Waveform | move selected track up |
| Key down | Control | Waveform | move selected track down |
| Key + | Control | Waveform | zoom in |
| Key - | Control | Waveform | zoom out |
| Key Pos1 | | Waveform | jump to selected marker |
| Key End | | Waveform | jump to cursor |
| Key Del | | any | delete selected entries |
@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
@@ -1,3 +0,0 @@
/bin
/target/
/.settings/
@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.database.ftr</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ds.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -1,18 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: CBOR transaction database
Bundle-SymbolicName: com.minres.scviewer.database.ftr
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
Bundle-RequiredExecutionEnvironment: JavaSE-11
Import-Package: org.osgi.framework;version="1.3.0",
org.slf4j;version="1.7.2"
Require-Bundle: com.minres.scviewer.database,
org.eclipse.osgi.services;bundle-version="3.4.0",
com.google.guava;bundle-version="15.0.0",
org.eclipse.collections;bundle-version="10.4.0",
org.apache.commons.compress;bundle-version="1.20.0"
Service-Component: OSGI-INF/component.xml
Bundle-ActivationPolicy: lazy
Automatic-Module-Name: com.minres.scviewer.database.ftr
Bundle-ClassPath: .
@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="FtrDbLoaderFactory">
<implementation class="com.minres.scviewer.database.ftr.FtrDbLoaderFactory"/>
<service>
<provide interface="com.minres.scviewer.database.IWaveformDbLoaderFactory"/>
</service>
</scr:component>
@@ -1,14 +0,0 @@
###############################################################################
# Copyright (c) 2014, 2015-2021 MINRES Technologies GmbH and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# MINRES Technologies GmbH - initial API and implementation
###############################################################################
bin.includes = META-INF/,\
.,\
OSGI-INF/
source.. = src/
@@ -1,14 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>com.minres.scviewer.database.ftr</artifactId>
<version>1.0.0-SNAPSHOT</version>
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.17.1</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>
</project>
@@ -1,189 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.util.ArrayList;
import java.util.HashMap;
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;
import com.minres.scviewer.database.tx.ITxEvent;
/**
* The Class AbstractTxStream.
*/
abstract class AbstractTxStream extends HierNode implements IWaveform {
private final String fullName;
/** The id. */
private Long id;
/** The loader. */
protected FtrDbLoader loader;
/** The events. */
IEventList events = new EventList();
/** The max concurrency. */
private int rowCount = -1;
/**
* Instantiates a new abstract tx stream.
*
* @param loader the loader
* @param id the id
* @param name the name
*/
protected AbstractTxStream(FtrDbLoader 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) {
events.put(evt.getTime(), evt);
}
/**
* Gets the events.
*
* @return the events
*/
@Override
public IEventList getEvents() {
return events;
}
/**
* Gets the events at time.
*
* @param time the time
* @return the events at time
*/
@Override
public IEvent[] getEventsAtTime(long time) {
return events.get(time);
}
/**
* Gets the events before time.
*
* @param time the time
* @return the events before time
*/
@Override
public IEvent[] getEventsBeforeTime(long time) {
EventEntry e = events.floorEntry(time);
if (e == null)
return new IEvent[] {};
else
return events.floorEntry(time).events;
}
/**
* Gets the type.
*
* @return the type
*/
@Override
public WaveformType getType() {
return WaveformType.TRANSACTION;
}
/**
* Gets the id.
*
* @return the id
*/
@Override
public long getId() {
return id;
}
/**
* Gets the width.
*
* @return the width
*/
@Override
public int getRowCount() {
if (rowCount<0)
calculateConcurrency();
return rowCount;
}
/**
* Calculate concurrency.
*/
void calculateConcurrency() {
if (rowCount>=0)
return;
ArrayList<Long> rowEndTime = new ArrayList<>();
HashMap<Long, Integer> rowByTxId = new HashMap<>();
for(EventEntry entry: events) {
for(IEvent evt:entry.events) {
TxEvent txEvt = (TxEvent) evt;
ITx tx = txEvt.getTransaction();
int rowIdx = 0;
switch(evt.getKind()) {
case END: //TODO: might throw NPE in concurrent execution
Long txId = txEvt.getTransaction().getId();
txEvt.setConcurrencyIndex(rowByTxId.get(txId));
rowByTxId.remove(txId);
break;
case SINGLE:
for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++);
if (rowEndTime.size() <= rowIdx)
rowEndTime.add(tx.getEndTime());
else
rowEndTime.set(rowIdx, tx.getEndTime());
((TxEvent) evt).setConcurrencyIndex(rowIdx);
break;
case BEGIN:
for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++);
if (rowEndTime.size() <= rowIdx)
rowEndTime.add(tx.getEndTime());
else
rowEndTime.set(rowIdx, tx.getEndTime());
((TxEvent) evt).setConcurrencyIndex(rowIdx);
rowByTxId.put(tx.getId(), rowIdx);
break;
}
}
}
rowCount=rowEndTime.size()>0?rowEndTime.size():1;
//getChildNodes().parallelStream().forEach(c -> ((TxGenerator)c).calculateConcurrency());
getChildNodes().stream().forEach(c -> ((TxGenerator)c).calculateConcurrency());
}
}
@@ -1,525 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.commons.compress.compressors.lz4.BlockLZ4CompressorInputStream;
import org.eclipse.collections.impl.map.mutable.UnifiedMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.HashMultimap;
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.DataType;
import com.minres.scviewer.database.EventKind;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.IWaveformDb;
import com.minres.scviewer.database.IWaveformDbLoader;
import com.minres.scviewer.database.InputFormatException;
import com.minres.scviewer.database.RelationType;
import com.minres.scviewer.database.RelationTypeFactory;
import com.minres.scviewer.database.tx.ITx;
import com.minres.scviewer.database.tx.ITxAttribute;
import jacob.CborDecoder;
import jacob.CborType;
/**
* The Class TextDbLoader.
*/
public class FtrDbLoader implements IWaveformDbLoader {
enum FileType { NONE, PLAIN, GZIP, LZ4};
/** The max time. */
private Long maxTime = 0L;
ArrayList<String> strDict = new ArrayList<>();
/** The attr values. */
final List<String> attrValues = new ArrayList<>();
/** The relation types. */
final Map<String, RelationType> relationTypes = UnifiedMap.newMap();
/** The tx streams. */
final Map<Long, TxStream> txStreams = UnifiedMap.newMap();
/** The tx generators. */
final Map<Long, TxGenerator> txGenerators = UnifiedMap.newMap();
/** The transactions. */
final Map<Long, FtrTx> transactions = UnifiedMap.newMap();
/** The attribute types. */
final Map<String, TxAttributeType> attributeTypes = UnifiedMap.newMap();
/** The relations in. */
final HashMultimap<Long, FtrRelation> relationsIn = HashMultimap.create();
/** The relations out. */
final HashMultimap<Long, FtrRelation> relationsOut = HashMultimap.create();
/** The tx cache. */
final Map<Long, Tx> txCache = UnifiedMap.newMap();
/** The threads. */
List<Thread> threads = new ArrayList<>();
File file;
private static final Logger LOG = LoggerFactory.getLogger(FtrDbLoader.class);
/** The pcs. */
protected PropertyChangeSupport pcs = new PropertyChangeSupport(this);
long time_scale_factor = 1000l;
/**
* Adds the property change listener.
*
* @param l the l
*/
@Override
public void addPropertyChangeListener(PropertyChangeListener l) {
pcs.addPropertyChangeListener(l);
}
/**
* Removes the property change listener.
*
* @param l the l
*/
@Override
public void removePropertyChangeListener(PropertyChangeListener l) {
pcs.removePropertyChangeListener(l);
}
/**
* Gets the max time.
*
* @return the max time
*/
@Override
public long getMaxTime() {
return maxTime;
}
/**
* Gets the transaction.
*
* @param txId the tx id
* @return the transaction
*/
public ITx getTransaction(long txId) {
if (txCache.containsKey(txId))
return txCache.get(txId);
if(transactions.containsKey(txId)) {
Tx tx = new Tx(this, transactions.get(txId));
txCache.put(txId, tx);
return tx;
} else {
throw new IllegalArgumentException();
}
}
public FtrTx getScvTx(long id) {
if(transactions.containsKey(id))
return transactions.get(id);
else
throw new IllegalArgumentException();
}
/**
* Gets the all waves.
*
* @return the all waves
*/
@Override
public Collection<IWaveform> getAllWaves() {
ArrayList<IWaveform> ret = new ArrayList<>(txStreams.values());
ret.addAll(txGenerators.values());
return ret;
}
/**
* Gets the all relation types.
*
* @return the all relation types
*/
public Collection<RelationType> getAllRelationTypes() {
return relationTypes.values();
}
/**
* Load.
*
* @param db the db
* @param file the file
* @return true, if successful
* @throws InputFormatException the input format exception
*/
@Override
public void load(IWaveformDb db, File file) throws InputFormatException {
dispose();
this.file=file;
try(FileInputStream fis = new FileInputStream(file)) {
new CborDbParser(this, fis);
} catch (Exception e) {
LOG.error("Error parsing file "+file.getName(), e);
transactions.clear();
throw new InputFormatException(e.toString());
}
txStreams.values().parallelStream().forEach(TxStream::calculateConcurrency);
}
public List<? extends byte[]> getChunksAtOffsets(ArrayList<Long> fileOffsets) throws InputFormatException {
List<byte[]> ret = new ArrayList<>();
try(FileInputStream fis = new FileInputStream(file)) {
FileChannel fc = fis.getChannel();
for (Long offset : fileOffsets) {
if(offset>=0) {
fc.position(offset);
CborDecoder parser = new CborDecoder(fis);
ret.add(parser.readByteString());
} else {
fc.position(-offset);
CborDecoder parser = new CborDecoder(fis);
BlockLZ4CompressorInputStream decomp = new BlockLZ4CompressorInputStream(new ByteArrayInputStream(parser.readByteString()));
ret.add(decomp.readAllBytes());
decomp.close();
}
}
} catch (Exception e) {
LOG.error("Error parsing file "+file.getName(), e);
transactions.clear();
throw new InputFormatException(e.toString());
}
return ret;
}
public List<? extends ITxAttribute> parseAtrributes(byte[] chunk, long blockOffset) {
List<ITxAttribute> ret = new ArrayList<>();
ByteArrayInputStream bais = new ByteArrayInputStream(chunk);
bais.skip(blockOffset);
CborDecoder cborDecoder = new CborDecoder(bais);
try {
long tx_size = cborDecoder.readArrayLength();
for(long i = 0; i<tx_size; ++i) {
long tag = cborDecoder.readTag();
switch((int)tag) {
case 6: // id/generator/start/end
long len = cborDecoder.readArrayLength();
assert(len==4);
cborDecoder.readInt();
cborDecoder.readInt();
cborDecoder.readInt();
cborDecoder.readInt();
break;
default: { // skip over 7:begin attr, 8:record attr, 9:end attr
long sz = cborDecoder.readArrayLength();
assert(sz==3);
long name_id = cborDecoder.readInt();
long type_id = cborDecoder.readInt();
String attrName = strDict.get((int)name_id);
if(!attributeTypes.containsKey(attrName)) {
attributeTypes.put(attrName, new TxAttributeType(attrName, DataType.values()[(int)type_id], AssociationType.values()[(int)tag-7]));
}
TxAttributeType attrType = attributeTypes.get(attrName);
switch((int)type_id) {
case 0: // BOOLEAN
ITxAttribute b = new TxAttribute(attrType, cborDecoder.readInt()>0?"True":"False");
ret.add(b);
break;
case 2: // INTEGER
case 3: // UNSIGNED
ITxAttribute a = new TxAttribute(attrType, String.valueOf(cborDecoder.readInt()));
ret.add(a);
break;
case 4: // FLOATING_POINT_NUMBER
case 7: // FIXED_POINT_INTEGER
case 8: // UNSIGNED_FIXED_POINT_INTEGER
ITxAttribute v = new TxAttribute(attrType, String.valueOf(cborDecoder.readFloat()));
ret.add(v);
break;
case 1: // ENUMERATION
case 5: // BIT_VECTOR
case 6: // LOGIC_VECTOR
case 12: // STRING
ITxAttribute s = new TxAttribute(attrType, strDict.get((int)cborDecoder.readInt()));
ret.add(s);
break;
}
}
}
}
} catch (IOException e) {
LOG.error("Error parsing file "+file.getName(), e);
}
return ret;
}
/**
* Dispose.
*/
@Override
public void dispose() {
attrValues.clear();
relationTypes.clear();
txStreams.clear();
txGenerators.clear();
transactions.clear();
attributeTypes.clear();
relationsIn.clear();
relationsOut.clear();
}
/**
* The Class TextDbParser.
*/
static class CborDbParser extends CborDecoder {
static final private CborType break_type = CborType.valueOf(0xff);
/** The loader. */
final FtrDbLoader loader;
/**
* Instantiates a new text db parser.
*
* @param loader the loader
*/
public CborDbParser(FtrDbLoader loader, FileInputStream inputStream) {
super(inputStream);
this.loader = loader;
try {
long cbor_tag = readTag();
assert(cbor_tag == 55799);
long array_len = readArrayLength();
assert(array_len==-1);
CborType next = peekType();
while(next != null && !break_type.isEqualType(next)) {
long tag = readTag();
switch((int)tag) {
<<<<<<< HEAD
case 6: // info
=======
case 6: { // info
>>>>>>> refs/heads/release/2.17.1
CborDecoder cbd = new CborDecoder(new ByteArrayInputStream(readByteString()));
long sz = cbd.readArrayLength();
assert(sz==3);
long time_numerator=cbd.readInt();
long time_denominator=cbd.readInt();
loader.time_scale_factor = 1000000000000000l*time_numerator/time_denominator;
long epoch_tag = cbd.readTag();
assert(epoch_tag==1);
cbd.readInt(); // epoch
break;
}
case 8: { // dictionary uncompressed
parseDict(new CborDecoder(new ByteArrayInputStream(readByteString())));
break;
}
case 9: { // dictionary compressed
long sz = readArrayLength();
assert(sz==2);
readInt(); // uncompressed size
parseDict(new CborDecoder(new BlockLZ4CompressorInputStream(new ByteArrayInputStream(readByteString()))));
break;
}
case 10: { // directory uncompressed
parseDir(new CborDecoder(new ByteArrayInputStream(readByteString())));
break;
}
case 11: { // directory compressed
long sz = readArrayLength();
assert(sz==2);
readInt(); // uncompressed size
parseDir(new CborDecoder(new BlockLZ4CompressorInputStream(new ByteArrayInputStream(readByteString()))));
break;
}
case 12: { //tx chunk uncompressed
long len = readArrayLength();
assert(len==2);
long stream_id = readInt();
TxStream txStream = loader.txStreams.get(stream_id);
txStream.fileOffsets.add(inputStream.getChannel().position());
parseTx(txStream, txStream.fileOffsets.size()-1, readByteString());
break;
}
case 13: { //tx chunk compressed
long len = readArrayLength();
assert(len==3);
long stream_id = readInt();
readInt(); // uncompressed size
TxStream txStream = loader.txStreams.get(stream_id);
txStream.fileOffsets.add(0-inputStream.getChannel().position());
BlockLZ4CompressorInputStream decomp = new BlockLZ4CompressorInputStream(new ByteArrayInputStream(readByteString()));
parseTx(txStream, txStream.fileOffsets.size()-1, decomp.readAllBytes());
decomp.close();
break;
}
case 14: { // relations uncompressed
parseRel(new CborDecoder(new ByteArrayInputStream(readByteString())));
break;
}
case 15: { // relations uncompressed
long sz = readArrayLength();
assert(sz==2);
readInt(); // uncompressed size
parseRel(new CborDecoder(new BlockLZ4CompressorInputStream(new ByteArrayInputStream(readByteString()))));
break;
}
}
next = peekType();
}
} catch(IOException e) {
LOG.error("Error parsing file input stream", e);
}
}
private void parseDict(CborDecoder cborDecoder) throws IOException {
long size = cborDecoder.readMapLength();
ArrayList<String> lst = new ArrayList<>((int)size);
for(long i = 0; i<size; ++i) {
long idx = cborDecoder.readInt();
assert(idx==loader.strDict.size()+1);
lst.add(cborDecoder.readTextString());
}
loader.strDict.addAll(lst);
}
private void parseDir(CborDecoder cborDecoder) throws IOException {
long size = cborDecoder.readArrayLength();
if(size<0) {
CborType next = cborDecoder.peekType();
while(next != null && !break_type.isEqualType(next)) {
parseDictEntry(cborDecoder);
next = cborDecoder.peekType();
}
} else
for(long i = 0; i<size; ++i) {
parseDictEntry(cborDecoder);
}
}
private void parseDictEntry(CborDecoder cborDecoder) throws IOException {
long id = cborDecoder.readTag();
if(id==16) { // a stream
long len = cborDecoder.readArrayLength();
assert(len==3);
long stream_id = cborDecoder.readInt();
long name_id = cborDecoder.readInt();
long kind_id = cborDecoder.readInt();
add(stream_id, new TxStream(loader, stream_id, loader.strDict.get((int)name_id), loader.strDict.get((int)kind_id)));
} else if(id==17) { // a generator
long len = cborDecoder.readArrayLength();
assert(len==3);
long gen_id = cborDecoder.readInt();
long name_id = cborDecoder.readInt();
long stream_id = cborDecoder.readInt();
add(gen_id, new TxGenerator(loader, gen_id, loader.strDict.get((int)name_id), loader.txStreams.get(stream_id)));
} else {
throw new IOException("Illegal tage ncountered: "+id);
}
}
private void parseTx(TxStream txStream, long blockId, byte[] chunk) throws IOException {
CborDecoder cborDecoder = new CborDecoder(new ByteArrayInputStream(chunk));
long size = cborDecoder.readArrayLength();
assert(size==-1);
CborType next = cborDecoder.peekType();
while(next != null && !break_type.isEqualType(next)) {
long blockOffset = cborDecoder.getPos();
long tx_size = cborDecoder.readArrayLength();
for(long i = 0; i<tx_size; ++i) {
long tag = cborDecoder.readTag();
switch((int)tag) {
case 6: // id/generator/start/end
long len = cborDecoder.readArrayLength();
assert(len==4);
long txId = cborDecoder.readInt();
long genId = cborDecoder.readInt();
long startTime = cborDecoder.readInt()*loader.time_scale_factor;
long endTime = cborDecoder.readInt()*loader.time_scale_factor;
TxGenerator gen = loader.txGenerators.get(genId);
FtrTx scvTx = new FtrTx(txId, gen.stream.getId(), genId, startTime, endTime, blockId, blockOffset);
loader.maxTime = loader.maxTime > scvTx.endTime ? loader.maxTime : scvTx.endTime;
loader.transactions.put(txId, scvTx);
TxStream stream = loader.txStreams.get(gen.stream.getId());
if (scvTx.beginTime == scvTx.endTime) {
stream.addEvent(new TxEvent(loader, EventKind.SINGLE, txId, scvTx.beginTime));
gen.addEvent(new TxEvent(loader, EventKind.SINGLE, txId, scvTx.beginTime));
} else {
stream.addEvent(new TxEvent(loader, EventKind.BEGIN, txId, scvTx.beginTime));
gen.addEvent(new TxEvent(loader, EventKind.BEGIN, txId, scvTx.beginTime));
stream.addEvent(new TxEvent(loader, EventKind.END, txId, scvTx.endTime));
gen.addEvent(new TxEvent(loader, EventKind.END, txId, scvTx.endTime));
}
break;
default: { // skip over 7:begin attr, 8:record attr, 9:end attr
long sz = cborDecoder.readArrayLength();
assert(sz==3);
for(long j = 0; j<sz; ++j)
cborDecoder.readInt();
}
}
}
next = cborDecoder.peekType();
}
}
private void parseRel(CborDecoder cborDecoder) throws IOException {
long size = cborDecoder.readArrayLength();
assert(size==-1);
CborType next = cborDecoder.peekType();
while(next != null && !break_type.isEqualType(next)) {
long sz = cborDecoder.readArrayLength();
assert(sz==3);
long type_id = cborDecoder.readInt();
long from_id = cborDecoder.readInt();
long to_id = cborDecoder.readInt();
String rel_name = loader.strDict.get((int)type_id);
FtrRelation ftrRel = new FtrRelation(loader.relationTypes.getOrDefault(rel_name, RelationTypeFactory.create(rel_name)), from_id, to_id);
loader.relationsOut.put(from_id, ftrRel);
loader.relationsIn.put(to_id, ftrRel);
next = cborDecoder.peekType();
}
}
private void add(Long id, TxStream stream) {
loader.txStreams.put(id, stream);
loader.pcs.firePropertyChange(IWaveformDbLoader.STREAM_ADDED, null, stream);
}
private void add(Long id, TxGenerator generator) {
loader.txGenerators.put(id, generator);
loader.pcs.firePropertyChange(IWaveformDbLoader.GENERATOR_ADDED, null, generator);
}
}
}
@@ -1,62 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import com.minres.scviewer.database.IWaveformDbLoader;
import com.minres.scviewer.database.IWaveformDbLoaderFactory;
/**
* The Class TextDbLoader.
*/
public class FtrDbLoaderFactory implements IWaveformDbLoaderFactory {
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
/** The Constant x. */
static final byte[] x = hexStringToByteArray("d9d9f79f");
/**
* Can load.
*
* @param inputFile the input file
* @return true, if successful
*/
@Override
public boolean canLoad(File inputFile) {
try (InputStream is = new FileInputStream(inputFile)) {
byte[] buffer = new byte[x.length];
int readCnt = is.read(buffer, 0, x.length);
if (readCnt == x.length) {
for (int i = 0; i < x.length; i++)
if (buffer[i] != x[i]) return false;
}
return true;
} catch (IOException e) {}
return false;
}
@Override
public IWaveformDbLoader getLoader() {
return new FtrDbLoader();
}
}
@@ -1,47 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.io.Serializable;
import com.minres.scviewer.database.RelationType;
/**
* The Class ScvRelation.
*/
class FtrRelation implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = -347668857680574140L;
/** The source. */
final long source;
/** The target. */
final long target;
/** The relation type. */
final RelationType relationType;
/**
* Instantiates a new scv relation.
*
* @param relationType the relation type
* @param source the source
* @param target the target
*/
public FtrRelation(RelationType relationType, long source, long target) {
this.source = source;
this.target = target;
this.relationType = relationType;
}
}
@@ -1,89 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.minres.scviewer.database.InputFormatException;
import com.minres.scviewer.database.tx.ITxAttribute;
/**
* The Class ScvTx.
*/
class FtrTx implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = -855200240003328221L;
/** The id. */
final long id;
/** The generator id. */
final long generatorId;
/** The stream id. */
final long streamId;
/** The begin time. */
long beginTime;
/** The end time. */
long endTime;
/** The attributes. */
final List<ITxAttribute> attributes = new ArrayList<>();
final long blockId;
final long blockOffset;
/**
* Instantiates a new scv tx.
*
* @param id the id
* @param streamId the stream id
* @param generatorId the generator id
* @param begin the begin
*/
FtrTx(long id, long streamId, long generatorId, long begin, long end, long blockId, long blockOffset) {
this.id = id;
this.streamId = streamId;
this.generatorId = generatorId;
this.beginTime = begin;
this.endTime = end;
this.blockId=blockId;
this.blockOffset=blockOffset;
}
/**
* Gets the id.
*
* @return the id
*/
Long getId() {
return id;
}
public List<ITxAttribute> getAttributes(FtrDbLoader loader) {
if(attributes.size()==0)
try {
TxStream stream = loader.txStreams.get(streamId);
byte[] chunk = stream.getChunks().get((int)blockId);
attributes.addAll(loader.parseAtrributes(chunk, blockOffset));
} catch (InputFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return attributes;
}
}
@@ -1,232 +0,0 @@
/*******************************************************************************
* Copyright (c) 2012 IT Just working.
* Copyright (c) 2020 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.tx.ITx;
import com.minres.scviewer.database.tx.ITxAttribute;
import com.minres.scviewer.database.tx.ITxRelation;
/**
* The Class Tx.
*/
class Tx implements ITx {
/** The loader. */
private final FtrDbLoader loader;
private FtrTx scvTx =null;
/** The id. */
private final long id;
private final long generatorId;
private final long streamId;
/** The begin time. */
long beginTime = -1;
/** The end time. */
long endTime = -1;
/**
* Instantiates a new tx.
*
* @param loader the loader
* @param scvTx the scv tx
*/
public Tx(FtrDbLoader loader, FtrTx scvTx) {
this.loader = loader;
id = scvTx.id;
this.scvTx=scvTx;
generatorId=scvTx.generatorId;
streamId=scvTx.streamId;
beginTime=scvTx.beginTime;
endTime=scvTx.endTime;
}
/**
* Instantiates a new tx.
*
* @param loader the loader
* @param txId the tx id
*/
public Tx(FtrDbLoader loader, long id, long generatorId, long streamId) {
this.loader = loader;
this.id = id;
this.generatorId=generatorId;
this.streamId = streamId;
}
/**
* Gets the incoming relations.
*
* @return the incoming relations
*/
@Override
public Collection<ITxRelation> getIncomingRelations() {
Set<FtrRelation> rels = loader.relationsIn.get(id);
return rels.stream().map(rel -> new TxRelation(loader, rel)).collect(Collectors.toList());
}
/**
* Gets the outgoing relations.
*
* @return the outgoing relations
*/
@Override
public Collection<ITxRelation> getOutgoingRelations() {
Set<FtrRelation> rels = loader.relationsOut.get(id);
return rels.stream().map(rel -> new TxRelation(loader, rel)).collect(Collectors.toList());
}
/**
* Compare to.
*
* @param o the o
* @return the int
*/
@Override
public int compareTo(ITx o) {
int res = Long.compare(getBeginTime(), o.getBeginTime());
if (res != 0)
return res;
else
return Long.compare(getId(), o.getId());
}
/**
* Equals.
*
* @param obj the obj
* @return true, if successful
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
return this.getScvTx().equals(((Tx) obj).getScvTx());
}
/**
* Hash code.
*
* @return the int
*/
@Override
public int hashCode() {
return getScvTx().hashCode();
}
/**
* To string.
*
* @return the string
*/
@Override
public String toString() {
return "tx#" + getId() + "[" + getBeginTime() / 1000000 + "ns - " + getEndTime() / 1000000 + "ns]";
}
/**
* Gets the id.
*
* @return the id
*/
@Override
public long getId() {
return getScvTx().id;
}
/**
* Gets the stream.
*
* @return the stream
*/
@Override
public IWaveform getStream() {
return loader.txStreams.get(streamId);
}
/**
* Gets the generator.
*
* @return the generator
*/
@Override
public IWaveform getGenerator() {
return loader.txGenerators.get(generatorId);
}
/**
* Gets the begin time.
*
* @return the begin time
*/
@Override
public long getBeginTime() {
if (beginTime < 0) {
FtrTx tx = scvTx==null?loader.getScvTx(id):getScvTx();
beginTime = tx.beginTime;
endTime = tx.endTime;
}
return beginTime;
}
/**
* Gets the end time.
*
* @return the end time
*/
@Override
public long getEndTime() {
if (endTime < 0) {
FtrTx tx = scvTx==null?loader.getScvTx(id):getScvTx();
beginTime = tx.beginTime;
endTime = tx.endTime;
}
return endTime;
}
/**
* Sets the end time.
*
* @param time the new end time
*/
void setEndTime(Long time) {
getScvTx().endTime = time;
}
/**
* Gets the attributes.
*
* @return the attributes
*/
@Override
public List<ITxAttribute> getAttributes() {
return getScvTx().getAttributes(loader);
}
private FtrTx getScvTx() {
if(scvTx==null)
scvTx=loader.getScvTx(id);
return scvTx;
}
}
@@ -1,84 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.io.Serializable;
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.DataType;
import com.minres.scviewer.database.tx.ITxAttribute;
/**
* The Class TxAttribute.
*/
public class TxAttribute implements ITxAttribute, Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 4767726016651807152L;
/** The attribute type. */
private final TxAttributeType attributeType;
/** The value. */
private final String value;
/**
* Instantiates a new tx attribute.
*
* @param type the type
* @param value the value
*/
TxAttribute(TxAttributeType type, String value) {
this.attributeType = type;
this.value = value;
}
/**
* Gets the name.
*
* @return the name
*/
@Override
public String getName() {
return attributeType.getName();
}
/**
* Gets the type.
*
* @return the type
*/
@Override
public AssociationType getType() {
return attributeType.getType();
}
/**
* Gets the data type.
*
* @return the data type
*/
@Override
public DataType getDataType() {
return attributeType.getDataType();
}
/**
* Gets the value.
*
* @return the value
*/
@Override
public Object getValue() {
return value;
}
}
@@ -1,83 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.io.Serializable;
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.DataType;
import com.minres.scviewer.database.tx.ITxAttributeType;
/**
* The Class TxAttributeType.
*/
class TxAttributeType implements ITxAttributeType, Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 7159721937208946828L;
/** The name. */
private String name;
/** The data type. */
private DataType dataType;
/** The type. */
private AssociationType type;
/**
* Instantiates a new tx attribute type.
*
* @param name the name
* @param dataType the data type
* @param type the type
*/
TxAttributeType(String name, DataType dataType, AssociationType type) {
this.name = name;
this.dataType = dataType;
this.type = type;
}
/**
* Gets the name.
*
* @return the name
*/
@Override
public String getName() {
return name;
}
/**
* Gets the data type.
*
* @return the data type
*/
@Override
public DataType getDataType() {
return dataType;
}
/**
* Gets the type.
*
* @return the type
*/
@Override
public AssociationType getType() {
return type;
}
@Override
public String toString() {
return name + ":" + dataType.name() + "@" + type.name();
}
}
@@ -1,120 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import com.minres.scviewer.database.EventKind;
import com.minres.scviewer.database.WaveformType;
import com.minres.scviewer.database.tx.ITx;
import com.minres.scviewer.database.tx.ITxEvent;
/**
* The Class TxEvent.
*/
class TxEvent implements ITxEvent {
/** The loader. */
final FtrDbLoader loader;
/** The kind. */
final EventKind kind;
/** The transaction. */
final long transaction;
/** The time. */
final long time;
private int concurrencyIdx=-1;
/**
* Instantiates a new tx event.
*
* @param loader the loader
* @param kind the kind
* @param transaction the transaction
* @param time the time
*/
TxEvent(FtrDbLoader loader, EventKind kind, Long transaction, Long time) {
this.loader = loader;
this.kind = kind;
this.transaction = transaction;
this.time = time;
}
/**
* Duplicate.
*
* @return the i tx event
* @throws CloneNotSupportedException the clone not supported exception
*/
@Override
public ITxEvent duplicate() throws CloneNotSupportedException {
return new TxEvent(loader, kind, transaction, time);
}
/**
* To string.
*
* @return the string
*/
@Override
public String toString() {
return kind.toString() + "@" + time + " of tx #" + transaction;
}
/**
* Gets the type.
*
* @return the type
*/
@Override
public WaveformType getType() {
return WaveformType.TRANSACTION;
}
/**
* Gets the kind.
*
* @return the kind
*/
@Override
public EventKind getKind() {
return kind;
}
/**
* Gets the time.
*
* @return the time
*/
@Override
public long getTime() {
return time;
}
/**
* Gets the transaction.
*
* @return the transaction
*/
@Override
public ITx getTransaction() {
return loader.getTransaction(transaction);
}
@Override
public int getRowIndex() {
return concurrencyIdx;
}
public void setConcurrencyIndex(int idx) {
concurrencyIdx=idx;
}
}
@@ -1,95 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.util.ArrayList;
import java.util.List;
import com.minres.scviewer.database.IWaveform;
/**
* The Class TxGenerator.
*/
class TxGenerator extends AbstractTxStream {
/** The stream. */
TxStream stream;
/** The begin attrs. */
List<TxAttributeType> beginAttrs = new ArrayList<>();
/** The end attrs. */
List<TxAttributeType> endAttrs = new ArrayList<>();
/**
* Instantiates a new tx generator.
*
* @param loader the loader
* @param id the id
* @param name the name
* @param stream the stream
*/
TxGenerator(FtrDbLoader loader, Long id, String name, TxStream stream) {
super(loader, id, name);
this.stream = stream;
stream.addChild(this);
}
/**
* Checks if is same.
*
* @param other the other
* @return true, if is same
*/
@Override
public boolean isSame(IWaveform other) {
return (other instanceof TxGenerator && this.getId()==other.getId());
}
/**
* Gets the begin attrs.
*
* @return the begin attrs
*/
public List<TxAttributeType> getBeginAttrs() {
return beginAttrs;
}
/**
* Gets the end attrs.
*
* @return the end attrs
*/
public List<TxAttributeType> getEndAttrs() {
return endAttrs;
}
/**
* Gets the kind.
*
* @return the kind
*/
@Override
public String getKind() {
return stream.getKind();
}
/**
* Gets the full hierarchical name.
*
* @return the full name
*/
@Override
public String getFullName() {
return ((AbstractTxStream)parent).getFullName()+"."+name;
}
}
@@ -1,69 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import com.minres.scviewer.database.RelationType;
import com.minres.scviewer.database.tx.ITx;
import com.minres.scviewer.database.tx.ITxRelation;
/**
* The Class TxRelation.
*/
class TxRelation implements ITxRelation {
/** The loader. */
final FtrDbLoader loader;
/** The scv relation. */
final FtrRelation scvRelation;
/**
* Instantiates a new tx relation.
*
* @param loader the loader
* @param scvRelation the scv relation
*/
public TxRelation(FtrDbLoader loader, FtrRelation scvRelation) {
this.loader = loader;
this.scvRelation = scvRelation;
}
/**
* Gets the relation type.
*
* @return the relation type
*/
@Override
public RelationType getRelationType() {
return scvRelation.relationType;
}
/**
* Gets the source.
*
* @return the source
*/
@Override
public ITx getSource() {
return loader.getTransaction(scvRelation.source);
}
/**
* Gets the target.
*
* @return the target
*/
@Override
public ITx getTarget() {
return loader.getTransaction(scvRelation.target);
}
}
@@ -1,72 +0,0 @@
/*******************************************************************************
* Copyright (c) 2023 MINRES Technologies GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database.ftr;
import java.util.ArrayList;
import java.util.List;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.InputFormatException;
/**
* The Class TxStream.
*/
class TxStream extends AbstractTxStream {
/** The kind. */
final String kind;
final ArrayList<Long> fileOffsets = new ArrayList<>();
final ArrayList<byte[]> chunks = new ArrayList<>();
/**
* Instantiates a new tx stream.
*
* @param loader the loader
* @param id the id
* @param name the name
* @param kind the kind
*/
TxStream(FtrDbLoader loader, Long id, String name, String kind) {
super(loader, id, name);
this.kind = kind;
}
/**
* Checks if is same.
*
* @param other the other
* @return true, if is same
*/
@Override
public boolean isSame(IWaveform other) {
return (other instanceof TxStream && this.getId() == other.getId());
}
/**
* Gets the kind.
*
* @return the kind
*/
@Override
public String getKind() {
return kind;
}
public List<byte[]> getChunks() throws InputFormatException {
if(chunks.size()==0) {
chunks.addAll(loader.getChunksAtOffsets(fileOffsets));
}
return chunks;
}
}
@@ -1,89 +0,0 @@
/*
* JACOB - CBOR implementation in Java.
*
* (C) Copyright - 2013 - J.W. Janssen <j.w.janssen@lxtreme.nl>
*
* Licensed under Apache License v2.0.
*/
package jacob;
/**
* Constant values used by the CBOR format.
*/
public interface CborConstants {
/** Major type 0: unsigned integers. */
int TYPE_UNSIGNED_INTEGER = 0x00;
/** Major type 1: negative integers. */
int TYPE_NEGATIVE_INTEGER = 0x01;
/** Major type 2: byte string. */
int TYPE_BYTE_STRING = 0x02;
/** Major type 3: text/UTF8 string. */
int TYPE_TEXT_STRING = 0x03;
/** Major type 4: array of items. */
int TYPE_ARRAY = 0x04;
/** Major type 5: map of pairs. */
int TYPE_MAP = 0x05;
/** Major type 6: semantic tags. */
int TYPE_TAG = 0x06;
/** Major type 7: floating point, simple data types. */
int TYPE_FLOAT_SIMPLE = 0x07;
/** Denotes a one-byte value (uint8). */
int ONE_BYTE = 0x18;
/** Denotes a two-byte value (uint16). */
int TWO_BYTES = 0x19;
/** Denotes a four-byte value (uint32). */
int FOUR_BYTES = 0x1a;
/** Denotes a eight-byte value (uint64). */
int EIGHT_BYTES = 0x1b;
/** The CBOR-encoded boolean <code>false</code> value (encoded as "simple value": {@link #MT_SIMPLE}). */
int FALSE = 0x14;
/** The CBOR-encoded boolean <code>true</code> value (encoded as "simple value": {@link #MT_SIMPLE}). */
int TRUE = 0x15;
/** The CBOR-encoded <code>null</code> value (encoded as "simple value": {@link #MT_SIMPLE}). */
int NULL = 0x16;
/** The CBOR-encoded "undefined" value (encoded as "simple value": {@link #MT_SIMPLE}). */
int UNDEFINED = 0x17;
/** Denotes a half-precision float (two-byte IEEE 754, see {@link #MT_FLOAT}). */
int HALF_PRECISION_FLOAT = 0x19;
/** Denotes a single-precision float (four-byte IEEE 754, see {@link #MT_FLOAT}). */
int SINGLE_PRECISION_FLOAT = 0x1a;
/** Denotes a double-precision float (eight-byte IEEE 754, see {@link #MT_FLOAT}). */
int DOUBLE_PRECISION_FLOAT = 0x1b;
/** The CBOR-encoded "break" stop code for unlimited arrays/maps. */
int BREAK = 0x1f;
/** Semantic tag value describing date/time values in the standard format (UTF8 string, RFC3339). */
int TAG_STANDARD_DATE_TIME = 0;
/** Semantic tag value describing date/time values as Epoch timestamp (numeric, RFC3339). */
int TAG_EPOCH_DATE_TIME = 1;
/** Semantic tag value describing a positive big integer value (byte string). */
int TAG_POSITIVE_BIGINT = 2;
/** Semantic tag value describing a negative big integer value (byte string). */
int TAG_NEGATIVE_BIGINT = 3;
/** Semantic tag value describing a decimal fraction value (two-element array, base 10). */
int TAG_DECIMAL_FRACTION = 4;
/** Semantic tag value describing a big decimal value (two-element array, base 2). */
int TAG_BIGDECIMAL = 5;
/** Semantic tag value describing an expected conversion to base64url encoding. */
int TAG_EXPECTED_BASE64_URL_ENCODED = 21;
/** Semantic tag value describing an expected conversion to base64 encoding. */
int TAG_EXPECTED_BASE64_ENCODED = 22;
/** Semantic tag value describing an expected conversion to base16 encoding. */
int TAG_EXPECTED_BASE16_ENCODED = 23;
/** Semantic tag value describing an encoded CBOR data item (byte string). */
int TAG_CBOR_ENCODED = 24;
/** Semantic tag value describing an URL (UTF8 string). */
int TAG_URI = 32;
/** Semantic tag value describing a base64url encoded string (UTF8 string). */
int TAG_BASE64_URL_ENCODED = 33;
/** Semantic tag value describing a base64 encoded string (UTF8 string). */
int TAG_BASE64_ENCODED = 34;
/** Semantic tag value describing a regular expression string (UTF8 string, PCRE). */
int TAG_REGEXP = 35;
/** Semantic tag value describing a MIME message (UTF8 string, RFC2045). */
int TAG_MIME_MESSAGE = 36;
/** Semantic tag value describing CBOR content. */
int TAG_CBOR_MARKER = 55799;
}
@@ -1,515 +0,0 @@
/*
* JACOB - CBOR implementation in Java.
*
* (C) Copyright - 2013 - J.W. Janssen <j.w.janssen@lxtreme.nl>
*/
package jacob;
import static jacob.CborConstants.*;
import static jacob.CborType.*;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PushbackInputStream;
/**
* Provides a decoder capable of handling CBOR encoded data from a {@link InputStream}.
*/
public class CborDecoder {
protected final PushbackInputStream m_is;
protected final int total_avail;
static int getAvailableBytes(PushbackInputStream is) {
try {
return is.available();
} catch (IOException e) {
return -1;
}
}
/**
* Creates a new {@link CborDecoder} instance.
*
* @param is the actual input stream to read the CBOR-encoded data from, cannot be <code>null</code>.
*/
public CborDecoder(InputStream is) {
if (is == null) {
throw new IllegalArgumentException("InputStream cannot be null!");
}
m_is = (is instanceof PushbackInputStream) ? (PushbackInputStream) is : new PushbackInputStream(is);
total_avail = getAvailableBytes(m_is);
}
private static void fail(String msg, Object... args) throws IOException {
throw new IOException(String.format(msg, args));
}
private static String lengthToString(int len) {
return (len < 0) ? "no payload" : (len == ONE_BYTE) ? "one byte" : (len == TWO_BYTES) ? "two bytes"
: (len == FOUR_BYTES) ? "four bytes" : (len == EIGHT_BYTES) ? "eight bytes" : "(unknown)";
}
public long getPos() {
try {
return total_avail-m_is.available();
} catch (IOException e) {
return -1;
}
}
/**
* Peeks in the input stream for the upcoming type.
*
* @return the upcoming type in the stream, or <code>null</code> in case of an end-of-stream.
* @throws IOException in case of I/O problems reading the CBOR-type from the underlying input stream.
*/
public CborType peekType() throws IOException {
int p = m_is.read();
if (p < 0) {
// EOF, nothing to peek at...
return null;
}
m_is.unread(p);
return valueOf(p);
}
/**
* Prolog to reading an array value in CBOR format.
*
* @return the number of elements in the array to read, or <tt>-1</tt> in case of infinite-length arrays.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public long readArrayLength() throws IOException {
return readMajorTypeWithSize(TYPE_ARRAY);
}
/**
* Reads a boolean value in CBOR format.
*
* @return the read boolean.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public boolean readBoolean() throws IOException {
int b = readMajorType(TYPE_FLOAT_SIMPLE);
if (b != FALSE && b != TRUE) {
fail("Unexpected boolean value: %d!", b);
}
return b == TRUE;
}
/**
* Reads a "break"/stop value in CBOR format.
*
* @return always <code>null</code>.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public Object readBreak() throws IOException {
readMajorTypeExact(TYPE_FLOAT_SIMPLE, BREAK);
return null;
}
/**
* Reads a byte string value in CBOR format.
*
* @return the read byte string, never <code>null</code>. In case the encoded string has a length of <tt>0</tt>, an empty string is returned.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public byte[] readByteString() throws IOException {
long len = readMajorTypeWithSize(TYPE_BYTE_STRING);
if (len < 0) {
fail("Infinite-length byte strings not supported!");
}
if (len > Integer.MAX_VALUE) {
fail("String length too long!");
}
return readFully(new byte[(int) len]);
}
/**
* Prolog to reading a byte string value in CBOR format.
*
* @return the number of bytes in the string to read, or <tt>-1</tt> in case of infinite-length strings.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public long readByteStringLength() throws IOException {
return readMajorTypeWithSize(TYPE_BYTE_STRING);
}
/**
* Reads a double-precision float value in CBOR format.
*
* @return the read double value, values from {@link Float#MIN_VALUE} to {@link Float#MAX_VALUE} are supported.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public double readDouble() throws IOException {
readMajorTypeExact(TYPE_FLOAT_SIMPLE, DOUBLE_PRECISION_FLOAT);
return Double.longBitsToDouble(readUInt64());
}
/**
* Reads a single-precision float value in CBOR format.
*
* @return the read float value, values from {@link Float#MIN_VALUE} to {@link Float#MAX_VALUE} are supported.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public float readFloat() throws IOException {
readMajorTypeExact(TYPE_FLOAT_SIMPLE, SINGLE_PRECISION_FLOAT);
return Float.intBitsToFloat((int) readUInt32());
}
/**
* Reads a half-precision float value in CBOR format.
*
* @return the read half-precision float value, values from {@link Float#MIN_VALUE} to {@link Float#MAX_VALUE} are supported.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public double readHalfPrecisionFloat() throws IOException {
readMajorTypeExact(TYPE_FLOAT_SIMPLE, HALF_PRECISION_FLOAT);
int half = readUInt16();
int exp = (half >> 10) & 0x1f;
int mant = half & 0x3ff;
double val;
if (exp == 0) {
val = mant * Math.pow(2, -24);
} else if (exp != 31) {
val = (mant + 1024) * Math.pow(2, exp - 25);
} else if (mant != 0) {
val = Double.NaN;
} else {
val = Double.POSITIVE_INFINITY;
}
return ((half & 0x8000) == 0) ? val : -val;
}
/**
* Reads a signed or unsigned integer value in CBOR format.
*
* @return the read integer value, values from {@link Long#MIN_VALUE} to {@link Long#MAX_VALUE} are supported.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public long readInt() throws IOException {
int ib = m_is.read();
// in case of negative integers, extends the sign to all bits; otherwise zero...
long ui = expectIntegerType(ib);
// in case of negative integers does a ones complement
return ui ^ readUInt(ib & 0x1f, false /* breakAllowed */);
}
/**
* Reads a signed or unsigned 16-bit integer value in CBOR format.
*
* @read the small integer value, values from <tt>[-65536..65535]</tt> are supported.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying output stream.
*/
public int readInt16() throws IOException {
int ib = m_is.read();
// in case of negative integers, extends the sign to all bits; otherwise zero...
long ui = expectIntegerType(ib);
// in case of negative integers does a ones complement
return (int) (ui ^ readUIntExact(TWO_BYTES, ib & 0x1f));
}
/**
* Reads a signed or unsigned 32-bit integer value in CBOR format.
*
* @read the small integer value, values in the range <tt>[-4294967296..4294967295]</tt> are supported.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying output stream.
*/
public long readInt32() throws IOException {
int ib = m_is.read();
// in case of negative integers, extends the sign to all bits; otherwise zero...
long ui = expectIntegerType(ib);
// in case of negative integers does a ones complement
return ui ^ readUIntExact(FOUR_BYTES, ib & 0x1f);
}
/**
* Reads a signed or unsigned 64-bit integer value in CBOR format.
*
* @read the small integer value, values from {@link Long#MIN_VALUE} to {@link Long#MAX_VALUE} are supported.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying output stream.
*/
public long readInt64() throws IOException {
int ib = m_is.read();
// in case of negative integers, extends the sign to all bits; otherwise zero...
long ui = expectIntegerType(ib);
// in case of negative integers does a ones complement
return ui ^ readUIntExact(EIGHT_BYTES, ib & 0x1f);
}
/**
* Reads a signed or unsigned 8-bit integer value in CBOR format.
*
* @read the small integer value, values in the range <tt>[-256..255]</tt> are supported.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying output stream.
*/
public int readInt8() throws IOException {
int ib = m_is.read();
// in case of negative integers, extends the sign to all bits; otherwise zero...
long ui = expectIntegerType(ib);
// in case of negative integers does a ones complement
return (int) (ui ^ readUIntExact(ONE_BYTE, ib & 0x1f));
}
/**
* Prolog to reading a map of key-value pairs in CBOR format.
*
* @return the number of entries in the map, >= 0.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public long readMapLength() throws IOException {
return readMajorTypeWithSize(TYPE_MAP);
}
/**
* Reads a <code>null</code>-value in CBOR format.
*
* @return always <code>null</code>.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public Object readNull() throws IOException {
readMajorTypeExact(TYPE_FLOAT_SIMPLE, NULL);
return null;
}
/**
* Reads a single byte value in CBOR format.
*
* @return the read byte value.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public byte readSimpleValue() throws IOException {
readMajorTypeExact(TYPE_FLOAT_SIMPLE, ONE_BYTE);
return (byte) readUInt8();
}
/**
* Reads a signed or unsigned small (&lt;= 23) integer value in CBOR format.
*
* @read the small integer value, values in the range <tt>[-24..23]</tt> are supported.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying output stream.
*/
public int readSmallInt() throws IOException {
int ib = m_is.read();
// in case of negative integers, extends the sign to all bits; otherwise zero...
long ui = expectIntegerType(ib);
// in case of negative integers does a ones complement
return (int) (ui ^ readUIntExact(-1, ib & 0x1f));
}
/**
* Reads a semantic tag value in CBOR format.
*
* @return the read tag value.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public long readTag() throws IOException {
return readUInt(readMajorType(TYPE_TAG), false /* breakAllowed */);
}
/**
* Reads an UTF-8 encoded string value in CBOR format.
*
* @return the read UTF-8 encoded string, never <code>null</code>. In case the encoded string has a length of <tt>0</tt>, an empty string is returned.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public String readTextString() throws IOException {
long len = readMajorTypeWithSize(TYPE_TEXT_STRING);
if (len < 0) {
fail("Infinite-length text strings not supported!");
}
if (len > Integer.MAX_VALUE) {
fail("String length too long!");
}
return new String(readFully(new byte[(int) len]), "UTF-8");
}
/**
* Prolog to reading an UTF-8 encoded string value in CBOR format.
*
* @return the length of the string to read, or <tt>-1</tt> in case of infinite-length strings.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public long readTextStringLength() throws IOException {
return readMajorTypeWithSize(TYPE_TEXT_STRING);
}
/**
* Reads an undefined value in CBOR format.
*
* @return always <code>null</code>.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
public Object readUndefined() throws IOException {
readMajorTypeExact(TYPE_FLOAT_SIMPLE, UNDEFINED);
return null;
}
/**
* Reads the next major type from the underlying input stream, and verifies whether it matches the given expectation.
*
* @param majorType the expected major type, cannot be <code>null</code> (unchecked).
* @return either <tt>-1</tt> if the major type was an signed integer, or <tt>0</tt> otherwise.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
protected long expectIntegerType(int ib) throws IOException {
int majorType = ((ib & 0xFF) >>> 5);
if ((majorType != TYPE_UNSIGNED_INTEGER) && (majorType != TYPE_NEGATIVE_INTEGER)) {
fail("Unexpected type: %s, expected type %s or %s!", getName(majorType), getName(TYPE_UNSIGNED_INTEGER),
getName(TYPE_NEGATIVE_INTEGER));
}
return -majorType;
}
/**
* Reads the next major type from the underlying input stream, and verifies whether it matches the given expectation.
*
* @param majorType the expected major type, cannot be <code>null</code> (unchecked).
* @return the read subtype, or payload, of the read major type.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
protected int readMajorType(int majorType) throws IOException {
int ib = m_is.read();
if (majorType != ((ib >>> 5) & 0x07)) {
fail("Unexpected type: %s, expected: %s!", getName(ib), getName(majorType));
}
return ib & 0x1F;
}
/**
* Reads the next major type from the underlying input stream, and verifies whether it matches the given expectations.
*
* @param majorType the expected major type, cannot be <code>null</code> (unchecked);
* @param subtype the expected subtype.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
protected void readMajorTypeExact(int majorType, int subtype) throws IOException {
int st = readMajorType(majorType);
if ((st ^ subtype) != 0) {
fail("Unexpected subtype: %d, expected: %d!", st, subtype);
}
}
/**
* Reads the next major type from the underlying input stream, verifies whether it matches the given expectation, and decodes the payload into a size.
*
* @param majorType the expected major type, cannot be <code>null</code> (unchecked).
* @return the number of succeeding bytes, &gt;= 0, or <tt>-1</tt> if an infinite-length type is read.
* @throws IOException in case of I/O problems reading the CBOR-encoded value from the underlying input stream.
*/
protected long readMajorTypeWithSize(int majorType) throws IOException {
return readUInt(readMajorType(majorType), true /* breakAllowed */);
}
/**
* Reads an unsigned integer with a given length-indicator.
*
* @param length the length indicator to use;
* @return the read unsigned integer, as long value.
* @throws IOException in case of I/O problems reading the unsigned integer from the underlying input stream.
*/
protected long readUInt(int length, boolean breakAllowed) throws IOException {
long result = -1;
if (length < ONE_BYTE) {
result = length;
} else if (length == ONE_BYTE) {
result = readUInt8();
} else if (length == TWO_BYTES) {
result = readUInt16();
} else if (length == FOUR_BYTES) {
result = readUInt32();
} else if (length == EIGHT_BYTES) {
result = readUInt64();
} else if (breakAllowed && length == BREAK) {
return -1;
}
if (result < 0) {
fail("Not well-formed CBOR integer found, invalid length: %d!", result);
}
return result;
}
/**
* Reads an unsigned 16-bit integer value
*
* @return value the read value, values from {@link Long#MIN_VALUE} to {@link Long#MAX_VALUE} are supported.
* @throws IOException in case of I/O problems writing the CBOR-encoded value to the underlying output stream.
*/
protected int readUInt16() throws IOException {
byte[] buf = readFully(new byte[2]);
return (buf[0] & 0xFF) << 8 | (buf[1] & 0xFF);
}
/**
* Reads an unsigned 32-bit integer value
*
* @return value the read value, values from {@link Long#MIN_VALUE} to {@link Long#MAX_VALUE} are supported.
* @throws IOException in case of I/O problems writing the CBOR-encoded value to the underlying output stream.
*/
protected long readUInt32() throws IOException {
byte[] buf = readFully(new byte[4]);
return ((buf[0] & 0xFF) << 24 | (buf[1] & 0xFF) << 16 | (buf[2] & 0xFF) << 8 | (buf[3] & 0xFF)) & 0xffffffffL;
}
/**
* Reads an unsigned 64-bit integer value
*
* @return value the read value, values from {@link Long#MIN_VALUE} to {@link Long#MAX_VALUE} are supported.
* @throws IOException in case of I/O problems writing the CBOR-encoded value to the underlying output stream.
*/
protected long readUInt64() throws IOException {
byte[] buf = readFully(new byte[8]);
return (buf[0] & 0xFFL) << 56 | (buf[1] & 0xFFL) << 48 | (buf[2] & 0xFFL) << 40 | (buf[3] & 0xFFL) << 32 | //
(buf[4] & 0xFFL) << 24 | (buf[5] & 0xFFL) << 16 | (buf[6] & 0xFFL) << 8 | (buf[7] & 0xFFL);
}
/**
* Reads an unsigned 8-bit integer value
*
* @return value the read value, values from {@link Long#MIN_VALUE} to {@link Long#MAX_VALUE} are supported.
* @throws IOException in case of I/O problems writing the CBOR-encoded value to the underlying output stream.
*/
protected int readUInt8() throws IOException {
return m_is.read() & 0xff;
}
/**
* Reads an unsigned integer with a given length-indicator.
*
* @param length the length indicator to use;
* @return the read unsigned integer, as long value.
* @throws IOException in case of I/O problems reading the unsigned integer from the underlying input stream.
*/
protected long readUIntExact(int expectedLength, int length) throws IOException {
if (((expectedLength == -1) && (length >= ONE_BYTE)) || ((expectedLength >= 0) && (length != expectedLength))) {
fail("Unexpected payload/length! Expected %s, but got %s.", lengthToString(expectedLength),
lengthToString(length));
}
return readUInt(length, false /* breakAllowed */);
}
private byte[] readFully(byte[] buf) throws IOException {
int len = buf.length;
int n = 0, off = 0;
while (n < len) {
int count = m_is.read(buf, off + n, len - n);
if (count < 0) {
throw new EOFException();
}
n += count;
}
return buf;
}
}

Some files were not shown because too many files have changed in this diff Show More