1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
7 #include "ie_icnn_net_reader.h"
8 #include "cnn_network_impl.hpp"
20 namespace InferenceEngine {
23 struct FormatParserCreator {
24 using Ptr = std::shared_ptr<FormatParserCreator>;
25 virtual std::shared_ptr<IFormatParser> create(int version) = 0;
28 struct V2FormatParserCreator : public FormatParserCreator {
29 std::shared_ptr<IFormatParser> create(int version) override;
32 class CNNNetReaderImpl : public ICNNNetReader {
34 static std::string NameFromFilePath(const char *filepath);
36 explicit CNNNetReaderImpl(const FormatParserCreator::Ptr& _parserCreator);
38 StatusCode ReadNetwork(const char *filepath, ResponseDesc *resp) noexcept override;
40 StatusCode ReadNetwork(const void *model, size_t size, ResponseDesc *resp)noexcept override;
42 StatusCode SetWeights(const TBlob<uint8_t>::Ptr &weights, ResponseDesc *resp) noexcept override;
44 StatusCode ReadWeights(const char *filepath, ResponseDesc *resp) noexcept override;
46 ICNNNetwork *getNetwork(ResponseDesc *resp) noexcept override {
51 bool isParseSuccess(ResponseDesc *resp) noexcept override {
56 StatusCode getDescription(ResponseDesc *desc) noexcept override {
57 return DescriptionBuffer(OK, desc) << description;
61 StatusCode getName(char *name, size_t len, ResponseDesc *resp) noexcept override {
62 strncpy(name, this->name.c_str(), len - 1);
63 if (len) name[len-1] = '\0'; // strncpy is not doing this, so output might be not null-terminated
67 int getVersion(ResponseDesc * resp) noexcept override {
71 void Release() noexcept override {
76 std::shared_ptr<InferenceEngine::details::IFormatParser> _parser;
78 static int GetFileVersion(pugi::xml_node &root);
80 StatusCode ReadNetwork(pugi::xml_document &xmlDoc);
82 std::string description;
84 InferenceEngine::details::CNNNetworkImplPtr network;
87 FormatParserCreator::Ptr parserCreator;
89 } // namespace details
90 } // namespace InferenceEngine