diff options
Diffstat (limited to 'include/attribute.h')
-rw-r--r-- | include/attribute.h | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/include/attribute.h b/include/attribute.h index 93f7bc4..d6c96a4 100644 --- a/include/attribute.h +++ b/include/attribute.h @@ -40,13 +40,43 @@ public: {} }; +inline int convertFlatbuffersU8toF32(const flatbuffers::Vector<uint8_t>& in, uint32_t out_size, std::vector<float>& out) +{ + out.clear(); + if (in.size() < out_size * sizeof(float)) + { + printf("convertFlatbuffersU8toF32(): uint8 Flatbuffers buffer size %u must be >= target size %ld\n", in.size(), + out_size * sizeof(float)); + return 1; + } + for (uint32_t i = 0; i < out_size; i++) + { + uint32_t byte0 = in[i * sizeof(float)]; + uint32_t byte1 = in[i * sizeof(float) + 1]; + uint32_t byte2 = in[i * sizeof(float) + 2]; + uint32_t byte3 = in[i * sizeof(float) + 3]; + uint32_t val_u32 = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24); + float* val_fp32 = reinterpret_cast<float*>(&val_u32); + out.push_back(*val_fp32); + } + return 0; +} + #define DEF_ARGS_VER0_S_STR(V) _##V = p->V()->str(); #define DEF_ARGS_VER0_S_DEFAULT(V) _##V = p->V(); +#define DEF_ARGS_VER0_S_float_as_bytes(V) \ + { \ + std::vector<float> attr_vec; \ + if (p->V() && convertFlatbuffersU8toF32(*(p->V()), 1, attr_vec)) \ + assert(0 && "Failed to convert u8 buffer to f32"); \ + _##V = (!attr_vec.empty()) ? attr_vec[0] : 0.0f; \ + } #define DEF_ARGS_VER0_S_int32_t(V) DEF_ARGS_VER0_S_DEFAULT(V) -#define DEF_ARGS_VER0_S_float(V) DEF_ARGS_VER0_S_DEFAULT(V) +#define DEF_ARGS_VER0_S_float(V) DEF_ARGS_VER0_S_float_as_bytes(V) #define DEF_ARGS_VER0_S_bool(V) DEF_ARGS_VER0_S_DEFAULT(V) #define DEF_ARGS_VER0_S_ResizeMode(V) DEF_ARGS_VER0_S_DEFAULT(V) +#define DEF_ARGS_VER0_S_DType(V) DEF_ARGS_VER0_S_DEFAULT(V) #define DEF_ARGS_VER0_S_string(V) DEF_ARGS_VER0_S_STR(V) #define DEF_ARGS_VER0_S(T, V) DEF_ARGS_VER0_S_##T(V) @@ -100,6 +130,18 @@ public: DEF_ARGS_##VER(FALSE, T3, F3, V3) DEF_ARGS_##VER(FALSE, T4, F4, V4) DEF_ARGS_##VER(FALSE, T5, F5, V5) \ DEF_ARGS_##VER(FALSE, T6, F6, V6) +#define DEF_ARGS_8(VER, T0, F0, V0, T1, F1, V1, T2, F2, V2, T3, F3, V3, T4, F4, V4, T5, F5, V5, T6, F6, V6, T7, F7, \ + V7) \ + DEF_ARGS_##VER(TRUE, T0, F0, V0) DEF_ARGS_##VER(FALSE, T1, F1, V1) DEF_ARGS_##VER(FALSE, T2, F2, V2) \ + DEF_ARGS_##VER(FALSE, T3, F3, V3) DEF_ARGS_##VER(FALSE, T4, F4, V4) DEF_ARGS_##VER(FALSE, T5, F5, V5) \ + DEF_ARGS_##VER(FALSE, T6, F6, V6) DEF_ARGS_##VER(FALSE, T7, F7, V7) + +#define DEF_ARGS_9(VER, T0, F0, V0, T1, F1, V1, T2, F2, V2, T3, F3, V3, T4, F4, V4, T5, F5, V5, T6, F6, V6, T7, F7, \ + V7, T8, F8, V8) \ + DEF_ARGS_##VER(TRUE, T0, F0, V0) DEF_ARGS_##VER(FALSE, T1, F1, V1) DEF_ARGS_##VER(FALSE, T2, F2, V2) \ + DEF_ARGS_##VER(FALSE, T3, F3, V3) DEF_ARGS_##VER(FALSE, T4, F4, V4) DEF_ARGS_##VER(FALSE, T5, F5, V5) \ + DEF_ARGS_##VER(FALSE, T6, F6, V6) DEF_ARGS_##VER(FALSE, T7, F7, V7) DEF_ARGS_##VER(FALSE, T8, F8, V8) + #define DEF_VER0_VAR_DECL_PTR(NAME) const NAME* p = static_cast<const NAME*>(options); #define DEF_VER0_VAR_0(NAME) #define DEF_VER0_VAR_1(NAME) DEF_VER0_VAR_DECL_PTR(NAME) @@ -109,6 +151,8 @@ public: #define DEF_VER0_VAR_5(NAME) DEF_VER0_VAR_DECL_PTR(NAME) #define DEF_VER0_VAR_6(NAME) DEF_VER0_VAR_DECL_PTR(NAME) #define DEF_VER0_VAR_7(NAME) DEF_VER0_VAR_DECL_PTR(NAME) +#define DEF_VER0_VAR_8(NAME) DEF_VER0_VAR_DECL_PTR(NAME) +#define DEF_VER0_VAR_9(NAME) DEF_VER0_VAR_DECL_PTR(NAME) #define DEF_ATTRIBUTE(NAME, NUM_ARGS, ...) \ class Tosa##NAME##Attribute : public TosaAttributeBase \ @@ -144,6 +188,8 @@ public: #undef DEF_ARGS_5 #undef DEF_ARGS_6 #undef DEF_ARGS_7 +#undef DEF_ARGS_8 +#undef DEF_ARGS_9 #undef DEF_ARGS_VER0 #undef DEF_ARGS_VER1 #undef DEF_ARGS_VER2 @@ -153,6 +199,7 @@ public: #undef DEF_ARGS_VER0_S_float #undef DEF_ARGS_VER0_S_bool #undef DEF_ARGS_VER0_S_ResizeMode +#undef DEF_ARGS_VER0_S_DType #undef DEF_ARGS_VER0_S_string #undef DEF_ARGS_VER0_S_STR #undef DEF_ARGS_VER0_S_DEFAULT |