Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:11:57

0001 #ifndef FWCore_Framework_global_producerAbilityToImplementor_h
0002 #define FWCore_Framework_global_producerAbilityToImplementor_h
0003 // -*- C++ -*-
0004 //
0005 // Package:     FWCore/Framework
0006 // File  :     producerAbilityToImplementor
0007 //
0008 /**\file  producerAbilityToImplementor.h "FWCore/Framework/interface/global/producerAbilityToImplementor.h"
0009 
0010  Description: Class used to pair a module Ability to the actual base class used to implement that ability
0011 
0012  Usage:
0013     <usage>
0014 
0015 */
0016 //
0017 // Original Author:  Chris Jones
0018 //         Created:  Thu, 18 Jul 2013 11:51:33 GMT
0019 //
0020 
0021 // system include files
0022 
0023 // user include files
0024 #include "FWCore/Framework/interface/moduleAbilities.h"
0025 #include "FWCore/Framework/interface/global/implementors.h"
0026 #include "FWCore/Framework/interface/global/EDProducerBase.h"
0027 
0028 // forward declarations
0029 namespace edm {
0030   namespace global {
0031     namespace producer {
0032       template <typename T>
0033       struct AbilityToImplementor;
0034 
0035       template <typename C>
0036       struct AbilityToImplementor<edm::StreamCache<C>> {
0037         using Type = edm::global::impl::StreamCacheHolder<edm::global::EDProducerBase, C>;
0038       };
0039 
0040       template <typename... Cs>
0041       struct AbilityToImplementor<edm::InputProcessBlockCache<Cs...>> {
0042         using Type = edm::global::impl::InputProcessBlockCacheHolder<edm::global::EDProducerBase, Cs...>;
0043       };
0044 
0045       template <typename C>
0046       struct AbilityToImplementor<edm::RunCache<C>> {
0047         using Type = edm::global::impl::RunCacheHolder<edm::global::EDProducerBase, C>;
0048       };
0049 
0050       template <typename C>
0051       struct AbilityToImplementor<edm::RunSummaryCache<C>> {
0052         using Type = edm::global::impl::RunSummaryCacheHolder<edm::global::EDProducerBase, C>;
0053       };
0054 
0055       template <typename C>
0056       struct AbilityToImplementor<edm::LuminosityBlockCache<C>> {
0057         using Type = edm::global::impl::LuminosityBlockCacheHolder<edm::global::EDProducerBase, C>;
0058       };
0059 
0060       template <typename C>
0061       struct AbilityToImplementor<edm::LuminosityBlockSummaryCache<C>> {
0062         using Type = edm::global::impl::LuminosityBlockSummaryCacheHolder<edm::global::EDProducerBase, C>;
0063       };
0064 
0065       template <>
0066       struct AbilityToImplementor<edm::WatchProcessBlock> {
0067         using Type = edm::global::impl::WatchProcessBlock<edm::global::EDProducerBase>;
0068       };
0069 
0070       template <>
0071       struct AbilityToImplementor<edm::BeginProcessBlockProducer> {
0072         using Type = edm::global::impl::BeginProcessBlockProducer<edm::global::EDProducerBase>;
0073       };
0074 
0075       template <>
0076       struct AbilityToImplementor<edm::EndProcessBlockProducer> {
0077         using Type = edm::global::impl::EndProcessBlockProducer<edm::global::EDProducerBase>;
0078       };
0079 
0080       template <>
0081       struct AbilityToImplementor<edm::BeginRunProducer> {
0082         using Type = edm::global::impl::BeginRunProducer<edm::global::EDProducerBase>;
0083       };
0084 
0085       template <>
0086       struct AbilityToImplementor<edm::EndRunProducer> {
0087         using Type = edm::global::impl::EndRunProducer<edm::global::EDProducerBase>;
0088       };
0089 
0090       template <>
0091       struct AbilityToImplementor<edm::BeginLuminosityBlockProducer> {
0092         using Type = edm::global::impl::BeginLuminosityBlockProducer<edm::global::EDProducerBase>;
0093       };
0094 
0095       template <>
0096       struct AbilityToImplementor<edm::EndLuminosityBlockProducer> {
0097         using Type = edm::global::impl::EndLuminosityBlockProducer<edm::global::EDProducerBase>;
0098       };
0099 
0100       template <>
0101       struct AbilityToImplementor<edm::ExternalWork> {
0102         using Type = edm::global::impl::ExternalWork<edm::global::EDProducerBase>;
0103       };
0104 
0105       template <>
0106       struct AbilityToImplementor<edm::Transformer> {
0107         using Type = edm::global::impl::Transformer<edm::global::EDProducerBase>;
0108       };
0109 
0110       template <>
0111       struct AbilityToImplementor<edm::Accumulator> {
0112         using Type = edm::global::impl::Accumulator<edm::global::EDProducerBase>;
0113       };
0114 
0115       template <bool, bool, typename T>
0116       struct SpecializeAbilityToImplementor {
0117         using Type = typename AbilityToImplementor<T>::Type;
0118       };
0119 
0120       template <bool B, typename C>
0121       struct SpecializeAbilityToImplementor<true, B, edm::RunSummaryCache<C>> {
0122         using Type = typename edm::global::impl::EndRunSummaryProducer<edm::global::EDProducerBase, C>;
0123       };
0124 
0125       template <bool B>
0126       struct SpecializeAbilityToImplementor<true, B, edm::EndRunProducer> {
0127         using Type = edm::global::impl::EmptyType;
0128       };
0129 
0130       template <bool B, typename C>
0131       struct SpecializeAbilityToImplementor<B, true, edm::LuminosityBlockSummaryCache<C>> {
0132         using Type = typename edm::global::impl::EndLuminosityBlockSummaryProducer<edm::global::EDProducerBase, C>;
0133       };
0134 
0135       template <bool B>
0136       struct SpecializeAbilityToImplementor<B, true, edm::EndLuminosityBlockProducer> {
0137         using Type = edm::global::impl::EmptyType;
0138       };
0139     }  // namespace producer
0140   }    // namespace global
0141 }  // namespace edm
0142 
0143 #endif