blob: 528a573b997e2e89832f4d360adde586f6e8b55e [file] [log] [blame]
Sadik Armagana097d2a2021-11-24 15:47:28 +00001//
2// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include <ResolveType.hpp>
9
10
11#include <reference/workloads/Encoders.hpp>
12
13#include <vector>
14
15// Utility tenmplate to convert a collection of values to the correct type
16template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
17std::vector<T> ConvertToDataType(const std::vector<float>& input,
18 const armnn::TensorInfo& inputTensorInfo)
19{
20 std::vector<T> output(input.size());
21 auto outputTensorInfo = inputTensorInfo;
22 outputTensorInfo.SetDataType(ArmnnType);
23
24 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
25 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
26
27 for (auto it = input.begin(); it != input.end(); ++it)
28 {
29 rOutputEncoder.Set(*it);
30 ++rOutputEncoder;
31 }
32 return output;
33}
34
35// Utility tenmplate to convert a single value to the correct type
36template <typename T>
37T ConvertToDataType(const float& value,
38 const armnn::TensorInfo& tensorInfo)
39{
40 std::vector<T> output(1);
41 std::unique_ptr<armnn::Encoder<float>> pEncoder = armnn::MakeEncoder<float>(tensorInfo, output.data());
42 armnn::Encoder<float>& rEncoder = *pEncoder;
43 rEncoder.Set(value);
44 return output[0];
45}