00001 #ifndef Framework_EventSetupProvider_h 00002 #define Framework_EventSetupProvider_h 00003 // -*- C++ -*- 00004 // 00005 // Package: Framework 00006 // Class: EventSetupProvider 00007 // 00016 // 00017 // Author: Chris Jones 00018 // Created: Thu Mar 24 14:10:07 EST 2005 00019 // 00020 00021 // system include files 00022 #include <memory> 00023 #include <map> 00024 #include <set> 00025 00026 #include "boost/shared_ptr.hpp" 00027 00028 // user include files 00029 #include "FWCore/Framework/interface/EventSetup.h" 00030 00031 // forward declarations 00032 namespace edm { 00033 class IOVSyncValue; 00034 class EventSetupRecordIntervalFinder; 00035 00036 namespace eventsetup { 00037 class EventSetupRecordProvider; 00038 class DataProxyProvider; 00039 class ComponentDescription; 00040 00041 class EventSetupProvider 00042 { 00043 00044 public: 00045 typedef std::string RecordName; 00046 typedef std::string DataType; 00047 typedef std::string DataLabel; 00048 typedef std::pair<DataType,DataLabel> DataKeyInfo; 00049 typedef std::multimap<RecordName,DataKeyInfo> RecordToDataMap; 00050 typedef std::map<ComponentDescription,RecordToDataMap > PreferredProviderInfo; 00051 EventSetupProvider(const PreferredProviderInfo* iInfo=0); 00052 virtual ~EventSetupProvider(); 00053 00054 // ---------- const member functions --------------------- 00055 std::set<ComponentDescription> proxyProviderDescriptions() const; 00056 00057 // ---------- static member functions -------------------- 00058 00059 // ---------- member functions --------------------------- 00060 EventSetup const& eventSetupForInstance(const IOVSyncValue&); 00061 00062 EventSetup const& eventSetup() const {return eventSetup_;} 00063 00064 //called by specializations of EventSetupRecordProviders 00065 template<class T> 00066 void addRecordToEventSetup(T& iRecord) { 00067 iRecord.setEventSetup(&eventSetup_); 00068 eventSetup_.add(iRecord); 00069 } 00070 00071 void add(boost::shared_ptr<DataProxyProvider>); 00072 void add(boost::shared_ptr<EventSetupRecordIntervalFinder>); 00073 00074 void finishConfiguration(); 00075 00077 void resetRecordPlusDependentRecords(const EventSetupRecordKey& ); 00078 protected: 00079 00080 template <class T> 00081 void insert(std::auto_ptr<T> iRecordProvider) { 00082 std::auto_ptr<EventSetupRecordProvider> temp(iRecordProvider.release()); 00083 insert(eventsetup::heterocontainer::makeKey< 00084 typename T::RecordType, 00085 eventsetup::EventSetupRecordKey>(), 00086 temp); 00087 } 00088 00089 private: 00090 EventSetupProvider(const EventSetupProvider&); // stop default 00091 00092 const EventSetupProvider& operator=(const EventSetupProvider&); // stop default 00093 00094 00095 void insert(const EventSetupRecordKey&, std::auto_ptr<EventSetupRecordProvider>); 00096 00097 // ---------- member data -------------------------------- 00098 EventSetup eventSetup_; 00099 typedef std::map<EventSetupRecordKey, boost::shared_ptr<EventSetupRecordProvider> > Providers; 00100 Providers providers_; 00101 bool mustFinishConfiguration_; 00102 00103 std::auto_ptr<PreferredProviderInfo> preferredProviderInfo_; 00104 std::auto_ptr<std::vector<boost::shared_ptr<EventSetupRecordIntervalFinder> > > finders_; 00105 }; 00106 00107 } 00108 } 00109 #endif