MnReferenceCounter.h

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: MnReferenceCounter.h 20880 2007-11-19 11:23:41Z rdm $
00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005  
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
00007  *                                                                    *
00008  **********************************************************************/
00009 
00010 #ifndef ROOT_Minuit2_MnReferenceCounter
00011 #define ROOT_Minuit2_MnReferenceCounter
00012 
00013 #include <cassert>
00014 
00015 #include "StackAllocator.h"
00016 
00017 namespace ROOT {
00018 
00019    namespace Minuit2 {
00020 
00021 
00022 //extern StackAllocator gStackAllocator;
00023 
00024 class MnReferenceCounter {
00025 
00026 public:
00027 
00028   MnReferenceCounter() : fReferences(0) {}
00029 
00030   MnReferenceCounter(const MnReferenceCounter& other) : 
00031     fReferences(other.fReferences) {}
00032 
00033   MnReferenceCounter& operator=(const MnReferenceCounter& other) {
00034     fReferences = other.fReferences;
00035     return *this;
00036   }
00037   
00038   ~MnReferenceCounter() {assert(fReferences == 0);}
00039   
00040   void* operator new(size_t nbytes) {
00041     return StackAllocatorHolder::Get().Allocate(nbytes);
00042   }
00043   
00044   void operator delete(void* p, size_t /*nbytes */) {
00045     StackAllocatorHolder::Get().Deallocate(p);
00046   }
00047 
00048   unsigned int References() const {return fReferences;}
00049 
00050   void AddReference() const {fReferences++;}
00051 
00052   void RemoveReference() const {fReferences--;}
00053   
00054 private:
00055   
00056   mutable unsigned int fReferences;
00057 };
00058 
00059   }  // namespace Minuit2
00060 
00061 }  // namespace ROOT
00062 
00063 #endif  // ROOT_Minuit2_MnReferenceCounter

Generated on Tue Jul 5 14:25:45 2011 for ROOT_528-00b_version by  doxygen 1.5.1