Puma Reference Manual Puma: Puma::CTemplateInstance Class Reference



Puma::CTemplateInstance Class Reference

Semantic information about a template instance. More...

#include <Puma/CTemplateInstance.h>

List of all members.

Public Member Functions

 CTemplateInstance ()
 Constructor.
 ~CTemplateInstance ()
 Destructor.
bool instantiate (CStructure *scope)
 If this is a pseudo instance, instantiate the template.
CTemplateInfoTemplate () const
 Get the semantic information about the instantiated template.
CObjectInfoObject () const
 Get the semantic information about the class or function.
void Template (CTemplateInfo *info)
 Set the semantic information about the instantiated template.
void Object (CObjectInfo *info)
 Set the semantic information about the instance.
CTreePointOfInstantiation () const
 Get the point of instantiation (e.g.
CScopeInfoPointOfInstantiationScope () const
 Get the scope in which the template was instantiated.
void PointOfInstantiation (CTree *poi, CScopeInfo *scope)
 Set the point of instantiation (e.g.
void TranslationUnit (CTranslationUnit *tu)
 Set the translation unit containing the code of the template instance.
CTranslationUnitTranslationUnit () const
 Get the translation unit containing the code of the template instance.
void BaseTranslationUnit (CTranslationUnit *tu)
 Set the translation unit containing the code of the base template instantiation arguments (if instantiated specialization).
CTranslationUnitBaseTranslationUnit () const
 Get the translation unit containing the code of the base template instantiation arguments (if instantiated specialization).
void canInstantiate (bool can)
 Set that the pseudo instance can be instantiated.
bool canInstantiate ()
 Return true if the pseudo instance can be instantiated.
void isPseudoInstance (bool v)
 Set whether this is a pseudo template instance.
bool isPseudoInstance () const
 Check if this is a pseudo template instance.
void isInstantiated (bool is)
 Set whether this template instance really is instantiated.
bool isInstantiated () const
 Check if this template instance really is instantiated.
unsigned InstantiationArgs () const
 Get the number of instantiation arguments.
DeducedArgumentInstantiationArg (unsigned n) const
 Get the n-th instantiation argument.
void addInstantiationArg (DeducedArgument *arg)
 Add an instantiation argument.
unsigned DeducedArgs () const
 Get the number of deduced arguments.
DeducedArgumentDeducedArg (unsigned n) const
 Get the n-th deduced template argument.
void addDeducedArg (DeducedArgument *arg)
 Add a deduced template argument.
void clearDeducedArgs ()
 Discard the deduced template arguments.

Protected Attributes

CTemplateInfo_TemplateInfo
 The semantic information about the template.
CObjectInfo_ObjectInfo
 The semantic information about the instance.
CTree_PointOfInstantiation
 The point of instantiation.
CScopeInfo_PointOfInstantiationScope
 The scope in which the template was instantiated.
Array< DeducedArgument * > _DeducedArgs
 The list of deduced template arguments.
Array< DeducedArgument * > _InstantiationArgs
 The list of instantiation arguments.
CTranslationUnit_InstanceSrc
 The translation unit containing the template instance code.
CTranslationUnit_BaseInstanceSrc
 The translation unit containing the base instantiation argument code (if instantiated specialization).
bool _Pseudo
 True if this is not a real template instance.
bool _CanInstantiate
 True if this pseudo instance can be instantiated.
bool _IsInstantiated
 True if instantiated.
bool _IsSpecialization
 True if this is the instance of a template specialization.

Detailed Description

Semantic information about a template instance.

Contains the point of instantiation, the instantiated template, the instantiation arguments, and the deduced template arguments.

The point of instantiation (POI) is the corresponding template-id.

 X<int> x;  // X<int> is the POI 

The instantiation arguments are the arguments of the template-id at the POI.

 Y<int,1> y;  // 'int' and '1' are the instantiation arguments 

The deduced template arguments are calculated from the instantiation arguments and the template default arguments.

  template<class T1, class T2 = float>
  struct Foo { 
    template<class T3, class T4>
    T1 foo(T2,T3,T4*);
  };

  void bar(bool b, char* s) {
    Foo<int> f;     // deduced arguments: T1=int,  T2=float
    f.foo(1,b,s);   // deduced arguments: T3=bool, T4=char
  }

If a template instance is not yet created (maybe because real template instantiation is disabled or due to late template instantiation), then this template instance is called a pseudo instance.


Constructor & Destructor Documentation

Puma::CTemplateInstance::CTemplateInstance ( ) [inline]

Constructor.

Puma::CTemplateInstance::~CTemplateInstance ( )

Destructor.

Destroys the instantiation and deduced arguments. Optionally destroys the translation unit of the instance code.


Member Function Documentation

void Puma::CTemplateInstance::addDeducedArg ( DeducedArgument arg) [inline]

Add a deduced template argument.

Parameters:
argThe deduced template argument.
void Puma::CTemplateInstance::addInstantiationArg ( DeducedArgument arg) [inline]

Add an instantiation argument.

Parameters:
argThe instantiation argument.
void Puma::CTemplateInstance::BaseTranslationUnit ( CTranslationUnit tu) [inline]

Set the translation unit containing the code of the base template instantiation arguments (if instantiated specialization).

Parameters:
tuThe translation unit.
CTranslationUnit * Puma::CTemplateInstance::BaseTranslationUnit ( ) const [inline]

Get the translation unit containing the code of the base template instantiation arguments (if instantiated specialization).

void Puma::CTemplateInstance::canInstantiate ( bool  can) [inline]

Set that the pseudo instance can be instantiated.

bool Puma::CTemplateInstance::canInstantiate ( ) [inline]

Return true if the pseudo instance can be instantiated.

void Puma::CTemplateInstance::clearDeducedArgs ( ) [inline]

Discard the deduced template arguments.

DeducedArgument * Puma::CTemplateInstance::DeducedArg ( unsigned  n) const [inline]

Get the n-th deduced template argument.

Parameters:
nThe index of the template argument.
unsigned Puma::CTemplateInstance::DeducedArgs ( ) const [inline]

Get the number of deduced arguments.

bool Puma::CTemplateInstance::instantiate ( CStructure scope)

If this is a pseudo instance, instantiate the template.

Parameters:
scopeThe scope in which to instantiate the template.
Returns:
true if instantiation succeeded.
DeducedArgument * Puma::CTemplateInstance::InstantiationArg ( unsigned  n) const [inline]

Get the n-th instantiation argument.

Parameters:
nThe index of the instantiation argument.
unsigned Puma::CTemplateInstance::InstantiationArgs ( ) const [inline]

Get the number of instantiation arguments.

void Puma::CTemplateInstance::isInstantiated ( bool  is) [inline]

Set whether this template instance really is instantiated.

Parameters:
isTrue for yes, false for no.
bool Puma::CTemplateInstance::isInstantiated ( ) const [inline]

Check if this template instance really is instantiated.

bool Puma::CTemplateInstance::isPseudoInstance ( ) const [inline]

Check if this is a pseudo template instance.

void Puma::CTemplateInstance::isPseudoInstance ( bool  v) [inline]

Set whether this is a pseudo template instance.

Parameters:
vTrue for yes, false for no.
CObjectInfo * Puma::CTemplateInstance::Object ( ) const [inline]

Get the semantic information about the class or function.

void Puma::CTemplateInstance::Object ( CObjectInfo info) [inline]

Set the semantic information about the instance.

Parameters:
infoThe instance object.
CTree * Puma::CTemplateInstance::PointOfInstantiation ( ) const [inline]

Get the point of instantiation (e.g.

the template-id).

void Puma::CTemplateInstance::PointOfInstantiation ( CTree poi,
CScopeInfo scope 
) [inline]

Set the point of instantiation (e.g.

the template-id).

Parameters:
tplidThe template-id used to instantiate the template.
scopeThe scope in which the template was instantiated.
CScopeInfo * Puma::CTemplateInstance::PointOfInstantiationScope ( ) const [inline]

Get the scope in which the template was instantiated.

void Puma::CTemplateInstance::Template ( CTemplateInfo info) [inline]

Set the semantic information about the instantiated template.

Parameters:
infoThe template that was instantiated.
CTemplateInfo * Puma::CTemplateInstance::Template ( ) const [inline]

Get the semantic information about the instantiated template.

CTranslationUnit * Puma::CTemplateInstance::TranslationUnit ( ) const [inline]

Get the translation unit containing the code of the template instance.

void Puma::CTemplateInstance::TranslationUnit ( CTranslationUnit tu) [inline]

Set the translation unit containing the code of the template instance.

Parameters:
tuThe translation unit.

Member Data Documentation

The translation unit containing the base instantiation argument code (if instantiated specialization).

True if this pseudo instance can be instantiated.

The list of deduced template arguments.

The translation unit containing the template instance code.

The list of instantiation arguments.

True if instantiated.

True if this is the instance of a template specialization.

The semantic information about the instance.

The point of instantiation.

The scope in which the template was instantiated.

True if this is not a real template instance.

The semantic information about the template.