CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/FWCore/ServiceRegistry/interface/ActivityRegistry.h

Go to the documentation of this file.
00001 #ifndef FWCore_ServiceRegistry_ActivityRegistry_h
00002 #define FWCore_ServiceRegistry_ActivityRegistry_h
00003 // -*- C++ -*-
00004 //
00005 // Package:     ServiceRegistry
00006 // Class  :     ActivityRegistry
00007 // 
00016 //
00017 // Original Author:  Chris Jones
00018 //         Created:  Mon Sep  5 19:53:09 EDT 2005
00019 //
00020 
00021 // system include files
00022 //#include "boost/signal.hpp"
00023 #include "sigc++/signal.h"
00024 #include "boost/bind.hpp"
00025 #include "boost/mem_fn.hpp"
00026 #include "boost/utility.hpp"
00027 
00028 // user include files
00029 
00030 #define AR_WATCH_USING_METHOD_0(method) template<class TClass, class TMethod> void method (TClass* iObject, TMethod iMethod) { method (boost::bind(boost::mem_fn(iMethod), iObject)); }
00031 #define AR_WATCH_USING_METHOD_1(method) template<class TClass, class TMethod> void method (TClass* iObject, TMethod iMethod) { method (boost::bind(boost::mem_fn(iMethod), iObject, _1)); }
00032 #define AR_WATCH_USING_METHOD_2(method) template<class TClass, class TMethod> void method (TClass* iObject, TMethod iMethod) { method (boost::bind(boost::mem_fn(iMethod), iObject, _1, _2)); }
00033 // forward declarations
00034 namespace edm {
00035    class EventID;
00036    class LuminosityBlockID;
00037    class RunID;
00038    class Timestamp;
00039    class ModuleDescription;
00040    class Event;
00041    class LuminosityBlock;
00042    class Run;
00043    class EventSetup;
00044    class HLTPathStatus;
00045    
00046    class ActivityRegistry : private boost::noncopyable {
00047    public:
00048       ActivityRegistry() {}
00049 
00050       // ---------- signals ------------------------------------
00051       typedef sigc::signal<void> PostBeginJob;
00053       PostBeginJob postBeginJobSignal_;
00055       void watchPostBeginJob(PostBeginJob::slot_type const& iSlot) {
00056          postBeginJobSignal_.connect(iSlot);
00057       }
00058       AR_WATCH_USING_METHOD_0(watchPostBeginJob)
00059 
00060       typedef sigc::signal<void> PostEndJob;
00062       PostEndJob postEndJobSignal_;
00063       void watchPostEndJob(PostEndJob::slot_type const& iSlot) {
00064          PostEndJob::slot_list_type sl = postEndJobSignal_.slots();
00065          sl.push_front(iSlot);
00066       }
00067       AR_WATCH_USING_METHOD_0(watchPostEndJob)
00068 
00069       typedef sigc::signal<void> JobFailure;
00072       JobFailure    jobFailureSignal_;
00074       void watchJobFailure(JobFailure::slot_type const& iSlot) {
00075          JobFailure::slot_list_type sl = jobFailureSignal_.slots();
00076          sl.push_front(iSlot);
00077       }
00078       AR_WATCH_USING_METHOD_0(watchJobFailure)
00079       
00080       
00081       typedef sigc::signal<void> PreSource;
00082       PreSource preSourceSignal_;
00083       void watchPreSource(PreSource::slot_type const& iSlot) {
00084         preSourceSignal_.connect(iSlot);
00085       }
00086       AR_WATCH_USING_METHOD_0(watchPreSource)
00087 
00088       
00089       typedef sigc::signal<void> PostSource;
00090       PostSource postSourceSignal_;
00091       void watchPostSource(PostSource::slot_type const& iSlot) {
00092          PostSource::slot_list_type sl = postSourceSignal_.slots();
00093          sl.push_front(iSlot);
00094       }
00095       AR_WATCH_USING_METHOD_0(watchPostSource)
00096         
00097       
00098       typedef sigc::signal<void> PreSourceLumi;
00099       PreSourceLumi preSourceLumiSignal_;
00100       void watchPreSourceLumi(PreSourceLumi::slot_type const& iSlot) {
00101         preSourceLumiSignal_.connect(iSlot);
00102       }
00103       AR_WATCH_USING_METHOD_0(watchPreSourceLumi)
00104 
00105       
00106       typedef sigc::signal<void> PostSourceLumi;
00107       PostSourceLumi postSourceLumiSignal_;
00108       void watchPostSourceLumi(PostSourceLumi::slot_type const& iSlot) {
00109          PostSourceLumi::slot_list_type sl = postSourceLumiSignal_.slots();
00110          sl.push_front(iSlot);
00111       }
00112       AR_WATCH_USING_METHOD_0(watchPostSourceLumi)
00113         
00114       
00115       typedef sigc::signal<void> PreSourceRun;
00116       PreSourceRun preSourceRunSignal_;
00117       void watchPreSourceRun(PreSourceRun::slot_type const& iSlot) {
00118         preSourceRunSignal_.connect(iSlot);
00119       }
00120       AR_WATCH_USING_METHOD_0(watchPreSourceRun)
00121 
00122       
00123       typedef sigc::signal<void> PostSourceRun;
00124       PostSourceRun postSourceRunSignal_;
00125       void watchPostSourceRun(PostSourceRun::slot_type const& iSlot) {
00126          PostSourceRun::slot_list_type sl = postSourceRunSignal_.slots();
00127          sl.push_front(iSlot);
00128       }
00129       AR_WATCH_USING_METHOD_0(watchPostSourceRun)
00130         
00131       
00132       typedef sigc::signal<void> PreOpenFile;
00133       PreOpenFile preOpenFileSignal_;
00134       void watchPreOpenFile(PreOpenFile::slot_type const& iSlot) {
00135         preOpenFileSignal_.connect(iSlot);
00136       }
00137       AR_WATCH_USING_METHOD_0(watchPreOpenFile)
00138 
00139       
00140       typedef sigc::signal<void> PostOpenFile;
00141       PostOpenFile postOpenFileSignal_;
00142       void watchPostOpenFile(PostOpenFile::slot_type const& iSlot) {
00143          PostOpenFile::slot_list_type sl = postOpenFileSignal_.slots();
00144          sl.push_front(iSlot);
00145       }
00146       AR_WATCH_USING_METHOD_0(watchPostOpenFile)
00147         
00148       
00149       typedef sigc::signal<void> PreCloseFile;
00150       PreCloseFile preCloseFileSignal_;
00151       void watchPreCloseFile(PreCloseFile::slot_type const& iSlot) {
00152         preCloseFileSignal_.connect(iSlot);
00153       }
00154       AR_WATCH_USING_METHOD_0(watchPreCloseFile)
00155 
00156       
00157       typedef sigc::signal<void> PostCloseFile;
00158       PostCloseFile postCloseFileSignal_;
00159       void watchPostCloseFile(PostCloseFile::slot_type const& iSlot) {
00160          PostCloseFile::slot_list_type sl = postCloseFileSignal_.slots();
00161          sl.push_front(iSlot);
00162       }
00163       AR_WATCH_USING_METHOD_0(watchPostCloseFile)
00164         
00165       typedef sigc::signal<void, EventID const&, Timestamp const&> PreProcessEvent;
00167       PreProcessEvent preProcessEventSignal_;
00168       void watchPreProcessEvent(PreProcessEvent::slot_type const& iSlot) {
00169          preProcessEventSignal_.connect(iSlot);
00170       }
00171       AR_WATCH_USING_METHOD_2(watchPreProcessEvent)
00172       
00173       typedef sigc::signal<void, Event const&, EventSetup const&> PostProcessEvent;
00175       PostProcessEvent postProcessEventSignal_;
00176       void watchPostProcessEvent(PostProcessEvent::slot_type const& iSlot) {
00177          PostProcessEvent::slot_list_type sl = postProcessEventSignal_.slots();
00178          sl.push_front(iSlot);
00179       }
00180       AR_WATCH_USING_METHOD_2(watchPostProcessEvent)
00181 
00182       typedef sigc::signal<void, RunID const&, Timestamp const&> PreBeginRun;
00184       PreBeginRun preBeginRunSignal_;
00185       void watchPreBeginRun(PreBeginRun::slot_type const& iSlot) {
00186          preBeginRunSignal_.connect(iSlot);
00187       }
00188       AR_WATCH_USING_METHOD_2(watchPreBeginRun)
00189       
00190       typedef sigc::signal<void, Run const&, EventSetup const&> PostBeginRun;
00192       PostBeginRun postBeginRunSignal_;
00193       void watchPostBeginRun(PostBeginRun::slot_type const& iSlot) {
00194          PostBeginRun::slot_list_type sl = postBeginRunSignal_.slots();
00195          sl.push_front(iSlot);
00196       }
00197       AR_WATCH_USING_METHOD_2(watchPostBeginRun)
00198 
00199       typedef sigc::signal<void, RunID const&, Timestamp const&> PreEndRun;
00201       PreEndRun preEndRunSignal_;
00202       void watchPreEndRun(PreEndRun::slot_type const& iSlot) {
00203          preEndRunSignal_.connect(iSlot);
00204       }
00205       AR_WATCH_USING_METHOD_2(watchPreEndRun)
00206       
00207       typedef sigc::signal<void, Run const&, EventSetup const&> PostEndRun;
00209       PostEndRun postEndRunSignal_;
00210       void watchPostEndRun(PostEndRun::slot_type const& iSlot) {
00211          PostEndRun::slot_list_type sl = postEndRunSignal_.slots();
00212          sl.push_front(iSlot);
00213       }
00214       AR_WATCH_USING_METHOD_2(watchPostEndRun)
00215 
00216       typedef sigc::signal<void, LuminosityBlockID const&, Timestamp const&> PreBeginLumi;
00218       PreBeginLumi preBeginLumiSignal_;
00219       void watchPreBeginLumi(PreBeginLumi::slot_type const& iSlot) {
00220          preBeginLumiSignal_.connect(iSlot);
00221       }
00222       AR_WATCH_USING_METHOD_2(watchPreBeginLumi)
00223       
00224       typedef sigc::signal<void, LuminosityBlock const&, EventSetup const&> PostBeginLumi;
00226       PostBeginLumi postBeginLumiSignal_;
00227       void watchPostBeginLumi(PostBeginLumi::slot_type const& iSlot) {
00228          PostBeginLumi::slot_list_type sl = postBeginLumiSignal_.slots();
00229          sl.push_front(iSlot);
00230       }
00231       AR_WATCH_USING_METHOD_2(watchPostBeginLumi)
00232 
00233       typedef sigc::signal<void, LuminosityBlockID const&, Timestamp const&> PreEndLumi;
00235       PreEndLumi preEndLumiSignal_;
00236       void watchPreEndLumi(PreEndLumi::slot_type const& iSlot) {
00237          preEndLumiSignal_.connect(iSlot);
00238       }
00239       AR_WATCH_USING_METHOD_2(watchPreEndLumi)
00240       
00241       typedef sigc::signal<void, LuminosityBlock const&, EventSetup const&> PostEndLumi;
00243       PostEndLumi postEndLumiSignal_;
00244       void watchPostEndLumi(PostEndLumi::slot_type const& iSlot) {
00245          PostEndLumi::slot_list_type sl = postEndLumiSignal_.slots();
00246          sl.push_front(iSlot);
00247       }
00248       AR_WATCH_USING_METHOD_2(watchPostEndLumi)
00249 
00250       
00251       typedef sigc::signal<void, std::string const&> PreProcessPath;
00252       PreProcessPath preProcessPathSignal_;
00253       void watchPreProcessPath(PreProcessPath::slot_type const& iSlot) {
00254         preProcessPathSignal_.connect(iSlot);
00255       }
00256       AR_WATCH_USING_METHOD_1(watchPreProcessPath)
00257         
00258       
00259       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostProcessPath;
00260       PostProcessPath postProcessPathSignal_;
00261       void watchPostProcessPath(PostProcessPath::slot_type const& iSlot) {
00262          PostProcessPath::slot_list_type sl = postProcessPathSignal_.slots();
00263          sl.push_front(iSlot);
00264       }  
00265       AR_WATCH_USING_METHOD_2(watchPostProcessPath)
00266         
00267       
00268       typedef sigc::signal<void, std::string const&> PrePathBeginRun;
00269       PrePathBeginRun prePathBeginRunSignal_;
00270       void watchPrePathBeginRun(PrePathBeginRun::slot_type const& iSlot) {
00271         prePathBeginRunSignal_.connect(iSlot);
00272       }
00273       AR_WATCH_USING_METHOD_1(watchPrePathBeginRun)
00274         
00275       
00276       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostPathBeginRun;
00277       PostPathBeginRun postPathBeginRunSignal_;
00278       void watchPostPathBeginRun(PostPathBeginRun::slot_type const& iSlot) {
00279          PostPathBeginRun::slot_list_type sl = postPathBeginRunSignal_.slots();
00280          sl.push_front(iSlot);
00281       }  
00282       AR_WATCH_USING_METHOD_2(watchPostPathBeginRun)
00283         
00284       
00285       typedef sigc::signal<void, std::string const&> PrePathEndRun;
00286       PrePathEndRun prePathEndRunSignal_;
00287       void watchPrePathEndRun(PrePathEndRun::slot_type const& iSlot) {
00288         prePathEndRunSignal_.connect(iSlot);
00289       }
00290       AR_WATCH_USING_METHOD_1(watchPrePathEndRun)
00291         
00292       
00293       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostPathEndRun;
00294       PostPathEndRun postPathEndRunSignal_;
00295       void watchPostPathEndRun(PostPathEndRun::slot_type const& iSlot) {
00296          PostPathEndRun::slot_list_type sl = postPathEndRunSignal_.slots();
00297          sl.push_front(iSlot);
00298       }  
00299       AR_WATCH_USING_METHOD_2(watchPostPathEndRun)
00300         
00301       
00302       typedef sigc::signal<void, std::string const&> PrePathBeginLumi;
00303       PrePathBeginLumi prePathBeginLumiSignal_;
00304       void watchPrePathBeginLumi(PrePathBeginLumi::slot_type const& iSlot) {
00305         prePathBeginLumiSignal_.connect(iSlot);
00306       }
00307       AR_WATCH_USING_METHOD_1(watchPrePathBeginLumi)
00308         
00309       
00310       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostPathBeginLumi;
00311       PostPathBeginLumi postPathBeginLumiSignal_;
00312       void watchPostPathBeginLumi(PostPathBeginLumi::slot_type const& iSlot) {
00313          PostPathBeginLumi::slot_list_type sl = postPathBeginLumiSignal_.slots();
00314          sl.push_front(iSlot);
00315       }  
00316       AR_WATCH_USING_METHOD_2(watchPostPathBeginLumi)
00317         
00318       
00319       typedef sigc::signal<void, std::string const&> PrePathEndLumi;
00320       PrePathEndLumi prePathEndLumiSignal_;
00321       void watchPrePathEndLumi(PrePathEndLumi::slot_type const& iSlot) {
00322         prePathEndLumiSignal_.connect(iSlot);
00323       }
00324       AR_WATCH_USING_METHOD_1(watchPrePathEndLumi)
00325         
00326       
00327       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostPathEndLumi;
00328       PostPathEndLumi postPathEndLumiSignal_;
00329       void watchPostPathEndLumi(PostPathEndLumi::slot_type const& iSlot) {
00330          PostPathEndLumi::slot_list_type sl = postPathEndLumiSignal_.slots();
00331          sl.push_front(iSlot);
00332       }  
00333       AR_WATCH_USING_METHOD_2(watchPostPathEndLumi)
00334 
00335         /* Note M:
00336            Concerning use of address of module descriptor
00337            during functions called before/after module or source construction:
00338                Unlike the case in the Run, Lumi, and Event loops,
00339                the Module descriptor (often passed by pointer or reference
00340                as an argument named desc) in the construction phase is NOT
00341                at some permanent fixed address during the construction phase.  
00342                Therefore, any optimization of caching the module name keying 
00343                off of address of the descriptor will NOT be valid during 
00344                such functions.  mf / cj 9/11/09
00345         */
00346         
00347       
00348       typedef sigc::signal<void, ModuleDescription const&> PreModuleConstruction;
00349       PreModuleConstruction preModuleConstructionSignal_;
00350       void watchPreModuleConstruction(PreModuleConstruction::slot_type const& iSlot) {
00351          preModuleConstructionSignal_.connect(iSlot);
00352       }
00353       // WARNING - ModuleDescription is not in fixed place.  See note M above.
00354       AR_WATCH_USING_METHOD_1(watchPreModuleConstruction)
00355          
00356       
00357       typedef sigc::signal<void, ModuleDescription const&> PostModuleConstruction;
00358       PostModuleConstruction postModuleConstructionSignal_;
00359       void watchPostModuleConstruction(PostModuleConstruction::slot_type const& iSlot) {
00360          PostModuleConstruction::slot_list_type sl = postModuleConstructionSignal_.slots();
00361          sl.push_front(iSlot);
00362       }
00363       // WARNING - ModuleDescription is not in fixed place.  See note M above.
00364       AR_WATCH_USING_METHOD_1(watchPostModuleConstruction)
00365 
00366       
00367       typedef sigc::signal<void, ModuleDescription const&> PreModuleBeginJob;
00368       PreModuleBeginJob preModuleBeginJobSignal_;
00369       void watchPreModuleBeginJob(PreModuleBeginJob::slot_type const& iSlot) {
00370         preModuleBeginJobSignal_.connect(iSlot);
00371       }
00372       AR_WATCH_USING_METHOD_1(watchPreModuleBeginJob)
00373         
00374       
00375       typedef sigc::signal<void, ModuleDescription const&> PostModuleBeginJob;
00376       PostModuleBeginJob postModuleBeginJobSignal_;
00377       void watchPostModuleBeginJob(PostModuleBeginJob::slot_type const& iSlot) {
00378          PostModuleBeginJob::slot_list_type sl = postModuleBeginJobSignal_.slots();
00379          sl.push_front(iSlot);
00380       }
00381       AR_WATCH_USING_METHOD_1(watchPostModuleBeginJob)
00382         
00383       
00384       typedef sigc::signal<void, ModuleDescription const&> PreModuleEndJob;
00385       PreModuleEndJob preModuleEndJobSignal_;
00386       void watchPreModuleEndJob(PreModuleEndJob::slot_type const& iSlot) {
00387         preModuleEndJobSignal_.connect(iSlot);
00388       }
00389       AR_WATCH_USING_METHOD_1(watchPreModuleEndJob)
00390         
00391       
00392       typedef sigc::signal<void, ModuleDescription const&> PostModuleEndJob;
00393       PostModuleEndJob postModuleEndJobSignal_;
00394       void watchPostModuleEndJob(PostModuleEndJob::slot_type const& iSlot) {
00395          PostModuleEndJob::slot_list_type sl = postModuleEndJobSignal_.slots();
00396          sl.push_front(iSlot);
00397       }
00398       AR_WATCH_USING_METHOD_1(watchPostModuleEndJob)
00399         
00400       
00401       typedef sigc::signal<void, ModuleDescription const&> PreModule;
00402       PreModule preModuleSignal_;
00403       void watchPreModule(PreModule::slot_type const& iSlot) {
00404          preModuleSignal_.connect(iSlot);
00405       }
00406       AR_WATCH_USING_METHOD_1(watchPreModule)
00407          
00408       
00409       typedef sigc::signal<void, ModuleDescription const&> PostModule;
00410       PostModule postModuleSignal_;
00411       void watchPostModule(PostModule::slot_type const& iSlot) {
00412          PostModule::slot_list_type sl = postModuleSignal_.slots();
00413          sl.push_front(iSlot);
00414       }
00415       AR_WATCH_USING_METHOD_1(watchPostModule)
00416          
00417       
00418       typedef sigc::signal<void, ModuleDescription const&> PreModuleBeginRun;
00419       PreModuleBeginRun preModuleBeginRunSignal_;
00420       void watchPreModuleBeginRun(PreModuleBeginRun::slot_type const& iSlot) {
00421          preModuleBeginRunSignal_.connect(iSlot);
00422       }
00423       AR_WATCH_USING_METHOD_1(watchPreModuleBeginRun)
00424          
00425       
00426       typedef sigc::signal<void, ModuleDescription const&> PostModuleBeginRun;
00427       PostModuleBeginRun postModuleBeginRunSignal_;
00428       void watchPostModuleBeginRun(PostModuleBeginRun::slot_type const& iSlot) {
00429          PostModuleBeginRun::slot_list_type sl = postModuleBeginRunSignal_.slots();
00430          sl.push_front(iSlot);
00431       }
00432       AR_WATCH_USING_METHOD_1(watchPostModuleBeginRun)
00433          
00434       
00435       typedef sigc::signal<void, ModuleDescription const&> PreModuleEndRun;
00436       PreModuleEndRun preModuleEndRunSignal_;
00437       void watchPreModuleEndRun(PreModuleEndRun::slot_type const& iSlot) {
00438          preModuleEndRunSignal_.connect(iSlot);
00439       }
00440       AR_WATCH_USING_METHOD_1(watchPreModuleEndRun)
00441          
00442       
00443       typedef sigc::signal<void, ModuleDescription const&> PostModuleEndRun;
00444       PostModuleEndRun postModuleEndRunSignal_;
00445       void watchPostModuleEndRun(PostModuleEndRun::slot_type const& iSlot) {
00446          PostModuleEndRun::slot_list_type sl = postModuleEndRunSignal_.slots();
00447          sl.push_front(iSlot);
00448       }
00449       AR_WATCH_USING_METHOD_1(watchPostModuleEndRun)
00450          
00451       
00452       typedef sigc::signal<void, ModuleDescription const&> PreModuleBeginLumi;
00453       PreModuleBeginLumi preModuleBeginLumiSignal_;
00454       void watchPreModuleBeginLumi(PreModuleBeginLumi::slot_type const& iSlot) {
00455          preModuleBeginLumiSignal_.connect(iSlot);
00456       }
00457       AR_WATCH_USING_METHOD_1(watchPreModuleBeginLumi)
00458          
00459       
00460       typedef sigc::signal<void, ModuleDescription const&> PostModuleBeginLumi;
00461       PostModuleBeginLumi postModuleBeginLumiSignal_;
00462       void watchPostModuleBeginLumi(PostModuleBeginLumi::slot_type const& iSlot) {
00463          PostModuleBeginLumi::slot_list_type sl = postModuleBeginLumiSignal_.slots();
00464          sl.push_front(iSlot);
00465       }
00466       AR_WATCH_USING_METHOD_1(watchPostModuleBeginLumi)
00467          
00468       
00469       typedef sigc::signal<void, ModuleDescription const&> PreModuleEndLumi;
00470       PreModuleEndLumi preModuleEndLumiSignal_;
00471       void watchPreModuleEndLumi(PreModuleEndLumi::slot_type const& iSlot) {
00472          preModuleEndLumiSignal_.connect(iSlot);
00473       }
00474       AR_WATCH_USING_METHOD_1(watchPreModuleEndLumi)
00475          
00476       
00477       typedef sigc::signal<void, ModuleDescription const&> PostModuleEndLumi;
00478       PostModuleEndLumi postModuleEndLumiSignal_;
00479       void watchPostModuleEndLumi(PostModuleEndLumi::slot_type const& iSlot) {
00480          PostModuleEndLumi::slot_list_type sl = postModuleEndLumiSignal_.slots();
00481          sl.push_front(iSlot);
00482       }
00483       AR_WATCH_USING_METHOD_1(watchPostModuleEndLumi)
00484          
00485       
00486       typedef sigc::signal<void, ModuleDescription const&> PreSourceConstruction;
00487       PreSourceConstruction preSourceConstructionSignal_;
00488       void watchPreSourceConstruction(PreSourceConstruction::slot_type const& iSlot) {
00489         preSourceConstructionSignal_.connect(iSlot);
00490       }
00491       // WARNING - ModuleDescription is not in fixed place.  See note M above.
00492       AR_WATCH_USING_METHOD_1(watchPreSourceConstruction)
00493         
00494       
00495       typedef sigc::signal<void, ModuleDescription const&> PostSourceConstruction;
00496       PostSourceConstruction postSourceConstructionSignal_;
00497       void watchPostSourceConstruction(PostSourceConstruction::slot_type const& iSlot) {
00498          PostSourceConstruction::slot_list_type sl = postSourceConstructionSignal_.slots();
00499          sl.push_front(iSlot);
00500       }
00501       // WARNING - ModuleDescription is not in fixed place.  See note M above.
00502       AR_WATCH_USING_METHOD_1(watchPostSourceConstruction)
00503 
00504       
00505       typedef sigc::signal<void> PreForkReleaseResources;
00506       PreForkReleaseResources preForkReleaseResourcesSignal_;
00507       void watchPreForkReleaseResources(PreForkReleaseResources::slot_type const& iSlot) {
00508          PreForkReleaseResources::slot_list_type sl = preForkReleaseResourcesSignal_.slots();
00509          sl.push_front(iSlot);
00510       }
00511       AR_WATCH_USING_METHOD_0(watchPreForkReleaseResources)
00512       
00513       
00514       typedef sigc::signal<void, unsigned int, unsigned int> PostForkReacquireResources;
00515       PostForkReacquireResources postForkReacquireResourcesSignal_;
00516       void watchPostForkReacquireResources(PostForkReacquireResources::slot_type const& iSlot) {
00517          PostForkReacquireResources::slot_list_type sl = postForkReacquireResourcesSignal_.slots();
00518          sl.push_front(iSlot);
00519       }
00520       AR_WATCH_USING_METHOD_2(watchPostForkReacquireResources)
00521       
00522       // ---------- member functions ---------------------------
00523       
00524       
00525       void connect(ActivityRegistry& iOther);
00526 
00529       void connectToSubProcess(ActivityRegistry& iOther);
00530       
00536       void copySlotsFrom(ActivityRegistry& iOther);
00537       
00538    private:
00539       // forwards subprocess independent signals to slots connected to iOther
00540       void connectGlobals(ActivityRegistry& iOther);
00541 
00542       // forwards subprocess dependent signals to slots connected to iOther
00543       void connectLocals(ActivityRegistry& iOther);
00544    };
00545 }
00546 #undef AR_WATCH_USING_METHOD
00547 #endif