Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / src / inference_engine / cpp_interfaces / impl / ie_executable_network_thread_safe_async_only.hpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #pragma once
6
7 #include <vector>
8 #include <memory>
9 #include <map>
10 #include <string>
11 #include <ie_iinfer_request.hpp>
12 #include "cpp_interfaces/interface/ie_iexecutable_network_internal.hpp"
13 #include "cpp_interfaces/interface/ie_iinfer_async_request_internal.hpp"
14 #include "cpp_interfaces/base/ie_infer_async_request_base.hpp"
15 #include "cpp_interfaces/impl/ie_executable_network_internal.hpp"
16 #include "cpp_interfaces/impl/ie_infer_async_request_internal.hpp"
17
18 namespace InferenceEngine {
19
20 class ExecutableNetworkThreadSafeAsyncOnly
21         : public ExecutableNetworkInternal, public std::enable_shared_from_this<ExecutableNetworkThreadSafeAsyncOnly> {
22 public:
23     typedef std::shared_ptr<ExecutableNetworkThreadSafeAsyncOnly> Ptr;
24
25     virtual AsyncInferRequestInternal::Ptr
26     CreateAsyncInferRequestImpl(InputsDataMap networkInputs, OutputsDataMap networkOutputs) = 0;
27
28     void CreateInferRequest(IInferRequest::Ptr &asyncRequest) override {
29         auto asyncRequestImpl = this->CreateAsyncInferRequestImpl(_networkInputs, _networkOutputs);
30         asyncRequestImpl->setPointerToExecutableNetworkInternal(shared_from_this());
31         asyncRequest.reset(new InferRequestBase<AsyncInferRequestInternal>(asyncRequestImpl),
32                            [](IInferRequest *p) { p->Release(); });
33         asyncRequestImpl->SetPublicInterfacePtr(asyncRequest);
34     }
35 };
36
37 }  // namespace InferenceEngine