CMS 3D CMS Logo

DataProxyProvider.h

Go to the documentation of this file.
00001 #ifndef Framework_DataProxyProvider_h
00002 #define Framework_DataProxyProvider_h
00003 // -*- C++ -*-
00004 //
00005 // Package:     Framework
00006 // Class  :     DataProxyProvider
00007 // 
00016 //
00017 // Author:      Chris Jones
00018 // Created:     Mon Mar 28 14:21:58 EST 2005
00019 //
00020 
00021 // system include files
00022 #include <vector>
00023 #include <set>
00024 #include <map>
00025 #include "boost/shared_ptr.hpp"
00026 
00027 // user include files
00028 #include "FWCore/Framework/interface/EventSetupRecordKey.h"
00029 #include "FWCore/Framework/interface/DataKey.h"
00030 #include "FWCore/Framework/interface/ComponentDescription.h"
00031 
00032 // forward declarations
00033 namespace edm {
00034    class ValidityInterval;
00035    class ParameterSet;
00036    namespace eventsetup {
00037       class DataProxy;
00038       
00039       
00040 class DataProxyProvider
00041 {
00042 
00043    public:   
00044       typedef std::vector< EventSetupRecordKey> Keys;
00045       typedef std::vector<std::pair<DataKey, 
00046                                     boost::shared_ptr<DataProxy> > > KeyedProxies ;
00047       typedef std::map<EventSetupRecordKey, KeyedProxies> RecordProxies;
00048       
00049       DataProxyProvider();
00050       virtual ~DataProxyProvider();
00051 
00052       // ---------- const member functions ---------------------
00053       bool isUsingRecord(const EventSetupRecordKey&) const;
00054       
00055       std::set<EventSetupRecordKey> usingRecords() const;
00056       
00057       const KeyedProxies& keyedProxies(const EventSetupRecordKey& iRecordKey) const ;
00058       
00059       const ComponentDescription& description() const { return description_;}
00060       // ---------- static member functions --------------------
00061 
00062       // ---------- member functions ---------------------------
00063       
00065       virtual void newInterval(const EventSetupRecordKey& iRecordType,
00066                                 const ValidityInterval& iInterval) = 0;
00067       
00068       void setDescription(const ComponentDescription& iDescription) {
00069          description_ = iDescription;
00070       }
00071       
00075       void setAppendToDataLabel(const edm::ParameterSet&);
00076       
00077       void resetProxies(const EventSetupRecordKey& iRecordType);
00078 
00079    protected:
00080       template< class T>
00081       void usingRecord() {
00082          usingRecordWithKey(EventSetupRecordKey::makeKey<T>());
00083       }
00084       
00085       void usingRecordWithKey(const EventSetupRecordKey&);
00086 
00087       void invalidateProxies(const EventSetupRecordKey& iRecordKey) ;
00088 
00089       virtual void registerProxies(const EventSetupRecordKey& iRecordKey ,
00090                                     KeyedProxies& aProxyList) = 0 ;
00091       
00093       void eraseAll(const EventSetupRecordKey& iRecordKey) ;
00094 
00095    private:
00096       DataProxyProvider(const DataProxyProvider&); // stop default
00097 
00098       const DataProxyProvider& operator=(const DataProxyProvider&); // stop default
00099 
00100       // ---------- member data --------------------------------
00101       RecordProxies recordProxies_;
00102       ComponentDescription description_;
00103       std::string appendToDataLabel_;
00104 };
00105 
00106 template<class ProxyT>
00107 inline void insertProxy(DataProxyProvider::KeyedProxies& iList,
00108                         boost::shared_ptr<ProxyT> iProxy,
00109                         const char* iName="") {
00110    iList.push_back(DataProxyProvider::KeyedProxies::value_type(
00111                                              DataKey(DataKey::makeTypeTag<typename ProxyT::value_type>(),
00112                                                      iName),
00113                                              iProxy));
00114    
00115 }
00116 
00117    }
00118 }
00119 #endif

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