00001 #ifndef DataFormats_Common_getRef_h 00002 #define DataFormats_Common_getRef_h 00003 /* \function edm::getRef(...) 00004 * 00005 * \author Luca Lista, INFN 00006 * 00007 */ 00008 #include "DataFormats/Common/interface/Ref.h" 00009 #include "DataFormats/Common/interface/View.h" 00010 #include "DataFormats/Common/interface/Handle.h" 00011 00012 namespace edm { 00013 namespace helper { 00014 template<typename C> 00015 struct MatcherGetRef { 00016 typedef Ref<C> ref_type; 00017 static ref_type getRef( const Handle<C> & c, size_t k ) { return ref_type(c, k); } 00018 }; 00019 00020 template<typename T> 00021 struct MatcherGetRef<View<T> > { 00022 typedef RefToBase<T> ref_type; 00023 static ref_type getRef( const Handle<View<T> > & v, size_t k ) { return v->refAt(k); } 00024 }; 00025 } 00026 00027 template<typename C> 00028 typename helper::MatcherGetRef<C>::ref_type getRef( const Handle<C> & c, size_t k ) { 00029 return helper::MatcherGetRef<C>::getRef( c, k ); 00030 } 00031 } 00032 00033 #endif