Go to the documentation of this file.00001 #ifndef Framework_DataKey_h
00002 #define Framework_DataKey_h
00003
00004
00005
00006
00007
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "FWCore/Framework/interface/DataKeyTags.h"
00025 #include "FWCore/Framework/interface/HCTypeTag.h"
00026
00027
00028 namespace edm {
00029 namespace eventsetup {
00030 class DataKey
00031 {
00032
00033 friend void swap(DataKey&, DataKey&);
00034 public:
00035 enum DoNotCopyMemory { kDoNotCopyMemory };
00036
00037 DataKey();
00038 DataKey(const TypeTag& iType,
00039 const IdTags& iId) :
00040 type_(iType),
00041 name_(iId),
00042 ownMemory_() {
00043 makeCopyOfMemory();
00044 }
00045
00046 DataKey(const TypeTag& iType,
00047 const IdTags& iId,
00048 DoNotCopyMemory) :
00049 type_(iType),
00050 name_(iId),
00051 ownMemory_(false) {}
00052
00053 DataKey(const DataKey& iRHS) :
00054 type_(iRHS.type_),
00055 name_(iRHS.name_),
00056 ownMemory_() {
00057 makeCopyOfMemory();
00058 }
00059
00060 DataKey& operator=(const DataKey&);
00061
00062 ~DataKey() { releaseMemory(); }
00063
00064
00065 const TypeTag& type() const { return type_; }
00066 const NameTag& name() const { return name_; }
00067
00068 bool operator==(const DataKey& iRHS) const;
00069 bool operator<(const DataKey& iRHS) const;
00070
00071
00072 template<class T>
00073 static TypeTag makeTypeTag() {
00074 return heterocontainer::HCTypeTag::make<T>();
00075 }
00076
00077
00078
00079 private:
00080 void makeCopyOfMemory();
00081 void releaseMemory() {
00082 if(ownMemory_) {
00083 deleteMemory();
00084 ownMemory_ = false;
00085 }
00086 }
00087 void deleteMemory();
00088 void swap(DataKey&);
00089
00090
00091 TypeTag type_;
00092 NameTag name_;
00093 bool ownMemory_;
00094 };
00095
00096
00097 inline
00098 void
00099 swap(DataKey& a, DataKey& b)
00100 {
00101 a.swap(b);
00102 }
00103 }
00104 }
00105 #endif