blob: 1a2019ef8e884f9ffb87ea51e096d8397aa0f734 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2012 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
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.core.runtime.CoreException;
/**
* Models a value of a variable, enumerator or expression.
*
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
* @since 5.1
*/
public interface IValue {
/**
* Returns the value as a Long number, or {@code null} if it is not possible.
* @deprecated Use numberValue() instead.
*/
@Deprecated
default Long numericalValue() {
Number num = numberValue();
return num instanceof Long ? (Long) num : null;
}
/**
* Returns the value as a number, or {@code null} if it is not possible.
* @since 6.2
*/
Number numberValue();
/**
* If this value consists of sub-values, returns the number of these sub-values. Otherwise returns 1.
* @noreference This method is not intended to be referenced by clients.
*/
int numberOfSubValues();
/**
* If this value consists of sub-values, returns the sub-value at the given index.
* Otherwise, returns this value (represented as an ICPPEvaluation) if the index 0 is passed.
* EvalFixed.INCOMPLETE is returned if the given index is out of bounds.
* @noreference This method is not intended to be referenced by clients.
*/
ICPPEvaluation getSubValue(int index);
/**
* If this value consists of sub-values, returns an array containing all of them.
* Otherwise, returns an array containing 1 element representing this value.
* Not all implementations implement this; some may return {@code null}.
* @noreference This method is not intended to be referenced by clients.
*/
ICPPEvaluation[] getAllSubValues();
/**
* Returns the evaluation object if this value cannot be represented as a single numerical value, or
* {@code null} otherwise. This can happen if the value is dependent, or it's a composite value.
* If {@link #numberValue()} returns {@code null}, {@link #getEvaluation()} returns
* not {@code null} and vice versa.
* @noreference This method is not intended to be referenced by clients.
*/
ICPPEvaluation getEvaluation();
/**
* Returns a signature uniquely identifying the value. Two values with identical
* signatures are guaranteed to be equal.
*/
char[] getSignature();
/**
* @deprecated Returns an empty character array.
* @noreference This method is not intended to be referenced by clients.
*/
@Deprecated
public default char[] getInternalExpression() {
return CharArrayUtils.EMPTY_CHAR_ARRAY;
}
/**
* @deprecated Returns an empty array.
* @noreference This method is not intended to be referenced by clients.
*/
@Deprecated
public default IBinding[] getUnknownBindings() {
return IBinding.EMPTY_BINDING_ARRAY;
}
/**
* If this value consists of sub-values, set the sub-value at the given position to the given new value.
* Otherwise, set this value to the given new value.
* Not all implementations implement this; for some, a call to this may have no effect.
* @noreference This method is not intended to be referenced by clients.
*/
void setSubValue(int position, ICPPEvaluation newValue);
/**
* Make a deep copy of this value.
* @since 6.2
*/
IValue clone();
/**
* Serialize this value to the given type marshal buffer.
* @noreference This method is not intended to be referenced by clients.
*/
void marshal(ITypeMarshalBuffer buffer) throws CoreException;
/**
* Returns true if this value is equivalent to 'other' for declaration matching purposes.
* @noreference This method is not intended to be referenced by clients.
*/
boolean isEquivalentTo(IValue other);
}