/*******************************************************************************
* Copyright (c) 2004, 2011 IBM Corporation 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:
* John Camelon (IBM) - Initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast.cpp;
import org.eclipse.cdt.core.dom.ast.ASTNodeProperty;
import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNameOwner;
/**
* This is a template template parameter as <code> V </code> in
* <code>template<template<typename T> class V> class CT;</code>
*
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface ICPPASTTemplatedTypeTemplateParameter extends ICPPASTTemplateParameter, IASTNameOwner {
/**
* Relation between template template parameter and its (nested) template parameters.
*/
public static final ASTNodeProperty PARAMETER = new ASTNodeProperty(
"ICPPASTTemplateTypeTemplateParameter.PARAMETER [ICPPASTTemplateParameter]"); //$NON-NLS-1$
/**
* Relation between template template parameter and its name.
*/
public static final ASTNodeProperty PARAMETER_NAME = new ASTNodeProperty(
"ICPPASTTemplateTypeTemplateParameter.PARAMETER_NAME [ICPPASTName]"); //$NON-NLS-1$
/**
* Relation between template template parameter and its default value.
*/
public static final ASTNodeProperty DEFAULT_VALUE = new ASTNodeProperty(
"ICPPASTTemplateTypeTemplateParameter.DEFAULT_VALUE [IASTExpression]"); //$NON-NLS-1$
/**
* Get the nested template parameters.
*/
public ICPPASTTemplateParameter[] getTemplateParameters();
/**
* Get the (optional) name of this template template parameter. In case there is no name an
* empty name is returned.
*/
public IASTName getName();
/**
* Get default value for template template parameter or <code>null</code>.
*/
public IASTExpression getDefaultValue();
/**
* @since 5.1
*/
public ICPPASTTemplatedTypeTemplateParameter copy();
/**
* @since 5.3
*/
public ICPPASTTemplatedTypeTemplateParameter copy(CopyStyle style);
/**
* Add a nested template parameter.
* @since 5.3
*/
public void addTemplateParameter(ICPPASTTemplateParameter parm);
/**
* Set whether this template template parameter is a parameter pack.
* @since 5.2
*/
public void setIsParameterPack(boolean val);
/**
* Set the name of this template template parameter.
*/
public void setName(IASTName name);
/**
* Set default value for the template template parameter.
*/
public void setDefaultValue(IASTExpression expression);
/**
* Returns the scope that contains the template parameters of this template-template parameter.
* @since 5.4
*/
public ICPPScope asScope();
/**
* @deprecated Use {@link #addTemplateParameter(ICPPASTTemplateParameter)};
*/
@Deprecated
public void addTemplateParamter(ICPPASTTemplateParameter parm);
}