blob: b478557471abbc67cc6ac43a5630e79f3c305ece [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Ericsson
*
* 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
*******************************************************************************/
package org.eclipse.tracecompass.internal.ctf.core.event.types.composite;
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.ctf.core.event.scope.ILexicalScope;
import org.eclipse.tracecompass.ctf.core.event.types.Declaration;
import org.eclipse.tracecompass.ctf.core.event.types.Definition;
import org.eclipse.tracecompass.ctf.core.event.types.ICompositeDefinition;
import org.eclipse.tracecompass.ctf.core.event.types.IEventHeaderDeclaration;
import org.eclipse.tracecompass.ctf.core.event.types.IntegerDeclaration;
import org.eclipse.tracecompass.ctf.core.event.types.IntegerDefinition;
import com.google.common.collect.ImmutableList;
/**
* An event header definition, as shown in the example of the CTF spec examples
* section 6.1.1
*
* @author Matthew Khouzam
*/
public final class EventHeaderDefinition extends Definition implements ICompositeDefinition {
private static final @NonNull List<@NonNull String> FIELD_NAMES = ImmutableList.of(
IEventHeaderDeclaration.ID,
IEventHeaderDeclaration.TIMESTAMP
);
private final int fId;
private final long fTimestamp;
private final int fTimestampLength;
/**
* Event header defintion
*
* @param id
* the event id
* @param timestamp
* the timestamp
* @param eventHeaderDecl
* The declaration of this defintion
* @param timestampLength
* the number of bits valid in the timestamp
*/
public EventHeaderDefinition(@NonNull Declaration eventHeaderDecl, int id, long timestamp, int timestampLength) {
super(eventHeaderDecl, null, ILexicalScope.EVENT_HEADER.getPath(), ILexicalScope.EVENT_HEADER);
fId = id;
fTimestamp = timestamp;
fTimestampLength = timestampLength;
}
/**
* Gets the timestamp declaration
*
* @return the timestamp declaration
*/
public int getTimestampLength() {
return fTimestampLength;
}
/**
* Get the event id
*
* @return the event id
*/
public int getId() {
return fId;
}
/**
* Get the timestamp
*
* @return the timestamp
*/
public long getTimestamp() {
return fTimestamp;
}
@Override
public Definition getDefinition(String fieldName) {
if (fieldName.equals(IEventHeaderDeclaration.ID)) {
return new IntegerDefinition(IntegerDeclaration.INT_32B_DECL, null, IEventHeaderDeclaration.ID, getId());
} else if (fieldName.equals(IEventHeaderDeclaration.TIMESTAMP)) {
return new IntegerDefinition(IntegerDeclaration.INT_64B_DECL, null, IEventHeaderDeclaration.TIMESTAMP, getTimestamp());
}
return null;
}
@Override
public @NonNull List<@NonNull String> getFieldNames() {
return FIELD_NAMES;
}
}