20 const int initialQueueSize = _taskQueue->tasks.size();
21 int processedTasks = 0;
23 logDebug(
"run(...)",
"process all tasks of type " << _taskQueue->type <<
" (initial queue size=" << initialQueueSize <<
")" );
26 not _taskQueue->tasks.empty()
29 processedTasks < initialQueueSize
34 Task* firstTask = *_taskQueue->tasks.begin();
35 _taskQueue->tasks.pop_front();
37 int maxTasks = std::min(
static_cast<int>(_taskQueue->tasks.size()), instruction.
maxTasks-1);
38 ReadyFusableTasks::Tasks::iterator cutIterator = _taskQueue->tasks.begin();
39 std::advance(cutIterator, maxTasks);
41 extractedTasks.splice(extractedTasks.end(), _taskQueue->tasks, _taskQueue->tasks.begin(), cutIterator);
43 logDebug(
"run(...)",
"max tasks on top of first task=" << maxTasks );
48 processedTasks += extractedTasks.size() + 1;
50 if (instruction.
minTasks >
static_cast<int>(_taskQueue->tasks.size()) + 1) {
51 logDebug(
"run(...)",
"here we go with " << extractedTasks.size() <<
" task(s) as we have to fuse at least " << instruction.
minTasks <<
" task(s)" );
52 for (
auto& task: extractedTasks) {
58 logDebug(
"run(...)",
"now run first task manually" );
59 while (firstTask->
run()) {