00001 #ifndef FWCore_Framework_EDLooper_h 00002 #define FWCore_Framework_EDLooper_h 00003 // -*- C++ -*- 00004 // 00005 // Package: Framework 00006 // Module: EDLooper 00007 // 00012 // 00013 // Author: Valentin Kuznetsov 00014 // Created: Wed Jul 5 11:42:17 EDT 2006 00015 // $Id: EDLooper.h,v 1.8 2008/03/19 22:02:36 wdd Exp $ 00016 // 00017 00018 #include "FWCore/Framework/interface/Frameworkfwd.h" 00019 00020 #include <set> 00021 00022 namespace edm { 00023 namespace eventsetup { 00024 class EventSetupRecordKey; 00025 class EventSetupProvider; 00026 } 00027 class ActionTable; 00028 00029 class EDLooper 00030 { 00031 public: 00032 00033 enum Status {kContinue, kStop}; 00034 00035 EDLooper(); 00036 virtual ~EDLooper(); 00037 00038 void doStartingNewLoop(); 00039 Status doDuringLoop(edm::EventPrincipal& eventPrincipal, const edm::EventSetup& es); 00040 Status doEndOfLoop(const edm::EventSetup& es); 00041 void prepareForNextLoop(eventsetup::EventSetupProvider* esp); 00042 00043 virtual void beginOfJob(const edm::EventSetup&); 00044 virtual void startingNewLoop(unsigned int ) = 0; 00045 virtual Status duringLoop(const edm::Event&, const edm::EventSetup&) = 0; 00046 virtual Status endOfLoop(const edm::EventSetup&, unsigned int iCounter) = 0; 00047 virtual void endOfJob(); 00048 00049 void setActionTable(ActionTable* actionTable) { act_table_ = actionTable; } 00050 00051 virtual std::set<eventsetup::EventSetupRecordKey> modifyingRecords() const; 00052 00053 private: 00054 00055 EDLooper( const EDLooper& ); // stop default 00056 const EDLooper& operator=( const EDLooper& ); // stop default 00057 00058 unsigned int iCounter_; 00059 ActionTable* act_table_; 00060 }; 00061 } 00062 00063 #endif