ArmNN  NotReleased
LayerSupportCommon.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
8 #include <armnn/Types.hpp>
9 #include <armnn/Tensor.hpp>
10 #include <armnn/Optional.hpp>
11 
12 #include <boost/core/ignore_unused.hpp>
13 
14 namespace armnn
15 {
16 
17 template<typename T, typename V>
18 void SetValueChecked(Optional<T&> optionalRef, V&& val)
19 {
20  if (optionalRef)
21  {
22  optionalRef.value() = val;
23  }
24 }
25 
26 template<typename Float16Func, typename Float32Func, typename Uint8Func, typename Int32Func, typename BooleanFunc,
27  typename ... Params>
29  DataType dataType,
30  Float16Func float16FuncPtr,
31  Float32Func float32FuncPtr,
32  Uint8Func uint8FuncPtr,
33  Int32Func int32FuncPtr,
34  BooleanFunc booleanFuncPtr,
35  Params&&... params)
36 {
37  switch(dataType)
38  {
39  case DataType::Float16:
40  return float16FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);
41  case DataType::Float32:
42  return float32FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);
43  case DataType::QAsymmU8:
44  return uint8FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);
45  case DataType::Signed32:
46  return int32FuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);
47  case DataType::Boolean:
48  return booleanFuncPtr(reasonIfUnsupported, std::forward<Params>(params)...);
49  default:
50  return false;
51  }
52 }
53 
54 template<typename ... Params>
55 bool TrueFunc(Optional<std::string&> reasonIfUnsupported, Params&&... params)
56 {
57  boost::ignore_unused(reasonIfUnsupported);
58  boost::ignore_unused(params...);
59  return true;
60 }
61 
62 template<typename ... Params>
63 bool FalseFunc(Optional<std::string&> reasonIfUnsupported, Params&&... params)
64 {
65  boost::ignore_unused(reasonIfUnsupported);
66  boost::ignore_unused(params...);
67  return false;
68 }
69 
70 template<typename ... Params>
71 bool FalseFuncF16(Optional<std::string&> reasonIfUnsupported, Params&&... params)
72 {
73  boost::ignore_unused(params...);
74  SetValueChecked(reasonIfUnsupported, "Layer is not supported with float16 data type");
75  return false;
76 }
77 
78 template<typename ... Params>
79 bool FalseFuncF32(Optional<std::string&> reasonIfUnsupported, Params&&... params)
80 {
81  boost::ignore_unused(params...);
82  SetValueChecked(reasonIfUnsupported, "Layer is not supported with float32 data type");
83  return false;
84 }
85 
86 template<typename ... Params>
87 bool FalseFuncU8(Optional<std::string&> reasonIfUnsupported, Params&&... params)
88 {
89  boost::ignore_unused(params...);
90  SetValueChecked(reasonIfUnsupported, "Layer is not supported with 8-bit data type");
91  return false;
92 }
93 
94 template<typename ... Params>
95 bool FalseFuncI32(Optional<std::string&> reasonIfUnsupported, Params&&... params)
96 {
97  boost::ignore_unused(params...);
98  SetValueChecked(reasonIfUnsupported, "Layer is not supported with int32 data type");
99  return false;
100 }
101 
102 template<typename ... Params>
103 bool FalseInputFuncF32(Optional<std::string&> reasonIfUnsupported, Params&&... params)
104 {
105  boost::ignore_unused(params...);
106  SetValueChecked(reasonIfUnsupported, "Layer is not supported with float32 data type input");
107  return false;
108 }
109 
110 template<typename ... Params>
111 bool FalseInputFuncF16(Optional<std::string&> reasonIfUnsupported, Params&&... params)
112 {
113  boost::ignore_unused(params...);
114  SetValueChecked(reasonIfUnsupported, "Layer is not supported with float16 data type input");
115  return false;
116 }
117 
118 template<typename ... Params>
119 bool FalseOutputFuncF32(Optional<std::string&> reasonIfUnsupported, Params&&... params)
120 {
121  boost::ignore_unused(params...);
122  SetValueChecked(reasonIfUnsupported, "Layer is not supported with float32 data type output");
123  return false;
124 }
125 
126 template<typename ... Params>
127 bool FalseOutputFuncF16(Optional<std::string&> reasonIfUnsupported, Params&&... params)
128 {
129  boost::ignore_unused(params...);
130  SetValueChecked(reasonIfUnsupported, "Layer is not supported with float16 data type output");
131  return false;
132 }
133 
134 }
bool FalseOutputFuncF32(Optional< std::string &> reasonIfUnsupported, Params &&... params)
bool FalseFuncI32(Optional< std::string &> reasonIfUnsupported, Params &&... params)
bool FalseOutputFuncF16(Optional< std::string &> reasonIfUnsupported, Params &&... params)
bool FalseFunc(Optional< std::string &> reasonIfUnsupported, Params &&... params)
bool TrueFunc(Optional< std::string &> reasonIfUnsupported, Params &&... params)
bool FalseInputFuncF32(Optional< std::string &> reasonIfUnsupported, Params &&... params)
bool FalseFuncU8(Optional< std::string &> reasonIfUnsupported, Params &&... params)
bool FalseFuncF32(Optional< std::string &> reasonIfUnsupported, Params &&... params)
bool IsSupportedForDataTypeGeneric(Optional< std::string &> reasonIfUnsupported, DataType dataType, Float16Func float16FuncPtr, Float32Func float32FuncPtr, Uint8Func uint8FuncPtr, Int32Func int32FuncPtr, BooleanFunc booleanFuncPtr, Params &&... params)
DataType
Definition: Types.hpp:32
void SetValueChecked(Optional< T &> optionalRef, V &&val)
bool FalseInputFuncF16(Optional< std::string &> reasonIfUnsupported, Params &&... params)
bool FalseFuncF16(Optional< std::string &> reasonIfUnsupported, Params &&... params)