#include "TaskMergeStorages.h" #include "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); } } } return STATE_FAILURE; } void TaskMergeStorages::doExit(std::shared_ptr blackboard) { } void TaskMergeStorages::doReset(std::shared_ptr blackboard) { }