Logo ROOT  
Reference Guide
TBaseClass.cxx
Go to the documentation of this file.
1// @(#)root/meta:$Id$
2// Author: Fons Rademakers 08/02/95
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#include "TBaseClass.h"
13#include "TBuffer.h"
14#include "TClass.h"
15#include "TInterpreter.h"
16#include <limits.h>
17
18#include "TVirtualMutex.h" // For R__LOCKGUARD
19
20/** \class TBaseClass
21Each class (see TClass) has a linked list of its base class(es).
22This class describes one single base class.
23The base class info is obtained via the CINT api.
24 see class TCling.
25
26The base class information is used a.o. in to find all inherited methods.
27*/
28
29
31
32////////////////////////////////////////////////////////////////////////////////
33/// Default TBaseClass ctor. TBaseClasses are constructed in TClass
34/// via a call to TCling::CreateListOfBaseClasses().
35
36TBaseClass::TBaseClass(BaseClassInfo_t *info, TClass *cl) :
37 TDictionary(), fInfo(info), fClass(cl), fDelta(INT_MAX),
38 fProperty(-1), fSTLType(-1)
39{
41}
42
43////////////////////////////////////////////////////////////////////////////////
44/// TBaseClass dtor deletes adopted CINT BaseClassInfo object.
45
47{
49}
50
51////////////////////////////////////////////////////////////////////////////////
52/// Called by the browser, to browse a baseclass.
53
55{
57 if (c) c->Browse(b);
58}
59
60////////////////////////////////////////////////////////////////////////////////
61/// Get pointer to the base class TClass.
62
64{
65 if (!fClassPtr) {
67 else fClassPtr = TClass::GetClass(fName, load);
68 }
69 return fClassPtr;
70}
71
72////////////////////////////////////////////////////////////////////////////////
73/// Get offset from "this" to part of base class.
74
76{
77 // Initialized to INT_MAX to signal that it's unset; -1 is a valid value
78 // meaning "cannot calculate base offset".
79 if (fDelta == INT_MAX) {
82 fDelta = -1;
83 else if (fInfo)
85 }
86 return fDelta;
87}
88
89////////////////////////////////////////////////////////////////////////////////
90/// Get base class description (comment).
91
92const char *TBaseClass::GetTitle() const
93{
94 TClass *c = ((TBaseClass *)this)->GetClassPointer();
95 return c ? c->GetTitle() : "";
96}
97
98////////////////////////////////////////////////////////////////////////////////
99/// Return which type (if any) of STL container the data member is.
100
102{
103 // fSTLType is -1 if not yet evaluated.
104 // fSTLType is -2 if no fInfo was available.
105
106 if (fSTLType < 0) {
107 if (!fInfo) {
108 fSTLType = -2;
109 } else {
112 else if (!strcmp(type, "vector")) fSTLType = ROOT::kSTLvector;
113 else if (!strcmp(type, "list")) fSTLType = ROOT::kSTLlist;
114 else if (!strcmp(type, "forward_list")) fSTLType = ROOT::kSTLforwardlist;
115 else if (!strcmp(type, "deque")) fSTLType = ROOT::kSTLdeque;
116 else if (!strcmp(type, "map")) fSTLType = ROOT::kSTLmap;
117 else if (!strcmp(type, "multimap")) fSTLType = ROOT::kSTLmultimap;
118 else if (!strcmp(type, "set")) fSTLType = ROOT::kSTLset;
119 else if (!strcmp(type, "multiset")) fSTLType = ROOT::kSTLmultiset;
120 else if (!strcmp(type, "unordered_set")) fSTLType = ROOT::kSTLunorderedset;
121 else if (!strcmp(type, "unordered_multiset")) fSTLType = ROOT::kSTLunorderedmultiset;
122 else if (!strcmp(type, "unordered_map")) fSTLType = ROOT::kSTLunorderedmap;
123 else if (!strcmp(type, "unordered_multimap")) fSTLType = ROOT::kSTLunorderedmultimap;
124 else fSTLType = ROOT::kNotSTL;
125 }
126 }
127 if (fSTLType == -2) return ROOT::kNotSTL;
128 return (ROOT::ESTLType) fSTLType;
129}
130
131////////////////////////////////////////////////////////////////////////////////
132/// Get property description word. For meaning of bits see EProperty.
133
135{
136 if (fProperty == -1 && fInfo) {
139 }
140 return fProperty;
141}
142
143////////////////////////////////////////////////////////////////////////////////
144/// Stream an object of TBaseClass. Triggers the calculation of the
145/// cache variables to store them.
146
148 if (b.IsReading()) {
149 b.ReadClassBuffer(Class(), this);
150 } else {
151 // Writing.
152 // Calculate cache properties first.
153 GetDelta();
154 Property();
156 b.WriteClassBuffer(Class(), this);
157 }
158}
Cppyy::TCppType_t fClass
#define c(i)
Definition: RSha256.hxx:101
int Int_t
Definition: RtypesCore.h:45
long Long_t
Definition: RtypesCore.h:54
#define ClassImp(name)
Definition: Rtypes.h:375
@ kIsVirtualBase
Definition: TDictionary.h:89
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t b
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
R__EXTERN TVirtualMutex * gInterpreterMutex
Definition: TInterpreter.h:46
R__EXTERN TInterpreter * gCling
Definition: TInterpreter.h:565
#define R__LOCKGUARD(mutex)
Each class (see TClass) has a linked list of its base class(es).
Definition: TBaseClass.h:33
Int_t GetDelta()
Get offset from "this" to part of base class.
Definition: TBaseClass.cxx:75
ROOT::ESTLType IsSTLContainer()
Return which type (if any) of STL container the data member is.
Definition: TBaseClass.cxx:101
void Browse(TBrowser *b) override
Called by the browser, to browse a baseclass.
Definition: TBaseClass.cxx:54
void Streamer(TBuffer &) override
Stream an object of TBaseClass.
Definition: TBaseClass.cxx:147
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
Definition: TBaseClass.cxx:134
virtual ~TBaseClass()
TBaseClass dtor deletes adopted CINT BaseClassInfo object.
Definition: TBaseClass.cxx:46
TBaseClass(const TBaseClass &)=delete
static TClass * Class()
TClassRef fClassPtr
pointer to CINT base class info
Definition: TBaseClass.h:50
AtomicInt_t fDelta
pointer to parent class
Definition: TBaseClass.h:52
Int_t fSTLType
Definition: TBaseClass.h:54
AtomicInt_t fProperty
Definition: TBaseClass.h:53
BaseClassInfo_t * fInfo
Definition: TBaseClass.h:49
TClass * GetClassPointer(Bool_t load=kTRUE)
Get pointer to the base class TClass.
Definition: TBaseClass.cxx:63
const char * GetTitle() const override
Get base class description (comment).
Definition: TBaseClass.cxx:92
Using a TBrowser one can browse all ROOT objects.
Definition: TBrowser.h:37
Buffer base class used for serializing objects.
Definition: TBuffer.h:43
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition: TClass.h:81
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
Definition: TClass.cxx:2968
This class defines an abstract interface that must be implemented by all classes that contain diction...
Definition: TDictionary.h:167
virtual const char * BaseClassInfo_TmpltName(BaseClassInfo_t *) const
Definition: TInterpreter.h:456
virtual void BaseClassInfo_Delete(BaseClassInfo_t *) const
Definition: TInterpreter.h:444
virtual ClassInfo_t * BaseClassInfo_ClassInfo(BaseClassInfo_t *) const =0
virtual Longptr_t BaseClassInfo_Offset(BaseClassInfo_t *, void *=nullptr, bool=true) const
Definition: TInterpreter.h:450
virtual const char * BaseClassInfo_FullName(BaseClassInfo_t *) const
Definition: TInterpreter.h:454
virtual Long_t BaseClassInfo_Property(BaseClassInfo_t *) const
Definition: TInterpreter.h:451
TString fName
Definition: TNamed.h:32
virtual void SetName(const char *name)
Set the name of the TNamed.
Definition: TNamed.cxx:140
ESTLType
Definition: ESTLType.h:28
@ kSTLmap
Definition: ESTLType.h:33
@ kSTLunorderedmultiset
Definition: ESTLType.h:43
@ kSTLset
Definition: ESTLType.h:35
@ kSTLmultiset
Definition: ESTLType.h:36
@ kSTLdeque
Definition: ESTLType.h:32
@ kSTLvector
Definition: ESTLType.h:30
@ kSTLunorderedmultimap
Definition: ESTLType.h:45
@ kSTLunorderedset
Definition: ESTLType.h:42
@ kSTLlist
Definition: ESTLType.h:31
@ kSTLforwardlist
Definition: ESTLType.h:41
@ kSTLunorderedmap
Definition: ESTLType.h:44
@ kNotSTL
Definition: ESTLType.h:29
@ kSTLmultimap
Definition: ESTLType.h:34