Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-05-11 03:34:10

0001 #ifndef FWCore_Framework_limited_EDFilter_h
0002 #define FWCore_Framework_limited_EDFilter_h
0003 // -*- C++ -*-
0004 //
0005 // Package:     FWCore/Framework
0006 // Class  :     edm::limited::EDFilter
0007 //
0008 /**\class edm::limited::EDFilter EDFilter.h "FWCore/Framework/interface/limited/EDFilter.h"
0009 
0010  Description: [one line class summary]
0011 
0012  Usage:
0013     <usage>
0014 
0015 */
0016 //
0017 // Original Author:  Chris Jones
0018 //         Created:  Tue, 23 Jul 2013 11:51:07 GMT
0019 //
0020 
0021 // system include files
0022 
0023 // user include files
0024 #include "FWCore/Framework/interface/limited/filterAbilityToImplementor.h"
0025 #include "FWCore/Framework/interface/moduleAbilities.h"
0026 
0027 // forward declarations
0028 
0029 namespace edm {
0030   namespace limited {
0031     template <typename... T>
0032     class EDFilter : public virtual EDFilterBase,
0033                      public filter::SpecializeAbilityToImplementor<
0034                          CheckAbility<edm::module::Abilities::kRunSummaryCache, T...>::kHasIt &
0035                              CheckAbility<edm::module::Abilities::kEndRunProducer, T...>::kHasIt,
0036                          CheckAbility<edm::module::Abilities::kLuminosityBlockSummaryCache, T...>::kHasIt &
0037                              CheckAbility<edm::module::Abilities::kEndLuminosityBlockProducer, T...>::kHasIt,
0038                          T>::Type... {
0039     public:
0040       EDFilter(edm::ParameterSet const& iPSet)
0041           : EDFilterBase(iPSet),
0042             filter::SpecializeAbilityToImplementor<
0043                 CheckAbility<edm::module::Abilities::kRunSummaryCache, T...>::kHasIt &
0044                     CheckAbility<edm::module::Abilities::kEndRunProducer, T...>::kHasIt,
0045                 CheckAbility<edm::module::Abilities::kLuminosityBlockSummaryCache, T...>::kHasIt &
0046                     CheckAbility<edm::module::Abilities::kEndLuminosityBlockProducer, T...>::kHasIt,
0047                 T>::Type(iPSet)... {}
0048 // We do this only in the case of the intel compiler as this might
0049 // end up creating a lot of code bloat due to inline symbols being generated
0050 // in each DSO which uses this header.
0051 #ifdef __INTEL_COMPILER
0052       virtual ~EDFilter() = default;
0053 #endif
0054       // ---------- const member functions ---------------------
0055       bool wantsProcessBlocks() const noexcept final { return WantsProcessBlockTransitions<T...>::value; }
0056       bool wantsInputProcessBlocks() const noexcept final { return WantsInputProcessBlockTransitions<T...>::value; }
0057       bool wantsGlobalRuns() const noexcept final { return WantsGlobalRunTransitions<T...>::value; }
0058       bool wantsGlobalLuminosityBlocks() const noexcept final {
0059         return WantsGlobalLuminosityBlockTransitions<T...>::value;
0060       }
0061       bool wantsStreamRuns() const noexcept final { return WantsStreamRunTransitions<T...>::value; }
0062       bool wantsStreamLuminosityBlocks() const noexcept final {
0063         return WantsStreamLuminosityBlockTransitions<T...>::value;
0064       }
0065 
0066       bool hasAbilityToProduceInBeginProcessBlocks() const final {
0067         return HasAbilityToProduceInBeginProcessBlocks<T...>::value;
0068       }
0069       bool hasAbilityToProduceInEndProcessBlocks() const final {
0070         return HasAbilityToProduceInEndProcessBlocks<T...>::value;
0071       }
0072 
0073       bool hasAbilityToProduceInBeginRuns() const final { return HasAbilityToProduceInBeginRuns<T...>::value; }
0074       bool hasAbilityToProduceInEndRuns() const final { return HasAbilityToProduceInEndRuns<T...>::value; }
0075 
0076       bool hasAbilityToProduceInBeginLumis() const final { return HasAbilityToProduceInBeginLumis<T...>::value; }
0077       bool hasAbilityToProduceInEndLumis() const final { return HasAbilityToProduceInEndLumis<T...>::value; }
0078 
0079       // ---------- static member functions --------------------
0080 
0081       // ---------- member functions ---------------------------
0082 
0083     private:
0084       EDFilter(const EDFilter&) = delete;
0085 
0086       const EDFilter& operator=(const EDFilter&) = delete;
0087 
0088       // ---------- member data --------------------------------
0089     };
0090 
0091   }  // namespace limited
0092 }  // namespace edm
0093 
0094 #endif