| 1 | #ifndef MARS_MTaskInteractive | 
|---|
| 2 | #define MARS_MTaskInteractive | 
|---|
| 3 |  | 
|---|
| 4 | #ifndef MARS_MTask | 
|---|
| 5 | #include "MTask.h" | 
|---|
| 6 | #endif | 
|---|
| 7 |  | 
|---|
| 8 | class MFilter; | 
|---|
| 9 | class MTaskList; | 
|---|
| 10 |  | 
|---|
| 11 | class MTaskInteractive : public MTask | 
|---|
| 12 | { | 
|---|
| 13 | private: | 
|---|
| 14 | TMethodCall *fCall[4]; | 
|---|
| 15 |  | 
|---|
| 16 | Int_t  (*fPreProcess)(MParList *list); | 
|---|
| 17 | Int_t  (*fProcess)(); | 
|---|
| 18 | Int_t  (*fPostProcess)(); | 
|---|
| 19 | Bool_t (*fReInit)(MParList *list); | 
|---|
| 20 |  | 
|---|
| 21 | Int_t  PreProcess(MParList *list) { if (fCall[0]) return Return(0, &list); return fPreProcess  ? (*fPreProcess)(list) : kTRUE; } | 
|---|
| 22 | Int_t  Process()                  { if (fCall[1]) return Return(1);        return fProcess     ? (*fProcess)()        : kTRUE; } | 
|---|
| 23 | Int_t  PostProcess()              { if (fCall[2]) return Return(2);        return fPostProcess ? (*fPostProcess)()    : kTRUE; } | 
|---|
| 24 | Bool_t ReInit(MParList *list)     { if (fCall[3]) return Return(3, &list); return fReInit      ? (*fReInit)(list)     : kTRUE; } | 
|---|
| 25 |  | 
|---|
| 26 | Int_t Return(Int_t no, void *param=NULL); | 
|---|
| 27 | Bool_t Set(void *fcn, Int_t no, const char *params); | 
|---|
| 28 | void   Free(Int_t no); | 
|---|
| 29 |  | 
|---|
| 30 | public: | 
|---|
| 31 | MTaskInteractive(const char *name=NULL, const char *title=NULL); | 
|---|
| 32 | ~MTaskInteractive(); | 
|---|
| 33 |  | 
|---|
| 34 | // This is to be used in compiled code | 
|---|
| 35 | void SetPreProcess(Int_t (*func)(MParList *list)) { fPreProcess  = func; Free(0); } | 
|---|
| 36 | void SetProcess(Int_t (*func)())                  { fProcess     = func; Free(1); } | 
|---|
| 37 | void SetPostProcess(Int_t (*func)())              { fPostProcess = func; Free(2); } | 
|---|
| 38 | void SetReInit(Bool_t (*func)(MParList *list))    { fReInit      = func; Free(3); } | 
|---|
| 39 |  | 
|---|
| 40 | // This is for usage in CINT | 
|---|
| 41 | void SetPreProcess(void *fcn)  { Set(fcn, 0, "MParList*"); fPreProcess =0; } | 
|---|
| 42 | void SetProcess(void *fcn)     { Set(fcn, 1, "");          fProcess    =0; } | 
|---|
| 43 | void SetPostProcess(void *fcn) { Set(fcn, 2, "");          fPostProcess=0; } | 
|---|
| 44 | void SetReInit(void *fcn)      { Set(fcn, 3, "MParList*"); fReInit     =0; } | 
|---|
| 45 |  | 
|---|
| 46 | ClassDef(MTaskInteractive, 0) // Interactive task | 
|---|
| 47 | }; | 
|---|
| 48 |  | 
|---|
| 49 | #endif | 
|---|