Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef FWCore_Framework_stream_AbilityToImplementor_h
0002 #define FWCore_Framework_stream_AbilityToImplementor_h
0003 // -*- C++ -*-
0004 //
0005 // Package:     FWCore/Framework
0006 // File  :     AbilityToImplementor
0007 //
0008 /**\class  edm::stream::AbilityToImplementor producerAbilityToImplementor.h "FWCore/Framework/interface/stream/AbilityToImplementor.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/stream/moduleAbilities.h"
0026 #include "FWCore/Framework/interface/stream/implementors.h"
0027 
0028 // forward declarations
0029 namespace edm {
0030   namespace stream {
0031     template <typename T>
0032     struct AbilityToImplementor;
0033 
0034     template <typename C>
0035     struct AbilityToImplementor<edm::GlobalCache<C>> {
0036       using Type = edm::stream::impl::GlobalCacheHolder<C>;
0037     };
0038 
0039     template <typename... CacheTypes>
0040     struct AbilityToImplementor<edm::InputProcessBlockCache<CacheTypes...>> {
0041       using Type = edm::stream::impl::InputProcessBlockCacheHolder<CacheTypes...>;
0042     };
0043 
0044     template <typename C>
0045     struct AbilityToImplementor<edm::RunCache<C>> {
0046       using Type = edm::stream::impl::RunCacheHolder<C>;
0047     };
0048 
0049     template <typename C>
0050     struct AbilityToImplementor<edm::RunSummaryCache<C>> {
0051       using Type = edm::stream::impl::RunSummaryCacheHolder<C>;
0052     };
0053 
0054     template <typename C>
0055     struct AbilityToImplementor<edm::LuminosityBlockCache<C>> {
0056       using Type = edm::stream::impl::LuminosityBlockCacheHolder<C>;
0057     };
0058 
0059     template <typename C>
0060     struct AbilityToImplementor<edm::LuminosityBlockSummaryCache<C>> {
0061       using Type = edm::stream::impl::LuminosityBlockSummaryCacheHolder<C>;
0062     };
0063 
0064     template <>
0065     struct AbilityToImplementor<edm::WatchProcessBlock> {
0066       using Type = edm::stream::impl::WatchProcessBlock;
0067     };
0068 
0069     template <>
0070     struct AbilityToImplementor<edm::BeginProcessBlockProducer> {
0071       using Type = edm::stream::impl::BeginProcessBlockProducer;
0072     };
0073 
0074     template <>
0075     struct AbilityToImplementor<edm::EndProcessBlockProducer> {
0076       using Type = edm::stream::impl::EndProcessBlockProducer;
0077     };
0078 
0079     template <>
0080     struct AbilityToImplementor<edm::BeginRunProducer> {
0081       using Type = edm::stream::impl::BeginRunProducer;
0082     };
0083 
0084     template <>
0085     struct AbilityToImplementor<edm::EndRunProducer> {
0086       using Type = edm::stream::impl::EndRunProducer;
0087     };
0088 
0089     template <>
0090     struct AbilityToImplementor<edm::BeginLuminosityBlockProducer> {
0091       using Type = edm::stream::impl::BeginLuminosityBlockProducer;
0092     };
0093 
0094     template <>
0095     struct AbilityToImplementor<edm::EndLuminosityBlockProducer> {
0096       using Type = edm::stream::impl::EndLuminosityBlockProducer;
0097     };
0098 
0099     template <>
0100     struct AbilityToImplementor<edm::ExternalWork> {
0101       using Type = edm::stream::impl::ExternalWork;
0102     };
0103 
0104     // As currently implemented this ability only works
0105     // with EDProducer, not with EDAnalyzers or EDFilters!
0106     template <>
0107     struct AbilityToImplementor<edm::Transformer> {
0108       using Type = edm::stream::impl::Transformer;
0109     };
0110 
0111     // As currently implemented this ability only works
0112     // with EDProducer, not with EDAnalyzers or EDFilters!
0113     template <>
0114     struct AbilityToImplementor<edm::Accumulator> {
0115       using Type = edm::stream::impl::Accumulator;
0116     };
0117 
0118     template <>
0119     struct AbilityToImplementor<edm::stream::WatchRuns> {
0120       using Type = edm::stream::impl::WatchRuns;
0121     };
0122 
0123     template <>
0124     struct AbilityToImplementor<edm::stream::WatchLuminosityBlocks> {
0125       using Type = edm::stream::impl::WatchLuminosityBlocks;
0126     };
0127 
0128   }  // namespace stream
0129 }  // namespace edm
0130 
0131 #endif