/******************************************************************************* * Copyright (c) 2009, 2014 Wind River Systems, Inc. and others. * 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: * Markus Schorn - initial API and implementation * Thomas Corbat * Sergey Prigogin (Google) * Nathan Ridge *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IValue; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPExecution; import org.eclipse.core.runtime.CoreException; /** * Buffer for marshalling and unmarshalling types. */ public interface ITypeMarshalBuffer { final static byte BASIC_TYPE = 0x01, POINTER_TYPE = 0x02, ARRAY_TYPE = 0x03, CVQUALIFIER_TYPE = 0x04, FUNCTION_TYPE = 0x05, REFERENCE_TYPE = 0x06, POINTER_TO_MEMBER_TYPE = 0x07, PACK_EXPANSION_TYPE = 0x08, PROBLEM_TYPE = 0x09, VALUE = 0x0A, DEPENDENT_EXPRESSION_TYPE = 0x0B, UNKNOWN_MEMBER = 0x0C, UNKNOWN_MEMBER_CLASS_INSTANCE = 0x0D, DEFERRED_CLASS_INSTANCE = 0x0E, TYPE_TRANSFORMATION = 0x0F, UNKNOWN_MEMBER_TYPE = 0x10, INITIALIZER_LIST_TYPE = 0x11, DEFERRED_FUNCTION = 0x12; // Can add more types up to 0x1C, after that it will collide with TypeMarshalBuffer.UNSTORABLE_TYPE. final static byte INTEGRAL_VALUE = 0x01, FLOATING_POINT_VALUE = 0x02, C_STRING_VALUE = 0x03, COMPOSITE_VALUE = 0x04, DEPENDENT_VALUE = 0x05; // Can add more values up to 0x1C, after that it will collide with TypeMarshalBuffer.UNSTORABLE_TYPE. final static byte EVAL_BINARY = 0x01, EVAL_BINARY_TYPE_ID = 0x02, EVAL_BINDING = 0x03, EVAL_COMMA = 0x04, EVAL_COMPOUND = 0x05, EVAL_CONDITIONAL = 0x06, EVAL_FIXED = 0x07, EVAL_FUNCTION_CALL = 0x08, EVAL_FUNCTION_SET = 0x09, EVAL_ID = 0x0A, EVAL_INIT_LIST = 0x0B, EVAL_MEMBER_ACCESS = 0x0C, EVAL_PARAMETER_PACK = 0x0D, EVAL_TYPE_ID = 0x0E, EVAL_UNARY = 0x0F, EVAL_UNARY_TYPE_ID = 0x10, EVAL_CONSTRUCTOR = 0x11, EVAL_REFERENCE = 0x12, EVAL_POINTER = 0x13, EVAL_COMPOSITE_ACCESS = 0x14; // Can add more evaluations up to 0x1C, after that it will collide with TypeMarshalBuffer.UNSTORABLE_TYPE. final static byte EXEC_COMPOUND_STATEMENT = 0x01, EXEC_BREAK = 0x02, EXEC_CASE = 0x03, EXEC_CONTINUE = 0x04, EXEC_DECLARATION_STATEMENT = 0x05, EXEC_DECLARATOR = 0x06, EXEC_DEFAULT = 0x07, EXEC_SIMPLE_DECLARATION = 0x08, EXEC_RETURN = 0x09, EXEC_EXPRESSION_STATEMENT = 0x0A, EXEC_IF = 0x0B, EXEC_WHILE = 0x0C, EXEC_DO = 0x0D, EXEC_FOR = 0x0E, EXEC_RANGE_BASED_FOR = 0x0F, EXEC_SWITCH = 0x10, EXEC_CONSTRUCTOR_CHAIN = 0x11; // Can add more executions up to 0x1C, after that it will collide with TypeMarshalBuffer.UNSTORABLE_TYPE. static final short KIND_MASK = 0x001F; final static short FLAG1 = 0x0020; final static short FLAG2 = 0x0040; final static short FLAG3 = 0x0080; final static short FLAG4 = 0x0100; final static short FLAG5 = 0x0200; final static short FLAG6 = 0x0400; final static short FLAG7 = 0x0800; final static short FLAG8 = 0x1000; final static short FLAG9 = 0x2000; final static short FIRST_FLAG = FLAG1; final static short SECOND_LAST_FLAG = FLAG8; final static short LAST_FLAG = FLAG9; CoreException unmarshallingError(); IType unmarshalType() throws CoreException; IValue unmarshalValue() throws CoreException; IBinding unmarshalBinding() throws CoreException; ICPPEvaluation unmarshalEvaluation() throws CoreException; ICPPExecution unmarshalExecution() throws CoreException; ICPPTemplateArgument unmarshalTemplateArgument() throws CoreException; int getByte() throws CoreException; int getFixedInt() throws CoreException; /** * Reads a 16-bit integer stored in the variable length base-128 encoding. */ public short getShort() throws CoreException; /** * Reads a 32-bit integer stored in the variable length base-128 encoding. */ public int getInt() throws CoreException; /** * Reads a 64-bit integer stored in the variable length base-128 encoding. */ public long getLong() throws CoreException; char[] getCharArray() throws CoreException; void marshalType(IType type) throws CoreException; void marshalValue(IValue value) throws CoreException; void marshalBinding(IBinding binding) throws CoreException; void marshalEvaluation(ICPPEvaluation eval, boolean includeValue) throws CoreException; void marshalExecution(ICPPExecution exec, boolean includeValue) throws CoreException; void marshalTemplateArgument(ICPPTemplateArgument arg) throws CoreException; void putByte(byte data); void putFixedInt(int data); /** * Writes a 16-bit integer in the variable length base-128 encoding. * @param value the value to write */ public void putShort(short value); /** * Writes a 32-bit integer in the variable length base-128 encoding. Each byte, except the last * byte, has the most significant bit set – this indicates that there are further bytes to come. * The lower 7 bits of each byte are used to store the two-complement representation of * the number in groups of 7 bits, least significant group first. * * <p>Here is number of bytes depending on the encoded value: * <pre> * Value Number of bytes * [0,127] 1 * [128,16383] 2 * [16384,2097151] 3 * [2097152,268435455] 4 * [268435456,Integer.MAX_VALUE] 5 * negative 5 * </pre> * * @param value the value to write */ public void putInt(int value); /** * Writes a 64-bit integer in the variable length base-128 encoding. Each byte, except the last * byte, has the most significant bit set – this indicates that there are further bytes to come. * The lower 7 bits of each byte are used to store the two-complement representation of * the number in groups of 7 bits, least significant group first. * * <p>Here is number of bytes depending on the encoded value: * <pre> * Value Number of bytes * [0,127] 1 * [128,16383] 2 * [16384,2097151] 3 * [2097152,268435455] 4 * [268435456,2^35-1] 5 * [2^35,2^42-1] 6 * [2^42,2^49-1] 7 * [2^49,2^56-1] 8 * [2^56,2^63-1] 9 * negative 10 * </pre> * * @param value the value to write */ public void putLong(long value); void putCharArray(char[] data); }