Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
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 "TObject.h"
16
17class TGeoExtension : public TObject {
18protected:
20 ~TGeoExtension() override {}
21
22public:
23 // Method called whenever requiring a pointer to the extension
24 // Equivalent to new()
25 virtual TGeoExtension *Grab() = 0;
26 // Method called always when the pointer to the extension is not needed
27 // Equivalent to delete()
28 virtual void Release() const = 0;
29
30 ClassDefOverride(TGeoExtension, 1) // User extension for volumes and nodes
31};
32
34protected:
35 ~TGeoRCExtension() override { delete fUserObject; }
36
37public:
38 TGeoRCExtension() : TGeoExtension(), fRC(0), fUserObject(nullptr) { fRC++; }
40
41 TGeoExtension *Grab() override
42 {
43 fRC++;
44 return this;
45 }
46 void Release() const override;
47
48 void SetUserObject(TObject *obj) { fUserObject = obj; }
49 TObject *GetUserObject() const { return fUserObject; }
50
51private:
52 // Copy constructor and assignment not allowed
55 mutable Int_t fRC{0}; // Reference counter
56 TObject *fUserObject{nullptr}; // Attached user object
57
58 ClassDefOverride(TGeoRCExtension, 1) // Reference counted extension for volumes and nodes
59};
60
61#endif
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
ABC for user objects attached to TGeoVolume or TGeoNode.
virtual TGeoExtension * Grab()=0
~TGeoExtension() override
virtual void Release() const =0
Reference counted extension which has a pointer to and owns a user defined TObject.
~TGeoRCExtension() override
TGeoRCExtension(const TGeoRCExtension &)=delete
TGeoRCExtension & operator=(const TGeoRCExtension &)=delete
TObject * GetUserObject() const
TObject * fUserObject
void Release() const override
TGeoExtension * Grab() override
TGeoRCExtension(TObject *obj)
void SetUserObject(TObject *obj)
Mother of all ROOT objects.
Definition TObject.h:41