Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef FWCore_Framework_global_filterAbilityToImplementor_h
0002 #define FWCore_Framework_global_filterAbilityToImplementor_h
0003 // -*- C++ -*-
0004 //
0005 // Package:     FWCore/Framework
0006 // File  :     filterAbilityToImplementor
0007 //
0008 /**\file  filterAbilityToImplementor.h "FWCore/Framework/interface/global/filterAbilityToImplementor.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/EDFilterBase.h"
0027 
0028 // forward declarations
0029 namespace edm {
0030   namespace global {
0031     namespace filter {
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::EDFilterBase, C>;
0038       };
0039 
0040       template <typename... Cs>
0041       struct AbilityToImplementor<edm::InputProcessBlockCache<Cs...>> {
0042         using Type = edm::global::impl::InputProcessBlockCacheHolder<edm::global::EDFilterBase, Cs...>;
0043       };
0044 
0045       template <typename C>
0046       struct AbilityToImplementor<edm::RunCache<C>> {
0047         using Type = edm::global::impl::RunCacheHolder<edm::global::EDFilterBase, C>;
0048       };
0049 
0050       template <typename C>
0051       struct AbilityToImplementor<edm::RunSummaryCache<C>> {
0052         using Type = edm::global::impl::RunSummaryCacheHolder<edm::global::EDFilterBase, C>;
0053       };
0054 
0055       template <typename C>
0056       struct AbilityToImplementor<edm::LuminosityBlockCache<C>> {
0057         using Type = edm::global::impl::LuminosityBlockCacheHolder<edm::global::EDFilterBase, C>;
0058       };
0059 
0060       template <typename C>
0061       struct AbilityToImplementor<edm::LuminosityBlockSummaryCache<C>> {
0062         using Type = edm::global::impl::LuminosityBlockSummaryCacheHolder<edm::global::EDFilterBase, C>;
0063       };
0064 
0065       template <>
0066       struct AbilityToImplementor<edm::WatchProcessBlock> {
0067         using Type = edm::global::impl::WatchProcessBlock<edm::global::EDFilterBase>;
0068       };
0069 
0070       template <>
0071       struct AbilityToImplementor<edm::BeginProcessBlockProducer> {
0072         using Type = edm::global::impl::BeginProcessBlockProducer<edm::global::EDFilterBase>;
0073       };
0074 
0075       template <>
0076       struct AbilityToImplementor<edm::EndProcessBlockProducer> {
0077         using Type = edm::global::impl::EndProcessBlockProducer<edm::global::EDFilterBase>;
0078       };
0079 
0080       template <>
0081       struct AbilityToImplementor<edm::BeginRunProducer> {
0082         using Type = edm::global::impl::BeginRunProducer<edm::global::EDFilterBase>;
0083       };
0084 
0085       template <>
0086       struct AbilityToImplementor<edm::EndRunProducer> {
0087         using Type = edm::global::impl::EndRunProducer<edm::global::EDFilterBase>;
0088       };
0089 
0090       template <>
0091       struct AbilityToImplementor<edm::BeginLuminosityBlockProducer> {
0092         using Type = edm::global::impl::BeginLuminosityBlockProducer<edm::global::EDFilterBase>;
0093       };
0094 
0095       template <>
0096       struct AbilityToImplementor<edm::EndLuminosityBlockProducer> {
0097         using Type = edm::global::impl::EndLuminosityBlockProducer<edm::global::EDFilterBase>;
0098       };
0099       template <>
0100       struct AbilityToImplementor<edm::ExternalWork> {
0101         using Type = edm::global::impl::ExternalWork<edm::global::EDFilterBase>;
0102       };
0103 
0104       template <>
0105       struct AbilityToImplementor<edm::Transformer> {
0106         using Type = edm::global::impl::Transformer<edm::global::EDFilterBase>;
0107       };
0108 
0109       template <bool, bool, typename T>
0110       struct SpecializeAbilityToImplementor {
0111         using Type = typename AbilityToImplementor<T>::Type;
0112       };
0113 
0114       template <bool B, typename C>
0115       struct SpecializeAbilityToImplementor<true, B, edm::RunSummaryCache<C>> {
0116         using Type = typename edm::global::impl::EndRunSummaryProducer<edm::global::EDFilterBase, C>;
0117       };
0118 
0119       template <bool B>
0120       struct SpecializeAbilityToImplementor<true, B, edm::EndRunProducer> {
0121         using Type = edm::global::impl::EmptyType;
0122       };
0123 
0124       template <bool B, typename C>
0125       struct SpecializeAbilityToImplementor<B, true, edm::LuminosityBlockSummaryCache<C>> {
0126         using Type = typename edm::global::impl::EndLuminosityBlockSummaryProducer<edm::global::EDFilterBase, C>;
0127       };
0128 
0129       template <bool B>
0130       struct SpecializeAbilityToImplementor<B, true, edm::EndLuminosityBlockProducer> {
0131         using Type = edm::global::impl::EmptyType;
0132       };
0133     }  // namespace filter
0134   }    // namespace global
0135 }  // namespace edm
0136 
0137 #endif