blob: f5ec90662aa5ffbfda734ae4d690f6d3fb3deb6a [file] [log] [blame]
Derek Lambertif30f7d32019-04-09 10:25:02 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "BaseIterator.hpp"
9
Francis Murtagh43aec582019-05-27 12:14:10 +010010#include <boost/assert.hpp>
11
Derek Lambertif30f7d32019-04-09 10:25:02 +010012namespace armnn
13{
14
15template<typename T>
Nattapat Chaimanowongae2c5f02019-04-24 16:19:57 +010016inline std::unique_ptr<Decoder<T>> MakeDecoder(const TensorInfo& info, const void* data);
Derek Lambertif30f7d32019-04-09 10:25:02 +010017
18template<>
Nattapat Chaimanowongae2c5f02019-04-24 16:19:57 +010019inline std::unique_ptr<Decoder<float>> MakeDecoder(const TensorInfo& info, const void* data)
Derek Lambertif30f7d32019-04-09 10:25:02 +010020{
21 switch(info.GetDataType())
22 {
23 case armnn::DataType::QuantisedAsymm8:
24 {
25 return std::make_unique<QASymm8Decoder>(
26 static_cast<const uint8_t*>(data),
27 info.GetQuantizationScale(),
28 info.GetQuantizationOffset());
29 }
30 case armnn::DataType::QuantisedSymm16:
31 {
32 return std::make_unique<QSymm16Decoder>(
33 static_cast<const int16_t*>(data),
34 info.GetQuantizationScale(),
35 info.GetQuantizationOffset());
36 }
37 case armnn::DataType::Float32:
38 {
39 return std::make_unique<FloatDecoder>(static_cast<const float*>(data));
40 }
Mike Kelly9b398322019-05-22 17:21:49 +010041 case armnn::DataType::Signed32:
42 {
43 return std::make_unique<ScaledInt32Decoder>(
44 static_cast<const int32_t*>(data),
45 info.GetQuantizationScale());
46 }
Derek Lambertif30f7d32019-04-09 10:25:02 +010047 default:
48 {
49 BOOST_ASSERT_MSG(false, "Not supported Data Type!");
50 break;
51 }
52 }
53 return nullptr;
54}
55
Nattapat Chaimanowongae2c5f02019-04-24 16:19:57 +010056} //namespace armnn