blob: d3ba66197fa00d1cde3cb49f2ca6aeacdd7b1b85 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2014 Ericsson, Ecole Polytechnique de Montreal and others
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors: Matthew Khouzam - Initial API and implementation
* Contributors: Simon Marchi - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.ctf.core.event.types;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.ctf.core.event.scope.IDefinitionScope;
import org.eclipse.tracecompass.ctf.core.event.scope.ILexicalScope;
/**
* A CTF definition
*
* A definition is like an object of a declaration class. It fills the
* declaration with values. <br>
* An example: <br>
* int i = 0; <br>
* <b>int</b> is the declaration.<br>
* <b>i</b> is the definition.<br>
* <b>0</b> is the value assigned to the definition, not the declaration.<br>
*
* @version 1.0
* @author Matthew Khouzam
* @author Simon Marchi
*/
public abstract class Definition implements IDefinition {
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
private final String fFieldName;
/** The complete path of this field */
private final @NonNull ILexicalScope fPath;
private final IDefinitionScope fDefinitionScope;
@NonNull
private final IDeclaration fDeclaration;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor
*
* @param declaration
* the event declaration
* @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)
*/
public Definition(@NonNull IDeclaration declaration, IDefinitionScope definitionScope, @NonNull String fieldName) {
this(declaration, definitionScope, fieldName, declaration.getPath(definitionScope, fieldName));
}
/**
* Constructor This one takes the scope and thus speeds up definition
* creation
*
*
* @param declaration
* the event declaration
*
* @param definitionScope
* the definition is in a scope, (normally a struct) what is it?
*
* @param fieldName
* the name of the defintions. it is a field in the parent scope.
*
* @param scope
* the scope
* @since 1.0
*/
public Definition(@NonNull IDeclaration declaration, IDefinitionScope definitionScope, @NonNull String fieldName, @NonNull ILexicalScope scope) {
fDeclaration = declaration;
fDefinitionScope = definitionScope;
fFieldName = fieldName;
fPath = scope;
}
// ------------------------------------------------------------------------
// Getters
// ------------------------------------------------------------------------
/**
* Get the field name in its container.
*
* @return The field name
*/
protected String getFieldName() {
return fFieldName;
}
/**
* @since 1.0
*/
@Override
public ILexicalScope getScopePath() {
return fPath;
}
/**
* Get the definition scope in which this definition is found.
*
* The complete path of a definition is thus the path of the definition
* scope DOT the name of the definition (name of the field in its container)
*
* @return The definition scope
*/
protected IDefinitionScope getDefinitionScope() {
return fDefinitionScope;
}
@Override
public long size() {
return getDeclaration().getMaximumSize();
}
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
@Override
public IDeclaration getDeclaration() {
return fDeclaration;
}
@Override
public String toString() {
return fPath.getPath() + '[' + Integer.toHexString(hashCode()) + ']';
}
}