1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
6 * \brief inference engine executanle network API wrapper, to be used by particular implementors
7 * \file ie_executable_network_base.hpp
16 #include <cpp_interfaces/interface/ie_imemory_state_internal.hpp>
17 #include <cpp_interfaces/base/ie_memory_state_base.hpp>
18 #include "cpp_interfaces/exception2status.hpp"
20 namespace InferenceEngine {
23 * @brief cpp interface for executable network, to avoid dll boundaries and simplify internal development
24 * @tparam T Minimal CPP implementation of IExecutableNetwork (e.g. ExecutableNetworkInternal)
27 class ExecutableNetworkBase : public IExecutableNetwork {
28 std::shared_ptr<T> _impl;
31 typedef std::shared_ptr<ExecutableNetworkBase<T>> Ptr;
33 explicit ExecutableNetworkBase(std::shared_ptr<T> impl) {
34 if (impl.get() == nullptr) {
35 THROW_IE_EXCEPTION << "implementation not defined";
40 StatusCode GetOutputsInfo(ConstOutputsDataMap &outs, ResponseDesc *resp) const noexcept override {
41 TO_STATUS(outs = _impl->GetOutputsInfo());
44 StatusCode GetInputsInfo(ConstInputsDataMap &inputs, ResponseDesc *resp) const noexcept override {
45 TO_STATUS(inputs = _impl->GetInputsInfo());
48 StatusCode CreateInferRequest(IInferRequest::Ptr &req, ResponseDesc *resp) noexcept override {
49 TO_STATUS(_impl->CreateInferRequest(req));
52 StatusCode Export(const std::string &modelFileName, ResponseDesc *resp) noexcept override {
53 TO_STATUS(_impl->Export(modelFileName));
56 StatusCode GetMappedTopology(std::map<std::string, std::vector<PrimitiveInfo::Ptr>> &deployedTopology,
57 ResponseDesc *resp) noexcept override {
58 TO_STATUS(_impl->GetMappedTopology(deployedTopology));
61 StatusCode GetExecGraphInfo(ICNNNetwork::Ptr &graphPtr, ResponseDesc *resp) noexcept override {
62 TO_STATUS(_impl->GetExecGraphInfo(graphPtr));
65 StatusCode QueryState(IMemoryState::Ptr & pState, size_t idx
66 , ResponseDesc *resp) noexcept override {
68 auto v = _impl->QueryState();
69 if (idx >= v.size()) {
72 pState = std::make_shared<MemoryStateBase<IMemoryStateInternal>>(v[idx]);
74 } catch (const std::exception & ex) {\
75 return InferenceEngine::DescriptionBuffer(GENERAL_ERROR, resp) << ex.what();\
77 return InferenceEngine::DescriptionBuffer(UNEXPECTED);\
81 void Release() noexcept override {
85 // Need for unit tests only - TODO: unit tests should test using public API, non having details
86 const std::shared_ptr<T> getImpl() const {
91 ~ExecutableNetworkBase() = default;
95 inline typename ExecutableNetworkBase<T>::Ptr make_executable_network(std::shared_ptr<T> impl) {
96 typename ExecutableNetworkBase<T>::Ptr net(new ExecutableNetworkBase<T>(impl), [](IExecutableNetwork * p) {
102 } // namespace InferenceEngine