CMS 3D CMS Logo

EventSetupProvider.h

Go to the documentation of this file.
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

Generated on Tue Jun 9 17:35:36 2009 for CMSSW by  doxygen 1.5.4