Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:01:16

0001 #ifndef UtilAlgos_ParameterAdapter_h
0002 #define UtilAlgos_ParameterAdapter_h
0003 
0004 #include "FWCore/Framework/interface/ConsumesCollector.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 
0008 namespace reco {
0009   namespace modules {
0010 
0011     template <typename S>
0012     struct ParameterAdapter {
0013       static S make(const edm::ParameterSet& cfg) { return S(cfg); }
0014       static S make(const edm::ParameterSet& cfg, edm::ConsumesCollector&& iC) { return S(cfg, iC); }
0015       static S make(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC) { return S(cfg, iC); }
0016 
0017       static void fillPSetDescription(edm::ParameterSetDescription& desc) { S::template fillPSetDescription(desc); }
0018     };
0019 
0020     template <typename S>
0021     S make(const edm::ParameterSet& cfg) {
0022       return ParameterAdapter<S>::make(cfg);
0023     }
0024     template <typename S>
0025     S make(const edm::ParameterSet& cfg, edm::ConsumesCollector&& iC) {
0026       return ParameterAdapter<S>::make(cfg, iC);
0027     }
0028     template <typename S>
0029     S make(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC) {
0030       return ParameterAdapter<S>::make(cfg, iC);
0031     }
0032 
0033     template <typename S>
0034     void fillPSetDescription(edm::ParameterSetDescription& desc) {
0035       ParameterAdapter<S>::fillPSetDescription(desc);
0036     }
0037   }  // namespace modules
0038 }  // namespace reco
0039 
0040 #define NOPARAMETER_ADAPTER(TYPE)                                                                      \
0041   namespace reco {                                                                                     \
0042     namespace modules {                                                                                \
0043       struct ParameterAdapter<TYPE> {                                                                  \
0044         static TYPE make(const edm::ParameterSet& cfg) { return TYPE(); }                              \
0045         static TYPE make(const edm::ParameterSet& cfg, edm::ConsumesCollector&& iC) { return TYPE(); } \
0046         static TYPE make(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC) { return TYPE(); }  \
0047         static void fillPSetDescription(edm::ParameterSetDescription& desc) {}                         \
0048       };                                                                                               \
0049     }                                                                                                  \
0050   }
0051 
0052 #endif