Go to the documentation of this file.00001 #ifndef Framework_HCMethods_h
00002 #define Framework_HCMethods_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "FWCore/Framework/interface/HCTypeTag.h"
00021 #include "boost/type_traits/remove_const.hpp"
00022
00023
00024 namespace edm {
00025 namespace eventsetup {
00026 namespace heterocontainer {
00027 template< class Type, class Key, class IdTag >
00028 inline Key makeKey(const IdTag& iIdTag) {
00029 HCTypeTag typeTag = HCTypeTag::make<Type>();
00030 return Key(typeTag, iIdTag);
00031 }
00032
00033 template< class Type, class Key>
00034 inline Key makeKey() {
00035 HCTypeTag typeTag = HCTypeTag::make<Type>();
00036 return Key(typeTag);
00037 }
00038
00039
00040
00041
00042
00043
00044 template<class Key, class ItemType> struct type_from_itemtype {
00045 typedef typename boost::remove_const<ItemType>::type Type;
00046 };
00047
00048 template<class Key, class ItemType, class Storage, class IdTag >
00049 inline bool insert(Storage& iStorage, ItemType* iItem, const IdTag& iIdTag) {
00050 return iStorage.insert(makeKey< typename type_from_itemtype<Key, ItemType>::Type,
00051 Key>(iIdTag) , iItem);
00052 }
00053
00054 template< class Key, class ItemType, class Storage>
00055 inline bool insert(Storage& iStorage, ItemType* iItem) {
00056 return iStorage.insert(makeKey<ItemType,
00057 Key>() , iItem);
00058 }
00059
00060
00061 template< class Key, class ItemType, class Storage, class IdTag >
00062 inline ItemType* find(const Storage& iStorage, const IdTag& iIdTag) {
00063
00064 return static_cast<ItemType*>(iStorage.find(
00065 makeKey<typename type_from_itemtype<Key,
00066 ItemType>::Type,Key>(iIdTag)));
00067 }
00068
00069 template< class Key, class ItemType, class Storage>
00070 inline ItemType* find(const Storage& iStorage) {
00071
00072 return static_cast<ItemType*>( iStorage.find(
00073 makeKey<typename type_from_itemtype<Key,
00074 ItemType>::Type,Key>()));
00075 }
00076 }
00077 }
00078 }
00079 #endif