Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-17 01:30:19

0001 #ifndef FWCore_Framework_ScheduleItems_h
0002 #define FWCore_Framework_ScheduleItems_h
0003 
0004 #include "FWCore/Framework/interface/Schedule.h"
0005 #include "FWCore/Common/interface/FWCoreCommonFwd.h"
0006 #include "FWCore/ServiceRegistry/interface/ServiceLegacy.h"
0007 #include "FWCore/ServiceRegistry/interface/ServiceToken.h"
0008 #include "FWCore/Utilities/interface/get_underlying_safe.h"
0009 #include "FWCore/Utilities/interface/propagate_const.h"
0010 
0011 #include <memory>
0012 #include <vector>
0013 
0014 namespace edm {
0015   class ExceptionToActionTable;
0016   class ActivityRegistry;
0017   class BranchIDListHelper;
0018   class ThinnedAssociationsHelper;
0019   struct CommonParams;
0020   class ParameterSet;
0021   class ProcessConfiguration;
0022   class ProcessContext;
0023   class ProductRegistry;
0024   class SignallingProductRegistryFiller;
0025   class StreamID;
0026   class PreallocationConfiguration;
0027   class ModuleTypeResolverMaker;
0028   namespace service {
0029     class TriggerNamesService;
0030   }
0031 
0032   struct ScheduleItems {
0033     ScheduleItems();
0034 
0035     ScheduleItems(ScheduleItems const&) = delete;             // Disallow copying and moving
0036     ScheduleItems& operator=(ScheduleItems const&) = delete;  // Disallow copying and moving
0037 
0038     ServiceToken initServices(std::vector<ParameterSet>& servicePSets,
0039                               ParameterSet& processPSet,
0040                               ServiceToken const& iToken,
0041                               serviceregistry::ServiceLegacy iLegacy);
0042 
0043     ServiceToken addTNS(ParameterSet const& parameterSet, ServiceToken const& token);
0044 
0045     std::shared_ptr<CommonParams> initMisc(ParameterSet& parameterSet);
0046 
0047     std::unique_ptr<Schedule> initSchedule(ParameterSet& parameterSet,
0048                                            PreallocationConfiguration const& iAllocConfig,
0049                                            ProcessContext const*,
0050                                            ModuleTypeResolverMaker const*,
0051                                            ProcessBlockHelperBase& processBlockHelper);
0052 
0053     class MadeModules {
0054       friend struct ScheduleItems;
0055       explicit MadeModules(std::unique_ptr<Schedule> iSched) : m_schedule(std::move(iSched)) {}
0056 
0057       std::unique_ptr<Schedule> m_schedule;
0058 
0059     public:
0060       MadeModules() = delete;
0061     };
0062 
0063     MadeModules initModules(ParameterSet& parameterSet,
0064                             service::TriggerNamesService const& tns,
0065                             PreallocationConfiguration const& iAllocConfig,
0066                             ProcessContext const*,
0067                             ModuleTypeResolverMaker const* typeResolverMaker);
0068     std::unique_ptr<Schedule> finishSchedule(MadeModules,
0069                                              ParameterSet& parameterSet,
0070                                              service::TriggerNamesService const& tns,
0071                                              PreallocationConfiguration const& iAllocConfig,
0072                                              ProcessContext const*,
0073                                              ProcessBlockHelperBase& processBlockHelper);
0074 
0075     std::shared_ptr<SignallingProductRegistryFiller const> preg() const { return get_underlying_safe(preg_); }
0076     std::shared_ptr<SignallingProductRegistryFiller>& preg() { return get_underlying_safe(preg_); }
0077     std::shared_ptr<BranchIDListHelper const> branchIDListHelper() const {
0078       return get_underlying_safe(branchIDListHelper_);
0079     }
0080     std::shared_ptr<BranchIDListHelper>& branchIDListHelper() { return get_underlying_safe(branchIDListHelper_); }
0081     std::shared_ptr<ThinnedAssociationsHelper const> thinnedAssociationsHelper() const {
0082       return get_underlying_safe(thinnedAssociationsHelper_);
0083     }
0084     std::shared_ptr<ThinnedAssociationsHelper>& thinnedAssociationsHelper() {
0085       return get_underlying_safe(thinnedAssociationsHelper_);
0086     }
0087     std::shared_ptr<ProcessConfiguration const> processConfiguration() const {
0088       return get_underlying_safe(processConfiguration_);
0089     }
0090     std::shared_ptr<ProcessConfiguration>& processConfiguration() { return get_underlying_safe(processConfiguration_); }
0091 
0092     std::shared_ptr<ActivityRegistry> actReg_;  // We do not use propagate_const because the registry itself is mutable.
0093     edm::propagate_const<std::shared_ptr<SignallingProductRegistryFiller>> preg_;
0094     edm::propagate_const<std::shared_ptr<BranchIDListHelper>> branchIDListHelper_;
0095     edm::propagate_const<std::shared_ptr<ThinnedAssociationsHelper>> thinnedAssociationsHelper_;
0096     std::unique_ptr<ExceptionToActionTable const> act_table_;
0097     edm::propagate_const<std::shared_ptr<ProcessConfiguration>> processConfiguration_;
0098   };
0099 }  // namespace edm
0100 #endif