Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef FWCore_Framework_one_OutputModule_h
0002 #define FWCore_Framework_one_OutputModule_h
0003 // -*- C++ -*-
0004 //
0005 // Package:     FWCore/Framework
0006 // Class  :     edm::one::OutputModule
0007 //
0008 /**\class edm::one::OutputModule OutputModule.h "FWCore/Framework/interface/one/OutputModule.h"
0009 
0010  Description: [one line class summary]
0011 
0012  Usage:
0013     <usage>
0014 
0015 */
0016 //
0017 // Original Author:  Chris Jones
0018 //         Created:  Wed, 31 Jul 2013 18:21:29 GMT
0019 //
0020 
0021 // system include files
0022 
0023 // user include files
0024 #include "FWCore/Framework/interface/one/outputmoduleAbilityToImplementor.h"
0025 
0026 // forward declarations
0027 namespace edm {
0028   namespace one {
0029     template <typename... T>
0030     class OutputModule : public virtual OutputModuleBase, public outputmodule::AbilityToImplementor<T>::Type... {
0031     public:
0032       OutputModule(edm::ParameterSet const& iPSet)
0033           : OutputModuleBase(iPSet), outputmodule::AbilityToImplementor<T>::Type(iPSet)... {}
0034       OutputModule(const OutputModule&) = delete;                   // stop default
0035       const OutputModule& operator=(const OutputModule&) = delete;  // stop default
0036 
0037       // Required to work around ICC bug, but possible source of bloat in gcc.
0038       // We do this only in the case of the intel compiler as this might end up
0039       // creating a lot of code bloat due to inline symbols being generated in
0040       // each DSO which uses this header.
0041 #ifdef __INTEL_COMPILER
0042       virtual ~OutputModule() = default;
0043 #endif
0044 
0045       // ---------- const member functions ---------------------
0046       bool wantsProcessBlocks() const noexcept final { return WantsProcessBlockTransitions<T...>::value; }
0047       bool wantsInputProcessBlocks() const noexcept final { return WantsInputProcessBlockTransitions<T...>::value; }
0048       bool wantsGlobalRuns() const noexcept final { return WantsGlobalRunTransitions<T...>::value; }
0049       bool wantsGlobalLuminosityBlocks() const noexcept final {
0050         return WantsGlobalLuminosityBlockTransitions<T...>::value;
0051       }
0052 
0053       SerialTaskQueue* globalRunsQueue() final { return globalRunsQueue_.queue(); }
0054       SerialTaskQueue* globalLuminosityBlocksQueue() final { return globalLuminosityBlocksQueue_.queue(); }
0055 
0056       // ---------- static member functions --------------------
0057 
0058       // ---------- member functions ---------------------------
0059 
0060     private:
0061       // ---------- member data --------------------------------
0062       impl::OptionalSerialTaskQueueHolder<WantsSerialGlobalRunTransitions<T...>::value> globalRunsQueue_;
0063       impl::OptionalSerialTaskQueueHolder<WantsSerialGlobalLuminosityBlockTransitions<T...>::value>
0064           globalLuminosityBlocksQueue_;
0065     };
0066   }  // namespace one
0067 }  // namespace edm
0068 
0069 #endif