#include "data/TaskMergeStorages.h" #include #include #include "data/storage/StorageProvider.h" TaskMergeStorages::TaskMergeStorages( std::shared_ptr storageProvider ) : m_storageProvider(storageProvider) { } void TaskMergeStorages::doEnter(std::shared_ptr blackboard) { } Task::TaskState TaskMergeStorages::doUpdate(std::shared_ptr blackboard) { if (m_storageProvider->getStorageCount() > 2) // largest storage won't be touched here { std::shared_ptr target = m_storageProvider->consumeSecondLargestStorage(); std::shared_ptr 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); } } } else { const int SLEEP_TIME_MS = 25; std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME_MS)); } return STATE_FAILURE; } void TaskMergeStorages::doExit(std::shared_ptr blackboard) { } void TaskMergeStorages::doReset(std::shared_ptr blackboard) { }