Loading [MathJax]/extensions/tex2jax.js
Logo ROOT   6.14/05
Reference Guide
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TGeoExtension.h
Go to the documentation of this file.
1 /*************************************************************************
2  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
3  * All rights reserved. *
4  * *
5  * For the licensing terms see $ROOTSYS/LICENSE. *
6  * For the list of contributors see $ROOTSYS/README/CREDITS. *
7  *************************************************************************/
8 
9 // Author: Andrei.Gheata@cern.ch 29/05/2013
10 // Following proposal by Markus Frank
11 
12 #ifndef ROOT_TGeoExtension
13 #define ROOT_TGeoExtension
14 
15 #include <cassert>
16 
17 #include "TObject.h"
18 
19 class TGeoExtension : public TObject
20 {
21 protected:
23  virtual ~TGeoExtension() {}
24 
25 public:
26  // Method called whenever requiring a pointer to the extension
27  // Equivalent to new()
28  virtual TGeoExtension *Grab() = 0;
29  // Method called always when the pointer to the extension is not needed
30  // Equivalent to delete()
31  virtual void Release() const = 0;
32 
33  ClassDef(TGeoExtension, 1) // User extension for volumes and nodes
34 };
35 
37 {
38 protected:
39  virtual ~TGeoRCExtension() {delete fUserObject;}
40 public:
41  TGeoRCExtension() : TGeoExtension(), fRC(0), fUserObject(0) {fRC++;}
42  TGeoRCExtension(TObject *obj) : TGeoExtension(), fRC(0), fUserObject(obj) {fRC++;}
43 
44  TGeoExtension *Grab() {fRC++; return this;}
45  void Release() const {assert(fRC > 0); fRC--; if (fRC ==0) delete this;}
46 
47  void SetUserObject(TObject *obj) {fUserObject = obj;}
48  TObject *GetUserObject() const {return fUserObject;}
49 
50 
51 private:
52  // Copy constructor and assignment not allowed
53  TGeoRCExtension(const TGeoRCExtension &); // Not implemented
54  TGeoRCExtension &operator =(const TGeoRCExtension &); // Not implemented
55  mutable Int_t fRC; // Reference counter
56  TObject *fUserObject; // Attached user object
57 
58  ClassDef(TGeoRCExtension, 1) // Reference counted extension for volumes and nodes
59 };
60 
61 #endif
virtual ~TGeoRCExtension()
Definition: TGeoExtension.h:39
void Release() const
Definition: TGeoExtension.h:45
TObject * GetUserObject() const
Definition: TGeoExtension.h:48
void SetUserObject(TObject *obj)
Definition: TGeoExtension.h:47
int Int_t
Definition: RtypesCore.h:41
TGeoRCExtension(TObject *obj)
Definition: TGeoExtension.h:42
TGeoExtension * Grab()
Definition: TGeoExtension.h:44
#define ClassDef(name, id)
Definition: Rtypes.h:320
TObject & operator=(const TObject &rhs)
TObject assignment operator.
Definition: TObject.h:271
virtual ~TGeoExtension()
Definition: TGeoExtension.h:23
virtual void Release() const =0
ABC for user objects attached to TGeoVolume or TGeoNode.
Definition: TGeoExtension.h:19
Reference counted extension which has a pointer to and owns a user defined TObject.
Definition: TGeoExtension.h:36
TObject * fUserObject
Definition: TGeoExtension.h:56
Mother of all ROOT objects.
Definition: TObject.h:37
virtual TGeoExtension * Grab()=0