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