1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <ie_network.hpp>
10 using namespace InferenceEngine;
12 PortData::PortData() {
16 PortData::PortData(const SizeVector& shape, const Precision& precision) {
17 createData({precision, shape, TensorDesc::getLayoutByDims(shape)});
20 const Blob::Ptr& PortData::getData() const {
24 void PortData::setData(const Blob::Ptr& data) {
28 const std::map<std::string, Parameter>& PortData::getParameters() const noexcept {
32 void PortData::createData(const TensorDesc& desc) {
33 switch (desc.getPrecision()) {
34 case Precision::UNSPECIFIED:
35 data = std::make_shared<InferenceEngine::TBlob<uint8_t>>(desc);
38 data = make_shared_blob<PrecisionTrait<Precision::FP32>::value_type>(desc);
41 data = make_shared_blob<PrecisionTrait<Precision::FP16>::value_type>(desc);
44 data = make_shared_blob<PrecisionTrait<Precision::Q78>::value_type>(desc);
47 data = make_shared_blob<PrecisionTrait<Precision::I16>::value_type>(desc);
50 data = make_shared_blob<PrecisionTrait<Precision::U8>::value_type>(desc);
53 data = make_shared_blob<PrecisionTrait<Precision::I8>::value_type>(desc);
56 data = make_shared_blob<PrecisionTrait<Precision::U16>::value_type>(desc);
59 data = make_shared_blob<PrecisionTrait<Precision::I32>::value_type>(desc);
62 THROW_IE_EXCEPTION << "Unsupported precisions!";
66 void PortData::setShape(const SizeVector& shape) {
67 TensorDesc desc = data->getTensorDesc();
68 if (desc.getDims() == shape)
70 if (data->cbuffer() != nullptr) {
71 THROW_IE_EXCEPTION << "Cannot change shape for allocated data!";
73 createData({desc.getPrecision(), shape, TensorDesc::getLayoutByDims(shape)});
77 data = std::make_shared<PortData>();
80 Port::Port(const SizeVector& shapes, const Precision& precision) {
81 data = std::make_shared<PortData>(shapes, precision);
83 Port::Port(const Port& port) {
84 parameters = port.parameters;
89 bool Port::operator==(const Port& rhs) const {
90 return parameters == rhs.parameters &&
94 bool Port::operator!=(const Port& rhs) const {
95 return !(rhs == *this);
98 const SizeVector& Port::shape() const noexcept {
99 return data->getData()->getTensorDesc().getDims();
102 void Port::setShape(const SizeVector& shape) {
103 data->setShape(shape);
106 const std::map<std::string, Parameter>& Port::getParameters() const noexcept {
110 void Port::setParameters(const std::map<std::string, Parameter>& params) noexcept {
114 void Port::setParameter(const std::string& name, const Parameter& param) {
115 parameters[name] = param;
118 const PortData::Ptr& Port::getData() const noexcept {
122 void Port::setData(const PortData::Ptr& data) {