1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
8 #include "details/ie_exception.hpp"
9 #include "cpp_interfaces/exception2status.hpp"
10 #include "cpp_interfaces/ie_task.hpp"
11 #include "cpp_interfaces/ie_task_with_stages.hpp"
13 namespace InferenceEngine {
15 StagedTask::StagedTask() : Task(), _stages(0) {}
17 StagedTask::StagedTask(std::function<void()> function, size_t stages) : Task(function), _stages(stages), _stage(0) {
18 if (!function) THROW_IE_EXCEPTION << "Failed to create StagedTask object with null function";
22 Task::Status StagedTask::runNoThrowNoBusyCheck() noexcept {
23 std::lock_guard<std::mutex> lock(_runMutex);
25 _exceptionPtr = nullptr;
27 setStatus(TS_POSTPONED);
34 _exceptionPtr = std::current_exception();
38 if (_status != TS_POSTPONED) {
39 _isTaskDoneCondVar.notify_all();
44 void StagedTask::resetStages() {
48 void StagedTask::stageDone() {
49 if (_stage <= 0) THROW_IE_EXCEPTION << "Failed to make stage done, because it's been already done";
53 size_t StagedTask::getStage() {
57 } // namespace InferenceEngine