Files
Sourcetrail/src/lib/utility/scheduling/TaskGroupSequential.cpp
T
malte_langkabel 4f302b0d1d logic: reimplemented task system to abort ast visiting
* reimplemented interrupting TaskParseCxx by adding a listener for the MessageInterruptTask and returning a failure status code on update. This cancels the parent sequence task which results in the indexed items not getting inserted into the persistent storage
* removed the capability for interrupting from TaskScheduler
* changed task system to be closer to the standard behavior tree implementation
* changed task system to accommodate the 3 status return types: Running, Success and Failure
* made TaskGroupSequential fail once a member task fails
* made TaskGroupParallel fail once a member task fails
* split TaskParse... into one task for indexing and one task for injecting
* added TaskRunner that handles updating and resetting the managed task
* fixed numbers that are shown as parsed file count in indexing ui
* fixed deadlock that originated from interaction between TaskScheduler and MessageQueue (one thread wanted to destroy a message listener on a task while the other one wanted to send as message as a task)
2016-09-07 14:39:34 +02:00

58 lines
906 B
C++

#include "utility/scheduling/TaskGroupSequential.h"
#include <iostream>
TaskGroupSequential::TaskGroupSequential()
{
}
TaskGroupSequential::~TaskGroupSequential()
{
}
void TaskGroupSequential::addTask(std::shared_ptr<Task> task)
{
m_taskRunners.push_back(std::make_shared<TaskRunner>(task));
}
void TaskGroupSequential::doEnter()
{
m_taskIndex = 0;
}
Task::TaskState TaskGroupSequential::doUpdate()
{
if (m_taskIndex >= int(m_taskRunners.size()))
{
return STATE_SUCCESS;
}
else if (m_taskIndex < 0)
{
return STATE_FAILURE;
}
TaskState state = m_taskRunners[m_taskIndex]->update();
if (state == STATE_SUCCESS)
{
m_taskIndex++;
}
else if (state == STATE_FAILURE)
{
m_taskIndex = -1;
}
return STATE_RUNNING;
}
void TaskGroupSequential::doExit()
{
}
void TaskGroupSequential::doReset()
{
for (size_t i = 0; i < m_taskRunners.size(); i++)
{
m_taskRunners[i]->reset();
}
}