// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include #include #include namespace armnn { template bool IsSupportedForDataTypeGeneric(Optional reasonIfUnsupported, DataType dataType, Float16Func float16FuncPtr, Float32Func float32FuncPtr, Uint8Func uint8FuncPtr, Params&&... params) { switch(dataType) { case DataType::Float16: return float16FuncPtr(reasonIfUnsupported, std::forward(params)...); case DataType::Float32: return float32FuncPtr(reasonIfUnsupported, std::forward(params)...); case DataType::QuantisedAsymm8: return uint8FuncPtr(reasonIfUnsupported, std::forward(params)...); default: return false; } } template bool TrueFunc(Optional reasonIfUnsupported, Params&&... params) { return true; } template bool FalseFunc(Optional reasonIfUnsupported, Params&&... params) { return false; } template bool FalseFuncF16(Optional reasonIfUnsupported, Params&&... params) { if (reasonIfUnsupported) { reasonIfUnsupported.value() = "Layer is not supported with float16 data type"; } return false; } template bool FalseFuncF32(Optional reasonIfUnsupported, Params&&... params) { if (reasonIfUnsupported) { reasonIfUnsupported.value() = "Layer is not supported with float32 data type"; } return false; } template bool FalseFuncU8(Optional reasonIfUnsupported, Params&&... params) { if (reasonIfUnsupported) { reasonIfUnsupported.value() = "Layer is not supported with 8-bit data type"; } return false; } template bool FalseInputFuncF32(Optional reasonIfUnsupported, Params&&... params) { if (reasonIfUnsupported) { reasonIfUnsupported.value() = "Layer is not supported with float32 data type input"; } return false; } template bool FalseInputFuncF16(Optional reasonIfUnsupported, Params&&... params) { if (reasonIfUnsupported) { reasonIfUnsupported.value() = "Layer is not supported with float16 data type input"; } return false; } template bool FalseOutputFuncF32(Optional reasonIfUnsupported, Params&&... params) { if (reasonIfUnsupported) { reasonIfUnsupported.value() = "Layer is not supported with float32 data type output"; } return false; } template bool FalseOutputFuncF16(Optional reasonIfUnsupported, Params&&... params) { if (reasonIfUnsupported) { reasonIfUnsupported.value() = "Layer is not supported with float16 data type output"; } return false; } }