// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include "BaseIterator.hpp" #include "FloatingPointConverter.hpp" #include namespace armnn { template inline std::unique_ptr> MakeDecoder(const TensorInfo& info, const void* data = nullptr); template<> inline std::unique_ptr> MakeDecoder(const TensorInfo& info, const void* data) { switch(info.GetDataType()) { case DataType::QuantisedAsymm8: { return std::make_unique( static_cast(data), info.GetQuantizationScale(), info.GetQuantizationOffset()); } case DataType::QuantisedSymm16: { return std::make_unique( static_cast(data), info.GetQuantizationScale(), info.GetQuantizationOffset()); } case DataType::Float16: { return std::make_unique(static_cast(data)); } case DataType::Float32: { return std::make_unique(static_cast(data)); } case DataType::Signed32: { const float scale = info.GetQuantizationScale(); if (scale == 0.f) { return std::make_unique(static_cast(data)); } // NOTE: ScaledInt32Decoder is used for quantized convolution biases return std::make_unique(static_cast(data), scale); } default: { BOOST_ASSERT_MSG(false, "Not supported Data Type!"); break; } } return nullptr; } } //namespace armnn