blob: f0e40d224bcae842c135944c1456b235568ecb1e [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
Matteo Martincigh3122bd52019-06-03 16:54:25 +010010#include <boost/assert.hpp>
11
Derek Lambertif30f7d32019-04-09 10:25:02 +010012namespace armnn
13{
14
15template<typename T>
Matthew Benthamc394a6d2019-06-24 12:51:25 +010016inline std::unique_ptr<Encoder<T>> MakeEncoder(const TensorInfo& info, void* data = nullptr);
Derek Lambertif30f7d32019-04-09 10:25:02 +010017
18template<>
Nattapat Chaimanowongae2c5f02019-04-24 16:19:57 +010019inline std::unique_ptr<Encoder<float>> MakeEncoder(const TensorInfo& info, 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<QASymm8Encoder>(
26 static_cast<uint8_t*>(data),
27 info.GetQuantizationScale(),
28 info.GetQuantizationOffset());
29 }
30 case armnn::DataType::QuantisedSymm16:
31 {
32 return std::make_unique<QSymm16Encoder>(
33 static_cast<int16_t*>(data),
34 info.GetQuantizationScale(),
35 info.GetQuantizationOffset());
36 }
Aron Virginas-Tar198ee402019-08-02 18:54:28 +010037 case armnn::DataType::Signed32:
38 {
39 return std::make_unique<Int32Encoder>(static_cast<int32_t*>(data));
40 }
Derek Lambertif30f7d32019-04-09 10:25:02 +010041 case armnn::DataType::Float32:
42 {
43 return std::make_unique<FloatEncoder>(static_cast<float*>(data));
44 }
45 default:
46 {
47 BOOST_ASSERT_MSG(false, "Cannot encode from float. Not supported target Data Type!");
48 break;
49 }
50 }
51 return nullptr;
52}
53
54template<>
Nattapat Chaimanowongae2c5f02019-04-24 16:19:57 +010055inline std::unique_ptr<Encoder<bool>> MakeEncoder(const TensorInfo& info, void* data)
Derek Lambertif30f7d32019-04-09 10:25:02 +010056{
57 switch(info.GetDataType())
58 {
59 case armnn::DataType::Boolean:
60 {
61 return std::make_unique<BooleanEncoder>(static_cast<uint8_t*>(data));
62 }
63 default:
64 {
65 BOOST_ASSERT_MSG(false, "Cannot encode from boolean. Not supported target Data Type!");
66 break;
67 }
68 }
69 return nullptr;
70}
71
Nattapat Chaimanowongae2c5f02019-04-24 16:19:57 +010072} //namespace armnn