blob: 28ffa26de26dc4c6cf3f5b18585fabc789935bb9 [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;
import java.util.List;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.ctf.core.event.scope.IDefinitionScope;
import org.eclipse.tracecompass.ctf.core.event.types.AbstractArrayDefinition;
import org.eclipse.tracecompass.ctf.core.event.types.CompoundDeclaration;
import org.eclipse.tracecompass.ctf.core.event.types.Definition;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
/**
* A CTF array definition
*
* Arrays are fixed-length. Their length is declared in the type declaration
* within the meta-data. They contain an array of "inner type" elements, which
* can refer to any type not containing the type of the array being declared (no
* circular dependency). The length is the number of elements in an array.
*
* @author Matthew Khouzam
*/
@NonNullByDefault
public final class ArrayDefinition extends AbstractArrayDefinition {
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
private final List<Definition> fDefinitions;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor
*
* @param declaration
* the parent declaration
* @param definitionScope
* the parent scope
* @param fieldName
* the field name
* @param definitions
* the content of the array
*/
public ArrayDefinition(CompoundDeclaration declaration,
@Nullable IDefinitionScope definitionScope,
String fieldName,
List<Definition> definitions) {
super(declaration, definitionScope, fieldName);
fDefinitions = ImmutableList.copyOf(definitions);
}
// ------------------------------------------------------------------------
// Getters/Setters/Predicates
// ------------------------------------------------------------------------
@Override
public List<Definition> getDefinitions() {
return fDefinitions;
}
@Override
public int getLength() {
return fDefinitions.size();
}
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
@Override
public String toString() {
StringBuilder b = new StringBuilder();
b.append('[');
Joiner joiner = Joiner.on(", ").skipNulls(); //$NON-NLS-1$
b.append(joiner.join(fDefinitions));
b.append(']');
return b.toString();
}
}