Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
TFunctionTemplate.cxx
Go to the documentation of this file.
1// @(#)root/meta:$Id$
2// Author: Philippe Canal November 2013.
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/** \class TFunctionTemplate
13Dictionary for function template
14This class describes one single function template.
15*/
16
17#include "TFunctionTemplate.h"
18#include "TInterpreter.h"
19#include "TClass.h"
20
21
22////////////////////////////////////////////////////////////////////////////////
23/// Default TFunctionTemplate ctor.
24
26 fInfo(info), fClass(cl)
27{
28 if (fInfo) {
29 gCling->FuncTempInfo_Name(fInfo,fName);
30 gCling->FuncTempInfo_Title(fInfo,fTitle);
31 }
32}
33
34////////////////////////////////////////////////////////////////////////////////
35/// Copy operator.
36
38{
39 if (orig.fInfo) {
40 fInfo = gCling->FuncTempInfo_FactoryCopy(orig.fInfo);
41 } else
42 fInfo = nullptr;
43 fClass = orig.fClass;
44}
45
46////////////////////////////////////////////////////////////////////////////////
47/// Assignment operator.
48
50{
51 if (this != &rhs) {
52 gCling->FuncTempInfo_Delete(fInfo);
53 if (rhs.fInfo) {
54 fInfo = gCling->FuncTempInfo_FactoryCopy(rhs.fInfo);
55 gCling->FuncTempInfo_Name(fInfo,fName);
56 gCling->FuncTempInfo_Title(fInfo,fTitle);
57 } else
58 fInfo = nullptr;
59
60 fClass = rhs.fClass;
61 }
62 return *this;
63}
64
65////////////////////////////////////////////////////////////////////////////////
66/// TFunctionTemplate dtor deletes adopted CINT FuncTempInfo.
67
69{
70 gCling->FuncTempInfo_Delete(fInfo);
71}
72
73////////////////////////////////////////////////////////////////////////////////
74/// Clone method.
75
76TObject *TFunctionTemplate::Clone(const char *newname) const
77{
78 TNamed *newobj = new TFunctionTemplate(*this);
79 if (newname && strlen(newname)) newobj->SetName(newname);
80 return newobj;
81}
82
83////////////////////////////////////////////////////////////////////////////////
84/// Return true if this function template object is pointing to a currently
85/// loaded function. If a function is unloaded after the TFunction
86/// is created, the TFunction will be set to be invalid.
87
89{
90 // Register the transaction when checking the validity of the object.
92 // Only for global functions. For data member functions TMethod does it.
93 DeclId_t newId = gInterpreter->GetFunction(nullptr, fName);
94 if (newId) {
95 FuncTempInfo_t *info = gInterpreter->FuncTempInfo_Factory(newId);
96 Update(info);
97 }
98 return newId != nullptr;
99 }
100 return fInfo != nullptr;
101}
102
103////////////////////////////////////////////////////////////////////////////////
104/// Number of function arguments.
105
107{
108 return fInfo ? gCling->FuncTempInfo_TemplateNargs(fInfo) : 0;
109}
110
111////////////////////////////////////////////////////////////////////////////////
112/// Number of function optional (default) arguments.
113
115{
116 // FIXME: when unload this is an over-estimate.
117 return fInfo ? gCling->FuncTempInfo_TemplateMinReqArgs(fInfo) : 0;
118}
119
120////////////////////////////////////////////////////////////////////////////////
121/// Get property description word. For meaning of bits see EProperty.
122
124{
125 return fInfo ? gCling->FuncTempInfo_Property(fInfo) : 0;
126}
127
128////////////////////////////////////////////////////////////////////////////////
129/// Get the properties not already defined in Property.See TDictionary's EFunctionProperty.
130
132{
133 return fInfo ? gCling->FuncTempInfo_ExtraProperty(fInfo) : 0;
134}
135
136////////////////////////////////////////////////////////////////////////////////
137
142
143////////////////////////////////////////////////////////////////////////////////
144/// Update the TFunctionTemplate to reflect the new info.
145///
146/// This can be used to implement unloading (info == 0) and then reloading
147/// (info being the 'new' decl address).
148
150{
151 if (info == nullptr) {
152 if (fInfo) gCling->FuncTempInfo_Delete(fInfo);
153 fInfo = nullptr;
154 return kTRUE;
155 } else {
156 if (fInfo) gCling->FuncTempInfo_Delete(fInfo);
157 fInfo = info;
158 gCling->FuncTempInfo_Title(fInfo,fTitle);
159 return kTRUE;
160 }
161}
162
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
Definition RtypesCore.h:60
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
Definition RtypesCore.h:68
bool Bool_t
Boolean (0=false, 1=true) (bool).
Definition RtypesCore.h:77
constexpr Bool_t kTRUE
Definition RtypesCore.h:107
#define gInterpreter
externTInterpreter * gCling
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:84
Bool_t UpdateInterpreterStateMarker()
const void * DeclId_t
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
virtual ~TFunctionTemplate()
TFunctionTemplate dtor deletes adopted CINT FuncTempInfo.
virtual bool Update(FuncTempInfo_t *info)
Update the TFunctionTemplate to reflect the new info.
DeclId_t GetDeclId() const
FuncTempInfo_t * fInfo
UInt_t GetTemplateMinReqArgs() const
Number of function optional (default) arguments.
virtual Bool_t IsValid()
Return true if this function template object is pointing to a currently loaded function.
TFunctionTemplate & operator=(const TFunctionTemplate &rhs)
Assignment operator.
UInt_t GetTemplateNargs() const
Number of function arguments.
TObject * Clone(const char *newname="") const override
Clone method.
TFunctionTemplate(FuncTempInfo_t *info, TClass *cl)
Default TFunctionTemplate ctor.
Long_t ExtraProperty() const
Get the properties not already defined in Property.See TDictionary's EFunctionProperty.
TString fTitle
Definition TNamed.h:33
TNamed()
Definition TNamed.h:38
TString fName
Definition TNamed.h:32
virtual void SetName(const char *name)
Set the name of the TNamed.
Definition TNamed.cxx:149
TObject()
TObject constructor.
Definition TObject.h:259