* don't use thread::detach() in TaskGroupParallel::terminate to make it useful for tabs * properly terminate TaskFillIndexerCommandQueue * fixed wrong microsecond delays * moved some task delays to TaskDecoratorRepeat for better transparency
51 lines
1.1 KiB
C++
51 lines
1.1 KiB
C++
#include "TaskMergeStorages.h"
|
|
|
|
#include "StorageProvider.h"
|
|
|
|
TaskMergeStorages::TaskMergeStorages(
|
|
std::shared_ptr<StorageProvider> storageProvider
|
|
)
|
|
: m_storageProvider(storageProvider)
|
|
{
|
|
}
|
|
|
|
void TaskMergeStorages::doEnter(std::shared_ptr<Blackboard> blackboard)
|
|
{
|
|
}
|
|
|
|
Task::TaskState TaskMergeStorages::doUpdate(std::shared_ptr<Blackboard> blackboard)
|
|
{
|
|
if (m_storageProvider->getStorageCount() > 2) // largest storage won't be touched here
|
|
{
|
|
std::shared_ptr<IntermediateStorage> target = m_storageProvider->consumeSecondLargestStorage();
|
|
std::shared_ptr<IntermediateStorage> source = m_storageProvider->consumeSecondLargestStorage();
|
|
if (target && source)
|
|
{
|
|
target->inject(source.get());
|
|
m_storageProvider->insert(target);
|
|
return STATE_SUCCESS;
|
|
}
|
|
else
|
|
{
|
|
if (target)
|
|
{
|
|
m_storageProvider->insert(target);
|
|
}
|
|
if (source)
|
|
{
|
|
m_storageProvider->insert(source);
|
|
}
|
|
}
|
|
}
|
|
|
|
return STATE_FAILURE;
|
|
}
|
|
|
|
void TaskMergeStorages::doExit(std::shared_ptr<Blackboard> blackboard)
|
|
{
|
|
}
|
|
|
|
void TaskMergeStorages::doReset(std::shared_ptr<Blackboard> blackboard)
|
|
{
|
|
}
|