Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TClingTypeInfo.h
Go to the documentation of this file.
1// @(#)root/core/meta:$Id$
2// Author: Paul Russo 30/07/2012
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TClingTypeInfo
13#define ROOT_TClingTypeInfo
14
15//////////////////////////////////////////////////////////////////////////
16// //
17// TClingTypeInfo //
18// //
19// Emulation of the CINT TypeInfo class. //
20// //
21// The CINT C++ interpreter provides an interface to metadata about //
22// a type through the TypeInfo class. This class provides the same //
23// functionality, using an interface as close as possible to TypeInfo //
24// but the type metadata comes from the Clang C++ compiler, not CINT. //
25// //
26//////////////////////////////////////////////////////////////////////////
27
28#include "TClingDeclInfo.h"
29#include <string>
30
31#include "clang/AST/Type.h"
32
33namespace cling {
34class Interpreter;
35}
36
37namespace ROOT {
38 namespace TMetaUtils {
39 class TNormalizedCtxt;
40 }
41}
42
43class TClingTypeInfo final : public TClingDeclInfo {
44
45private:
46 cling::Interpreter *fInterp; //Cling interpreter, we do *not* own.
47 clang::QualType fQualType; //Clang qualified type we are querying.
48
49public:
50
51 explicit TClingTypeInfo(cling::Interpreter *interp)
52 : TClingDeclInfo(nullptr), fInterp(interp) {}
53
54 TClingTypeInfo(cling::Interpreter *interp, clang::QualType ty)
55 : TClingDeclInfo(nullptr), fInterp(interp), fQualType(ty) {}
56
57 TClingTypeInfo(cling::Interpreter *interp, const char *name);
58
59 cling::Interpreter *GetInterpreter() const { return fInterp; }
60
61 clang::QualType GetQualType() const { return fQualType; }
62
63 void *QualTypePtr() const;
64
65 void Init(const char *name); // Set type by name.
66 void Init(clang::QualType ty) { fQualType = ty; }
67 bool IsValid() const override { return !fQualType.isNull(); }
68 const char *Name() const override; // Get name of type.
69 long Property() const; // Get properties of type.
70 int RefType() const; // Get CINT reftype of type.
71 int Size() const; // Get size in bytes of type.
72 const char *TrueName(const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt) const; // Get name of type with no typedefs.
73 std::string NormalizedName(const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt) const; // Get name of type with no typedefs.
74
75};
76
77#endif // ROOT_TClingTypeInfo
The file contains a base class of TCling*Info classes.
char name[80]
Definition TGX11.cxx:110
Emulation of the CINT TypeInfo class.
long Property() const
clang::QualType fQualType
std::string NormalizedName(const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt) const
Return the normalized name of the type (i.e.
const char * Name() const override
void Init(clang::QualType ty)
TClingTypeInfo(cling::Interpreter *interp)
cling::Interpreter * GetInterpreter() const
TClingTypeInfo(cling::Interpreter *interp, clang::QualType ty)
int RefType() const
void * QualTypePtr() const
Return the QualType as a void pointer.
cling::Interpreter * fInterp
bool IsValid() const override
clang::QualType GetQualType() const
void Init(const char *name)
const char * TrueName(const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt) const
Return the normalized name of the type (i.e.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...