00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef ROO_EXPENSIVE_OBJECT_CACHE
00017 #define ROO_EXPENSIVE_OBJECT_CACHE
00018
00019 #include "Rtypes.h"
00020 #include "RooArgSet.h"
00021 #include "TString.h"
00022 #include <list>
00023 #include <map>
00024
00025 class RooExpensiveObjectCache : public TObject {
00026 public:
00027
00028 RooExpensiveObjectCache() ;
00029 RooExpensiveObjectCache(const RooExpensiveObjectCache&) ;
00030 virtual ~RooExpensiveObjectCache() ;
00031
00032 Bool_t registerObject(const char* ownerName, const char* objectName, TObject& cacheObject, TIterator* paramIter) ;
00033 Bool_t registerObject(const char* ownerName, const char* objectName, TObject& cacheObject, const RooArgSet& params) ;
00034 const TObject* retrieveObject(const char* name, TClass* tclass, const RooArgSet& params) ;
00035
00036 const TObject* getObj(Int_t uniqueID) ;
00037 Bool_t clearObj(Int_t uniqueID) ;
00038 Bool_t setObj(Int_t uniqueID, TObject* obj) ;
00039 void clearAll() ;
00040
00041 void importCacheObjects(RooExpensiveObjectCache& other, const char* ownerName, Bool_t verbose=kFALSE) ;
00042
00043 static RooExpensiveObjectCache& instance() ;
00044
00045 Int_t size() const { return _map.size() ; }
00046
00047 static void cleanup() ;
00048
00049 void print() const ;
00050
00051 class ExpensiveObject {
00052 public:
00053 ExpensiveObject() { _uid = 0 ; _payload = 0 ; } ;
00054 ExpensiveObject(Int_t uid, const char* ownerName, TObject& payload, TIterator* paramIter) ;
00055 ExpensiveObject(Int_t uid, const ExpensiveObject& other) ;
00056 virtual ~ExpensiveObject() ;
00057 Bool_t matches(TClass* tc, const RooArgSet& params) ;
00058
00059 Int_t uid() const { return _uid ; }
00060 const TObject* payload() const { return _payload ; }
00061 TObject* payload() { return _payload ; }
00062 void setPayload(TObject* obj) { _payload = obj ; }
00063 const char* ownerName() const { return _ownerName.Data() ; }
00064
00065 void print() ;
00066
00067 protected:
00068
00069 Int_t _uid ;
00070 TObject* _payload ;
00071 std::map<TString,Double_t> _realRefParams ;
00072 std::map<TString,Int_t> _catRefParams ;
00073 TString _ownerName ;
00074
00075 ClassDef(ExpensiveObject,2) ;
00076 } ;
00077
00078
00079 protected:
00080
00081 Int_t _nextUID ;
00082
00083 static RooExpensiveObjectCache* _instance ;
00084
00085 std::map<TString,ExpensiveObject*> _map ;
00086
00087
00088 ClassDef(RooExpensiveObjectCache,2)
00089 };
00090
00091 #endif