Logo ROOT  
Reference Guide
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
19class TGeoExtension : public TObject
20{
21protected:
23 virtual ~TGeoExtension() {}
24
25public:
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{
38protected:
39 virtual ~TGeoRCExtension() {delete fUserObject;}
40public:
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;}
49
50
51private:
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
int Int_t
Definition: RtypesCore.h:41
#define ClassDef(name, id)
Definition: Rtypes.h:326
ABC for user objects attached to TGeoVolume or TGeoNode.
Definition: TGeoExtension.h:20
virtual ~TGeoExtension()
Definition: TGeoExtension.h:23
virtual TGeoExtension * Grab()=0
virtual void Release() const =0
Reference counted extension which has a pointer to and owns a user defined TObject.
Definition: TGeoExtension.h:37
void Release() const
Definition: TGeoExtension.h:45
TObject * GetUserObject() const
Definition: TGeoExtension.h:48
TGeoRCExtension(const TGeoRCExtension &)
virtual ~TGeoRCExtension()
Definition: TGeoExtension.h:39
TObject * fUserObject
Definition: TGeoExtension.h:56
TGeoRCExtension & operator=(const TGeoRCExtension &)
TGeoRCExtension(TObject *obj)
Definition: TGeoExtension.h:42
void SetUserObject(TObject *obj)
Definition: TGeoExtension.h:47
TGeoExtension * Grab()
Definition: TGeoExtension.h:44
Mother of all ROOT objects.
Definition: TObject.h:37