ctf.core: add size() to the types.
This will allow trace writing
Change-Id: Ie179ef94bc4ef39395e5422c9df166c8df31fe1c
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/119837
Tested-by: CI Bot
Reviewed-by: Simon Delisle <simon.delisle@ericsson.com>
diff --git a/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/types/VariantDeclarationTest.java b/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/types/VariantDeclarationTest.java
index 5de6e62..732c7d5 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/types/VariantDeclarationTest.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/types/VariantDeclarationTest.java
@@ -84,6 +84,7 @@
VariantDefinition variantDefinition = new VariantDefinition(
variantDeclaration,
CtfTestTraceUtils.getTrace(testTrace),
+ tagDef,
"tag",
"tag",
new StringDefinition(
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/META-INF/MANIFEST.MF b/ctf/org.eclipse.tracecompass.ctf.core/META-INF/MANIFEST.MF
index f3566fd..7aa5f0f 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/META-INF/MANIFEST.MF
+++ b/ctf/org.eclipse.tracecompass.ctf.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
-Bundle-Version: 2.3.0.qualifier
+Bundle-Version: 2.4.0.qualifier
Bundle-Localization: plugin
Bundle-SymbolicName: org.eclipse.tracecompass.ctf.core;singleton:=true
Bundle-Activator: org.eclipse.tracecompass.internal.ctf.core.Activator
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/AbstractArrayDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/AbstractArrayDefinition.java
index d445096..8b53d61 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/AbstractArrayDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/AbstractArrayDefinition.java
@@ -15,6 +15,7 @@
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.common.core.math.SaturatedArithmetic;
import org.eclipse.tracecompass.ctf.core.event.scope.IDefinitionScope;
/**
@@ -34,8 +35,7 @@
* @param definitionScope
* the definition is in a scope, (normally a struct) what is it?
* @param fieldName
- * the name of the definition. (it is a field in the parent
- * scope)
+ * the name of the definition. (it is a field in the parent scope)
*/
public AbstractArrayDefinition(IDeclaration declaration, @Nullable IDefinitionScope definitionScope, String fieldName) {
super(declaration, definitionScope, fieldName);
@@ -56,4 +56,17 @@
*/
public abstract int getLength();
+ @Override
+ public long size() {
+ List<@Nullable Definition> definitions = getDefinitions();
+ if (definitions.isEmpty()) {
+ return 0;
+ }
+ Definition definition = definitions.get(0);
+ if (definition == null) {
+ return 0;
+ }
+ return SaturatedArithmetic.multiply(getLength(), definition.size());
+ }
+
}
\ No newline at end of file
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/Definition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/Definition.java
index 425ca18..df0b113 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/Definition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/Definition.java
@@ -124,6 +124,11 @@
return fDefinitionScope;
}
+ @Override
+ public long size() {
+ return getDeclaration().getMaximumSize();
+ }
+
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/EnumDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/EnumDefinition.java
index f6733e9..7bbcdbe 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/EnumDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/EnumDefinition.java
@@ -31,7 +31,7 @@
// Attributes
// ------------------------------------------------------------------------
- private final long fIntegerValue;
+ private final IntegerDefinition fInteger;
private final String fValue;
@@ -55,8 +55,8 @@
IDefinitionScope definitionScope, @NonNull String fieldName, IntegerDefinition intValue) {
super(declaration, definitionScope, fieldName);
- fIntegerValue = intValue.getValue();
- fValue = declaration.query(fIntegerValue);
+ fInteger = intValue;
+ fValue = declaration.query(fInteger.getValue());
}
// ------------------------------------------------------------------------
@@ -86,7 +86,7 @@
*/
@Override
public Long getIntegerValue() {
- return fIntegerValue;
+ return fInteger.getValue();
}
@Override
@@ -94,6 +94,11 @@
return (EnumDeclaration) super.getDeclaration();
}
+ @Override
+ public long size() {
+ return fInteger.size();
+ }
+
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
@@ -101,7 +106,7 @@
@Override
public String toString() {
return "{ value = " + getValue() + //$NON-NLS-1$
- ", container = " + fIntegerValue + //$NON-NLS-1$
+ ", container = " + fInteger.getValue()+ //$NON-NLS-1$
" }"; //$NON-NLS-1$
}
}
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/FloatDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/FloatDefinition.java
index b8482f1..751a0f6 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/FloatDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/FloatDefinition.java
@@ -72,6 +72,10 @@
return (FloatDeclaration) super.getDeclaration();
}
+ @Override
+ public long size() {
+ return getDeclaration().getMaximumSize();
+ }
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IDefinition.java
index 29b793c..7d47e43 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IDefinition.java
@@ -39,4 +39,14 @@
*/
IDeclaration getDeclaration();
+ /**
+ * Get the size in bits
+ *
+ * @return the size in bits. Long#MAX_VALUE means unset.
+ * @since 2.4
+ */
+ default long size() {
+ return Long.MAX_VALUE;
+ }
+
}
\ No newline at end of file
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IntegerDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IntegerDefinition.java
index 72c2e3e..7e19f90 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IntegerDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IntegerDefinition.java
@@ -89,6 +89,11 @@
}
@Override
+ public long size() {
+ return getDeclaration().getMaximumSize();
+ }
+
+ @Override
public String getStringValue() {
return this.toString();
}
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StringDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StringDefinition.java
index ef5d188..3377c65 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StringDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StringDefinition.java
@@ -73,6 +73,11 @@
return fString;
}
+ @Override
+ public long size() {
+ return fString.length();
+ }
+
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StructDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StructDefinition.java
index 48e85e6..eaada94 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StructDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StructDefinition.java
@@ -18,6 +18,7 @@
import java.util.Map;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.common.core.math.SaturatedArithmetic;
import org.eclipse.tracecompass.ctf.core.event.scope.IDefinitionScope;
import org.eclipse.tracecompass.ctf.core.event.scope.ILexicalScope;
import org.eclipse.tracecompass.ctf.core.event.types.StructDeclaration.InternalDef;
@@ -140,6 +141,15 @@
return (StructDeclaration) super.getDeclaration();
}
+ @Override
+ public long size() {
+ long size = 0;
+ for (IDefinition def : fDefinitions) {
+ size = SaturatedArithmetic.add(size, def.size());
+ }
+ return size;
+ }
+
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDeclaration.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDeclaration.java
index 06f7544..a61e13e 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDeclaration.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDeclaration.java
@@ -134,7 +134,7 @@
definitionScope.getScopePath().getPath());
}
Definition fieldValue = fDeclarationToPopulate.createDefinition(definitionScope, fieldName, input);
- return new VariantDefinition(this, definitionScope, varFieldName, fieldName, fieldValue);
+ return new VariantDefinition(this, definitionScope, tagDef, varFieldName, fieldName, fieldValue);
}
/**
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDefinition.java
index 22a1fd2..5af77ba 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDefinition.java
@@ -35,6 +35,7 @@
private final Definition fDefinition;
private final String fCurrentField;
private final String fFieldName;
+ private final EnumDefinition fTagDef;
// ------------------------------------------------------------------------
// Constructors
@@ -47,21 +48,44 @@
* the parent declaration
* @param definitionScope
* the parent scope
+ * @param tagDef
+ * the tagging definition
+ * @param selectedField
+ * the selected field
+ * @param fieldName
+ * the field name
+ * @param fieldValue
+ * the field value
+ * @since 2.4
+ */
+ public VariantDefinition(@NonNull VariantDeclaration declaration, IDefinitionScope definitionScope, EnumDefinition tagDef, String selectedField, @NonNull String fieldName, Definition fieldValue) {
+ super(declaration, definitionScope, fieldName);
+
+ fTagDef = tagDef;
+ fFieldName = fieldName;
+ fCurrentField = selectedField;
+ fDefinition = fieldValue;
+ }
+
+ /**
+ * Constructor
+ *
+ * @param declaration
+ * the parent declaration
+ * @param definitionScope
+ * the parent scope
* @param selectedField
* the selected field
* @param fieldName
* the field name
* @param fieldValue
* the field value
+ * @deprecated use {@link VariantDefinition#VariantDefinition(VariantDeclaration, IDefinitionScope, EnumDefinition, String, String, Definition)} instead or trace splitting will break
*/
+ @Deprecated
public VariantDefinition(@NonNull VariantDeclaration declaration,
IDefinitionScope definitionScope, String selectedField, @NonNull String fieldName, Definition fieldValue) {
- super(declaration, definitionScope, fieldName);
-
- fFieldName = fieldName;
- fCurrentField = selectedField;
- fDefinition = fieldValue;
-
+ this(declaration, definitionScope, new EnumDefinition(new EnumDeclaration(IntegerDeclaration.INT_8_DECL), null, fieldName, new IntegerDefinition(IntegerDeclaration.INT_8_DECL, null, fieldName, -1)), selectedField, fieldName, fieldValue);
}
// ------------------------------------------------------------------------
@@ -91,6 +115,11 @@
return fDefinition;
}
+ @Override
+ public long size() {
+ return fDefinition.size() + fTagDef.size();
+ }
+
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------