87 TTask *TTask::fgBeginTask = 0;
88 TTask *TTask::fgBreakPoint = 0;
97 fHasExecuted = kFALSE;
107 TTask::TTask(
const char* name,
const char *title)
110 fHasExecuted = kFALSE;
114 fTasks =
new TList();
120 TTask& TTask::operator=(
const TTask& tt)
123 TNamed::operator=(tt);
125 TIter next(tt.fTasks);
127 while ((task = (TTask*)next())) {
128 fTasks->Add(
new TTask(*task));
131 fBreakin=tt.fBreakin;
132 fBreakout=tt.fBreakout;
133 fHasExecuted=tt.fHasExecuted;
142 TTask::TTask(
const TTask &other) : TNamed(other)
144 fTasks =
new TList();
145 TIter next(other.fTasks);
147 while ((task = (TTask*)next())) {
148 fTasks->Add(
new TTask(*task));
150 fOption = other.fOption;
151 fBreakin = other.fBreakin;
152 fBreakout = other.fBreakout;
153 fHasExecuted = kFALSE;
154 fActive = other.fActive;
176 printf(
" Nothing to abort: No task currently running\n");
192 void TTask::Browse(TBrowser *b)
202 void TTask::CleanTasks()
204 if (fBreakin) fBreakin = 1;
205 if (fBreakout) fBreakout = 1;
206 fHasExecuted = kFALSE;
210 while((task=(TTask*)next())) {
221 void TTask::Clear(Option_t *)
228 void TTask::Continue()
231 printf(
" No task to continue\n");
236 fgBeginTask->ExecuteTasks(fOption.Data());
239 fgBeginTask->CleanTasks();
248 void TTask::Exec(Option_t *)
261 void TTask::ExecuteTask(Option_t *option)
264 Error(
"ExecuteTask",
"Cannot execute task:%s, already running task: %s",GetName(),fgBeginTask->GetName());
267 if (!IsActive())
return;
273 if (fBreakin)
return;
275 TROOT::IndentLevel();
276 std::cout<<
"Execute task:"<<GetName()<<
" : "<<GetTitle()<<std::endl;
277 TROOT::IncreaseDirLevel();
281 fHasExecuted = kTRUE;
282 ExecuteTasks(option);
284 if (gDebug > 1) TROOT::DecreaseDirLevel();
285 if (fBreakout)
return;
288 fgBeginTask->CleanTasks();
296 void TTask::ExecuteTasks(Option_t *option)
300 while((task=(TTask*)next())) {
301 if (fgBreakPoint)
return;
302 if (!task->IsActive())
continue;
303 if (task->fHasExecuted) {
304 task->ExecuteTasks(option);
307 if (task->fBreakin == 1) {
308 printf(
"Break at entry of task: %s\n",task->GetName());
315 TROOT::IndentLevel();
316 std::cout<<
"Execute task:"<<task->GetName()<<
" : "<<task->GetTitle()<<std::endl;
317 TROOT::IncreaseDirLevel();
320 task->fHasExecuted = kTRUE;
321 task->ExecuteTasks(option);
322 if (gDebug > 1) TROOT::DecreaseDirLevel();
323 if (task->fBreakout == 1) {
324 printf(
"Break at exit of task: %s\n",task->GetName());
336 void TTask::ls(Option_t *option)
const
338 TROOT::IndentLevel();
339 std::cout <<GetName()<<
"\t"<<GetTitle()<<std::endl;
340 TROOT::IncreaseDirLevel();
342 TString opta = option;
343 TString opt = opta.Strip(TString::kBoth);
345 TRegexp re(opt, kTRUE);
348 TIter nextobj(fTasks);
349 while ((obj = (TObject *) nextobj())) {
350 TString s = obj->GetName();
351 if (s.Index(re) == kNPOS)
continue;
354 TROOT::DecreaseDirLevel();