CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_1/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       //   Note this is only done for a primary file, not a secondary one.
00141       typedef sigc::signal<void> PostOpenFile;
00142       PostOpenFile postOpenFileSignal_;
00143       void watchPostOpenFile(PostOpenFile::slot_type const& iSlot) {
00144          PostOpenFile::slot_list_type sl = postOpenFileSignal_.slots();
00145          sl.push_front(iSlot);
00146       }
00147       AR_WATCH_USING_METHOD_0(watchPostOpenFile)
00148         
00149       
00150       //   First argument is the LFN of the file which is being closed.
00151       //   Second argument is false if fallback is used; true otherwise.
00152       typedef sigc::signal<void, std::string const&, bool> PreCloseFile;
00153       PreCloseFile preCloseFileSignal_;
00154       void watchPreCloseFile(PreCloseFile::slot_type const& iSlot) {
00155         preCloseFileSignal_.connect(iSlot);
00156       }
00157       AR_WATCH_USING_METHOD_2(watchPreCloseFile)
00158 
00159       
00160       typedef sigc::signal<void> PostCloseFile;
00161       PostCloseFile postCloseFileSignal_;
00162       void watchPostCloseFile(PostCloseFile::slot_type const& iSlot) {
00163          PostCloseFile::slot_list_type sl = postCloseFileSignal_.slots();
00164          sl.push_front(iSlot);
00165       }
00166       AR_WATCH_USING_METHOD_0(watchPostCloseFile)
00167         
00168       typedef sigc::signal<void, EventID const&, Timestamp const&> PreProcessEvent;
00170       PreProcessEvent preProcessEventSignal_;
00171       void watchPreProcessEvent(PreProcessEvent::slot_type const& iSlot) {
00172          preProcessEventSignal_.connect(iSlot);
00173       }
00174       AR_WATCH_USING_METHOD_2(watchPreProcessEvent)
00175       
00176       typedef sigc::signal<void, Event const&, EventSetup const&> PostProcessEvent;
00178       PostProcessEvent postProcessEventSignal_;
00179       void watchPostProcessEvent(PostProcessEvent::slot_type const& iSlot) {
00180          PostProcessEvent::slot_list_type sl = postProcessEventSignal_.slots();
00181          sl.push_front(iSlot);
00182       }
00183       AR_WATCH_USING_METHOD_2(watchPostProcessEvent)
00184 
00185       typedef sigc::signal<void, RunID const&, Timestamp const&> PreBeginRun;
00187       PreBeginRun preBeginRunSignal_;
00188       void watchPreBeginRun(PreBeginRun::slot_type const& iSlot) {
00189          preBeginRunSignal_.connect(iSlot);
00190       }
00191       AR_WATCH_USING_METHOD_2(watchPreBeginRun)
00192       
00193       typedef sigc::signal<void, Run const&, EventSetup const&> PostBeginRun;
00195       PostBeginRun postBeginRunSignal_;
00196       void watchPostBeginRun(PostBeginRun::slot_type const& iSlot) {
00197          PostBeginRun::slot_list_type sl = postBeginRunSignal_.slots();
00198          sl.push_front(iSlot);
00199       }
00200       AR_WATCH_USING_METHOD_2(watchPostBeginRun)
00201 
00202       typedef sigc::signal<void, RunID const&, Timestamp const&> PreEndRun;
00204       PreEndRun preEndRunSignal_;
00205       void watchPreEndRun(PreEndRun::slot_type const& iSlot) {
00206          preEndRunSignal_.connect(iSlot);
00207       }
00208       AR_WATCH_USING_METHOD_2(watchPreEndRun)
00209       
00210       typedef sigc::signal<void, Run const&, EventSetup const&> PostEndRun;
00212       PostEndRun postEndRunSignal_;
00213       void watchPostEndRun(PostEndRun::slot_type const& iSlot) {
00214          PostEndRun::slot_list_type sl = postEndRunSignal_.slots();
00215          sl.push_front(iSlot);
00216       }
00217       AR_WATCH_USING_METHOD_2(watchPostEndRun)
00218 
00219       typedef sigc::signal<void, LuminosityBlockID const&, Timestamp const&> PreBeginLumi;
00221       PreBeginLumi preBeginLumiSignal_;
00222       void watchPreBeginLumi(PreBeginLumi::slot_type const& iSlot) {
00223          preBeginLumiSignal_.connect(iSlot);
00224       }
00225       AR_WATCH_USING_METHOD_2(watchPreBeginLumi)
00226       
00227       typedef sigc::signal<void, LuminosityBlock const&, EventSetup const&> PostBeginLumi;
00229       PostBeginLumi postBeginLumiSignal_;
00230       void watchPostBeginLumi(PostBeginLumi::slot_type const& iSlot) {
00231          PostBeginLumi::slot_list_type sl = postBeginLumiSignal_.slots();
00232          sl.push_front(iSlot);
00233       }
00234       AR_WATCH_USING_METHOD_2(watchPostBeginLumi)
00235 
00236       typedef sigc::signal<void, LuminosityBlockID const&, Timestamp const&> PreEndLumi;
00238       PreEndLumi preEndLumiSignal_;
00239       void watchPreEndLumi(PreEndLumi::slot_type const& iSlot) {
00240          preEndLumiSignal_.connect(iSlot);
00241       }
00242       AR_WATCH_USING_METHOD_2(watchPreEndLumi)
00243       
00244       typedef sigc::signal<void, LuminosityBlock const&, EventSetup const&> PostEndLumi;
00246       PostEndLumi postEndLumiSignal_;
00247       void watchPostEndLumi(PostEndLumi::slot_type const& iSlot) {
00248          PostEndLumi::slot_list_type sl = postEndLumiSignal_.slots();
00249          sl.push_front(iSlot);
00250       }
00251       AR_WATCH_USING_METHOD_2(watchPostEndLumi)
00252 
00253       
00254       typedef sigc::signal<void, std::string const&> PreProcessPath;
00255       PreProcessPath preProcessPathSignal_;
00256       void watchPreProcessPath(PreProcessPath::slot_type const& iSlot) {
00257         preProcessPathSignal_.connect(iSlot);
00258       }
00259       AR_WATCH_USING_METHOD_1(watchPreProcessPath)
00260         
00261       
00262       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostProcessPath;
00263       PostProcessPath postProcessPathSignal_;
00264       void watchPostProcessPath(PostProcessPath::slot_type const& iSlot) {
00265          PostProcessPath::slot_list_type sl = postProcessPathSignal_.slots();
00266          sl.push_front(iSlot);
00267       }  
00268       AR_WATCH_USING_METHOD_2(watchPostProcessPath)
00269         
00270       
00271       typedef sigc::signal<void, std::string const&> PrePathBeginRun;
00272       PrePathBeginRun prePathBeginRunSignal_;
00273       void watchPrePathBeginRun(PrePathBeginRun::slot_type const& iSlot) {
00274         prePathBeginRunSignal_.connect(iSlot);
00275       }
00276       AR_WATCH_USING_METHOD_1(watchPrePathBeginRun)
00277         
00278       
00279       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostPathBeginRun;
00280       PostPathBeginRun postPathBeginRunSignal_;
00281       void watchPostPathBeginRun(PostPathBeginRun::slot_type const& iSlot) {
00282          PostPathBeginRun::slot_list_type sl = postPathBeginRunSignal_.slots();
00283          sl.push_front(iSlot);
00284       }  
00285       AR_WATCH_USING_METHOD_2(watchPostPathBeginRun)
00286         
00287       
00288       typedef sigc::signal<void, std::string const&> PrePathEndRun;
00289       PrePathEndRun prePathEndRunSignal_;
00290       void watchPrePathEndRun(PrePathEndRun::slot_type const& iSlot) {
00291         prePathEndRunSignal_.connect(iSlot);
00292       }
00293       AR_WATCH_USING_METHOD_1(watchPrePathEndRun)
00294         
00295       
00296       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostPathEndRun;
00297       PostPathEndRun postPathEndRunSignal_;
00298       void watchPostPathEndRun(PostPathEndRun::slot_type const& iSlot) {
00299          PostPathEndRun::slot_list_type sl = postPathEndRunSignal_.slots();
00300          sl.push_front(iSlot);
00301       }  
00302       AR_WATCH_USING_METHOD_2(watchPostPathEndRun)
00303         
00304       
00305       typedef sigc::signal<void, std::string const&> PrePathBeginLumi;
00306       PrePathBeginLumi prePathBeginLumiSignal_;
00307       void watchPrePathBeginLumi(PrePathBeginLumi::slot_type const& iSlot) {
00308         prePathBeginLumiSignal_.connect(iSlot);
00309       }
00310       AR_WATCH_USING_METHOD_1(watchPrePathBeginLumi)
00311         
00312       
00313       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostPathBeginLumi;
00314       PostPathBeginLumi postPathBeginLumiSignal_;
00315       void watchPostPathBeginLumi(PostPathBeginLumi::slot_type const& iSlot) {
00316          PostPathBeginLumi::slot_list_type sl = postPathBeginLumiSignal_.slots();
00317          sl.push_front(iSlot);
00318       }  
00319       AR_WATCH_USING_METHOD_2(watchPostPathBeginLumi)
00320         
00321       
00322       typedef sigc::signal<void, std::string const&> PrePathEndLumi;
00323       PrePathEndLumi prePathEndLumiSignal_;
00324       void watchPrePathEndLumi(PrePathEndLumi::slot_type const& iSlot) {
00325         prePathEndLumiSignal_.connect(iSlot);
00326       }
00327       AR_WATCH_USING_METHOD_1(watchPrePathEndLumi)
00328         
00329       
00330       typedef sigc::signal<void, std::string const&, HLTPathStatus const&> PostPathEndLumi;
00331       PostPathEndLumi postPathEndLumiSignal_;
00332       void watchPostPathEndLumi(PostPathEndLumi::slot_type const& iSlot) {
00333          PostPathEndLumi::slot_list_type sl = postPathEndLumiSignal_.slots();
00334          sl.push_front(iSlot);
00335       }  
00336       AR_WATCH_USING_METHOD_2(watchPostPathEndLumi)
00337 
00338         /* Note M:
00339            Concerning use of address of module descriptor
00340            during functions called before/after module or source construction:
00341                Unlike the case in the Run, Lumi, and Event loops,
00342                the Module descriptor (often passed by pointer or reference
00343                as an argument named desc) in the construction phase is NOT
00344                at some permanent fixed address during the construction phase.  
00345                Therefore, any optimization of caching the module name keying 
00346                off of address of the descriptor will NOT be valid during 
00347                such functions.  mf / cj 9/11/09
00348         */
00349         
00350       
00351       typedef sigc::signal<void, ModuleDescription const&> PreModuleConstruction;
00352       PreModuleConstruction preModuleConstructionSignal_;
00353       void watchPreModuleConstruction(PreModuleConstruction::slot_type const& iSlot) {
00354          preModuleConstructionSignal_.connect(iSlot);
00355       }
00356       // WARNING - ModuleDescription is not in fixed place.  See note M above.
00357       AR_WATCH_USING_METHOD_1(watchPreModuleConstruction)
00358          
00359       
00360       typedef sigc::signal<void, ModuleDescription const&> PostModuleConstruction;
00361       PostModuleConstruction postModuleConstructionSignal_;
00362       void watchPostModuleConstruction(PostModuleConstruction::slot_type const& iSlot) {
00363          PostModuleConstruction::slot_list_type sl = postModuleConstructionSignal_.slots();
00364          sl.push_front(iSlot);
00365       }
00366       // WARNING - ModuleDescription is not in fixed place.  See note M above.
00367       AR_WATCH_USING_METHOD_1(watchPostModuleConstruction)
00368 
00369       
00370       typedef sigc::signal<void, ModuleDescription const&> PreModuleBeginJob;
00371       PreModuleBeginJob preModuleBeginJobSignal_;
00372       void watchPreModuleBeginJob(PreModuleBeginJob::slot_type const& iSlot) {
00373         preModuleBeginJobSignal_.connect(iSlot);
00374       }
00375       AR_WATCH_USING_METHOD_1(watchPreModuleBeginJob)
00376         
00377       
00378       typedef sigc::signal<void, ModuleDescription const&> PostModuleBeginJob;
00379       PostModuleBeginJob postModuleBeginJobSignal_;
00380       void watchPostModuleBeginJob(PostModuleBeginJob::slot_type const& iSlot) {
00381          PostModuleBeginJob::slot_list_type sl = postModuleBeginJobSignal_.slots();
00382          sl.push_front(iSlot);
00383       }
00384       AR_WATCH_USING_METHOD_1(watchPostModuleBeginJob)
00385         
00386       
00387       typedef sigc::signal<void, ModuleDescription const&> PreModuleEndJob;
00388       PreModuleEndJob preModuleEndJobSignal_;
00389       void watchPreModuleEndJob(PreModuleEndJob::slot_type const& iSlot) {
00390         preModuleEndJobSignal_.connect(iSlot);
00391       }
00392       AR_WATCH_USING_METHOD_1(watchPreModuleEndJob)
00393         
00394       
00395       typedef sigc::signal<void, ModuleDescription const&> PostModuleEndJob;
00396       PostModuleEndJob postModuleEndJobSignal_;
00397       void watchPostModuleEndJob(PostModuleEndJob::slot_type const& iSlot) {
00398          PostModuleEndJob::slot_list_type sl = postModuleEndJobSignal_.slots();
00399          sl.push_front(iSlot);
00400       }
00401       AR_WATCH_USING_METHOD_1(watchPostModuleEndJob)
00402         
00403       
00404       typedef sigc::signal<void, ModuleDescription const&> PreModule;
00405       PreModule preModuleSignal_;
00406       void watchPreModule(PreModule::slot_type const& iSlot) {
00407          preModuleSignal_.connect(iSlot);
00408       }
00409       AR_WATCH_USING_METHOD_1(watchPreModule)
00410          
00411       
00412       typedef sigc::signal<void, ModuleDescription const&> PostModule;
00413       PostModule postModuleSignal_;
00414       void watchPostModule(PostModule::slot_type const& iSlot) {
00415          PostModule::slot_list_type sl = postModuleSignal_.slots();
00416          sl.push_front(iSlot);
00417       }
00418       AR_WATCH_USING_METHOD_1(watchPostModule)
00419          
00420       
00421       typedef sigc::signal<void, ModuleDescription const&> PreModuleBeginRun;
00422       PreModuleBeginRun preModuleBeginRunSignal_;
00423       void watchPreModuleBeginRun(PreModuleBeginRun::slot_type const& iSlot) {
00424          preModuleBeginRunSignal_.connect(iSlot);
00425       }
00426       AR_WATCH_USING_METHOD_1(watchPreModuleBeginRun)
00427          
00428       
00429       typedef sigc::signal<void, ModuleDescription const&> PostModuleBeginRun;
00430       PostModuleBeginRun postModuleBeginRunSignal_;
00431       void watchPostModuleBeginRun(PostModuleBeginRun::slot_type const& iSlot) {
00432          PostModuleBeginRun::slot_list_type sl = postModuleBeginRunSignal_.slots();
00433          sl.push_front(iSlot);
00434       }
00435       AR_WATCH_USING_METHOD_1(watchPostModuleBeginRun)
00436          
00437       
00438       typedef sigc::signal<void, ModuleDescription const&> PreModuleEndRun;
00439       PreModuleEndRun preModuleEndRunSignal_;
00440       void watchPreModuleEndRun(PreModuleEndRun::slot_type const& iSlot) {
00441          preModuleEndRunSignal_.connect(iSlot);
00442       }
00443       AR_WATCH_USING_METHOD_1(watchPreModuleEndRun)
00444          
00445       
00446       typedef sigc::signal<void, ModuleDescription const&> PostModuleEndRun;
00447       PostModuleEndRun postModuleEndRunSignal_;
00448       void watchPostModuleEndRun(PostModuleEndRun::slot_type const& iSlot) {
00449          PostModuleEndRun::slot_list_type sl = postModuleEndRunSignal_.slots();
00450          sl.push_front(iSlot);
00451       }
00452       AR_WATCH_USING_METHOD_1(watchPostModuleEndRun)
00453          
00454       
00455       typedef sigc::signal<void, ModuleDescription const&> PreModuleBeginLumi;
00456       PreModuleBeginLumi preModuleBeginLumiSignal_;
00457       void watchPreModuleBeginLumi(PreModuleBeginLumi::slot_type const& iSlot) {
00458          preModuleBeginLumiSignal_.connect(iSlot);
00459       }
00460       AR_WATCH_USING_METHOD_1(watchPreModuleBeginLumi)
00461          
00462       
00463       typedef sigc::signal<void, ModuleDescription const&> PostModuleBeginLumi;
00464       PostModuleBeginLumi postModuleBeginLumiSignal_;
00465       void watchPostModuleBeginLumi(PostModuleBeginLumi::slot_type const& iSlot) {
00466          PostModuleBeginLumi::slot_list_type sl = postModuleBeginLumiSignal_.slots();
00467          sl.push_front(iSlot);
00468       }
00469       AR_WATCH_USING_METHOD_1(watchPostModuleBeginLumi)
00470          
00471       
00472       typedef sigc::signal<void, ModuleDescription const&> PreModuleEndLumi;
00473       PreModuleEndLumi preModuleEndLumiSignal_;
00474       void watchPreModuleEndLumi(PreModuleEndLumi::slot_type const& iSlot) {
00475          preModuleEndLumiSignal_.connect(iSlot);
00476       }
00477       AR_WATCH_USING_METHOD_1(watchPreModuleEndLumi)
00478          
00479       
00480       typedef sigc::signal<void, ModuleDescription const&> PostModuleEndLumi;
00481       PostModuleEndLumi postModuleEndLumiSignal_;
00482       void watchPostModuleEndLumi(PostModuleEndLumi::slot_type const& iSlot) {
00483          PostModuleEndLumi::slot_list_type sl = postModuleEndLumiSignal_.slots();
00484          sl.push_front(iSlot);
00485       }
00486       AR_WATCH_USING_METHOD_1(watchPostModuleEndLumi)
00487          
00488       
00489       typedef sigc::signal<void, ModuleDescription const&> PreSourceConstruction;
00490       PreSourceConstruction preSourceConstructionSignal_;
00491       void watchPreSourceConstruction(PreSourceConstruction::slot_type const& iSlot) {
00492         preSourceConstructionSignal_.connect(iSlot);
00493       }
00494       // WARNING - ModuleDescription is not in fixed place.  See note M above.
00495       AR_WATCH_USING_METHOD_1(watchPreSourceConstruction)
00496         
00497       
00498       typedef sigc::signal<void, ModuleDescription const&> PostSourceConstruction;
00499       PostSourceConstruction postSourceConstructionSignal_;
00500       void watchPostSourceConstruction(PostSourceConstruction::slot_type const& iSlot) {
00501          PostSourceConstruction::slot_list_type sl = postSourceConstructionSignal_.slots();
00502          sl.push_front(iSlot);
00503       }
00504       // WARNING - ModuleDescription is not in fixed place.  See note M above.
00505       AR_WATCH_USING_METHOD_1(watchPostSourceConstruction)
00506 
00507       
00508       typedef sigc::signal<void> PreForkReleaseResources;
00509       PreForkReleaseResources preForkReleaseResourcesSignal_;
00510       void watchPreForkReleaseResources(PreForkReleaseResources::slot_type const& iSlot) {
00511          PreForkReleaseResources::slot_list_type sl = preForkReleaseResourcesSignal_.slots();
00512          sl.push_front(iSlot);
00513       }
00514       AR_WATCH_USING_METHOD_0(watchPreForkReleaseResources)
00515       
00516       
00517       typedef sigc::signal<void, unsigned int, unsigned int> PostForkReacquireResources;
00518       PostForkReacquireResources postForkReacquireResourcesSignal_;
00519       void watchPostForkReacquireResources(PostForkReacquireResources::slot_type const& iSlot) {
00520          PostForkReacquireResources::slot_list_type sl = postForkReacquireResourcesSignal_.slots();
00521          sl.push_front(iSlot);
00522       }
00523       AR_WATCH_USING_METHOD_2(watchPostForkReacquireResources)
00524       
00525       // ---------- member functions ---------------------------
00526       
00527       
00528       void connect(ActivityRegistry& iOther);
00529 
00532       void connectToSubProcess(ActivityRegistry& iOther);
00533       
00539       void copySlotsFrom(ActivityRegistry& iOther);
00540       
00541    private:
00542       // forwards subprocess independent signals to slots connected to iOther
00543       void connectGlobals(ActivityRegistry& iOther);
00544 
00545       // forwards subprocess dependent signals to slots connected to iOther
00546       void connectLocals(ActivityRegistry& iOther);
00547    };
00548 }
00549 #undef AR_WATCH_USING_METHOD
00550 #endif