File indexing completed on 2024-04-06 12:03:52
0001 #ifdef DataFormats_Common_HolderToVectorTrait_h
0002 #ifdef DataFormats_Common_Ref_h
0003
0004 #ifndef DataFormats_Common_HolderToVectorTrait_Ref_specialization_h
0005 #define DataFormats_Common_HolderToVectorTrait_Ref_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/VectorHolder.h"
0027 #include "DataFormats/Common/interface/RefVector.h"
0028 #include "DataFormats/Common/interface/RefVectorHolder.h"
0029
0030 namespace edm {
0031 namespace reftobase {
0032
0033 template <typename T, typename REF>
0034 struct RefHolderToVector {
0035 static std::unique_ptr<BaseVectorHolder<T> > makeVectorHolder() {
0036 typedef RefVector<typename REF::product_type, typename REF::value_type, typename REF::finder_type> REFV;
0037 return std::unique_ptr<BaseVectorHolder<T> >(new VectorHolder<T, REFV>);
0038 }
0039 };
0040
0041 template <typename T1, typename C, typename T, typename F>
0042 struct HolderToVectorTrait<T1, Ref<C, T, F> > {
0043 typedef RefHolderToVector<T1, Ref<C, T, F> > type;
0044 };
0045
0046 template <typename REF>
0047 struct RefRefHolderToRefVector {
0048 static std::unique_ptr<RefVectorHolderBase> makeVectorHolder() {
0049 typedef RefVector<typename REF::product_type, typename REF::value_type, typename REF::finder_type> REFV;
0050 return std::unique_ptr<RefVectorHolderBase>(new RefVectorHolder<REFV>);
0051 }
0052 };
0053
0054 template <typename C, typename T, typename F>
0055 struct RefHolderToRefVectorTrait<Ref<C, T, F> > {
0056 typedef RefRefHolderToRefVector<Ref<C, T, F> > type;
0057 };
0058 }
0059 }
0060
0061 #endif
0062 #endif
0063 #endif