File indexing completed on 2024-04-06 12:03:52
0001 #ifdef DataFormats_Common_HolderToVectorTrait_h
0002 #ifdef DataFormats_Common_Ptr_h
0003
0004 #ifndef DataFormats_Common_HolderToVectorTrait_Ptr_specialization_h
0005 #define DataFormats_Common_HolderToVectorTrait_Ptr_specialization_h
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include <memory>
0025
0026 #include "DataFormats/Common/interface/PtrVector.h"
0027 #include "DataFormats/Common/interface/RefVectorHolder.h"
0028 #include "DataFormats/Common/interface/VectorHolder.h"
0029
0030 namespace edm {
0031 template <typename T>
0032 class PtrVector;
0033 namespace reftobase {
0034
0035 template <typename T, typename U>
0036 struct PtrHolderToVector {
0037 static std::unique_ptr<BaseVectorHolder<T> > makeVectorHolder() {
0038 return std::unique_ptr<BaseVectorHolder<T> >(new VectorHolder<T, edm::PtrVector<U> >);
0039 }
0040 };
0041
0042 template <typename T, typename U>
0043 struct HolderToVectorTrait<T, Ptr<U> > {
0044 typedef PtrHolderToVector<T, U> type;
0045 };
0046
0047 template <typename T>
0048 struct PtrRefHolderToRefVector {
0049 static std::unique_ptr<RefVectorHolderBase> makeVectorHolder() {
0050 return std::unique_ptr<RefVectorHolderBase>(new RefVectorHolder<edm::PtrVector<T> >);
0051 }
0052 };
0053
0054 template <typename T>
0055 struct RefHolderToRefVectorTrait<Ptr<T> > {
0056 typedef PtrRefHolderToRefVector<T> type;
0057 };
0058 }
0059 }
0060
0061 #endif
0062 #endif
0063 #endif