/******************************************************************************* * Copyright (c) 2014 Ericsson * * 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: * Matthew Khouzam - Initial API and implementation *******************************************************************************/ package org.eclipse.tracecompass.ctf.core.event.types; /** * Parent of sequences and arrays * * @author Matthew Khouzam */ public abstract class CompoundDeclaration extends Declaration { private static final int BIT_MASK = 0x03; private static final int BITS_PER_BYTE = 8; /** * Get the element type * * @return the type of element in the array */ public abstract IDeclaration getElementType(); @Override public long getAlignment() { return getElementType().getAlignment(); } /** * Sometimes, strings are encoded as an array of 1-byte integers (each one * being an UTF-8 byte). * * @return true if this array is in fact an UTF-8 string. false if it's a * "normal" array of generic Definition's. */ public boolean isString() { IDeclaration elementType = getElementType(); if (elementType instanceof IntegerDeclaration) { IntegerDeclaration elemInt = (IntegerDeclaration) elementType; return elemInt.isCharacter(); } return false; } /** * If an array contains 8 bit aligned 8 bit ints, it can be bulk read. * * @return true if this array 1 byte aligned. false if it's a "normal" array * of generic Definition's. * @since 1.0 */ public boolean isAlignedBytes() { IDeclaration elementType = getElementType(); if (elementType instanceof IntegerDeclaration) { IntegerDeclaration elemInt = (IntegerDeclaration) elementType; return (elemInt.getLength() == BITS_PER_BYTE) && ((getAlignment() & BIT_MASK) == 0); } return false; } }