blob: ed92393cdbf5a1aed328f246736134e10aea5851 [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 }
37 case armnn::DataType::Float32:
38 {
39 return std::make_unique<FloatEncoder>(static_cast<float*>(data));
40 }
41 default:
42 {
43 BOOST_ASSERT_MSG(false, "Cannot encode from float. Not supported target Data Type!");
44 break;
45 }
46 }
47 return nullptr;
48}
49
50template<>
Nattapat Chaimanowongae2c5f02019-04-24 16:19:57 +010051inline std::unique_ptr<Encoder<bool>> MakeEncoder(const TensorInfo& info, void* data)
Derek Lambertif30f7d32019-04-09 10:25:02 +010052{
53 switch(info.GetDataType())
54 {
55 case armnn::DataType::Boolean:
56 {
57 return std::make_unique<BooleanEncoder>(static_cast<uint8_t*>(data));
58 }
59 default:
60 {
61 BOOST_ASSERT_MSG(false, "Cannot encode from boolean. Not supported target Data Type!");
62 break;
63 }
64 }
65 return nullptr;
66}
67
Nattapat Chaimanowongae2c5f02019-04-24 16:19:57 +010068} //namespace armnn