Add FFT2d and RFFT2d serialization support

Signed-off-by: Luke Hutton <luke.hutton@arm.com>
Change-Id: I79b3684ae1cf24e71ec7098ed7db5be5bc2f6fb2
diff --git a/include/tosa_generated.h b/include/tosa_generated.h
index bb501be..1a79453 100644
--- a/include/tosa_generated.h
+++ b/include/tosa_generated.h
@@ -71,6 +71,9 @@
 struct CustomAttribute;
 struct CustomAttributeBuilder;
 
+struct FFTAttribute;
+struct FFTAttributeBuilder;
+
 struct Version;
 struct VersionBuilder;
 
@@ -252,11 +255,13 @@
   Op_CUSTOM = 66,
   Op_COND_IF = 67,
   Op_WHILE_LOOP = 68,
+  Op_FFT2D = 69,
+  Op_RFFT2D = 70,
   Op_MIN = Op_UNKNOWN,
-  Op_MAX = Op_WHILE_LOOP
+  Op_MAX = Op_RFFT2D
 };
 
-inline const Op (&EnumValuesOp())[69] {
+inline const Op (&EnumValuesOp())[71] {
   static const Op values[] = {
     Op_UNKNOWN,
     Op_ARGMAX,
@@ -326,13 +331,15 @@
     Op_IDENTITY,
     Op_CUSTOM,
     Op_COND_IF,
-    Op_WHILE_LOOP
+    Op_WHILE_LOOP,
+    Op_FFT2D,
+    Op_RFFT2D
   };
   return values;
 }
 
 inline const char * const *EnumNamesOp() {
-  static const char * const names[70] = {
+  static const char * const names[72] = {
     "UNKNOWN",
     "ARGMAX",
     "AVG_POOL2D",
@@ -402,13 +409,15 @@
     "CUSTOM",
     "COND_IF",
     "WHILE_LOOP",
+    "FFT2D",
+    "RFFT2D",
     nullptr
   };
   return names;
 }
 
 inline const char *EnumNameOp(Op e) {
-  if (flatbuffers::IsOutRange(e, Op_UNKNOWN, Op_WHILE_LOOP)) return "";
+  if (flatbuffers::IsOutRange(e, Op_UNKNOWN, Op_RFFT2D)) return "";
   const size_t index = static_cast<size_t>(e);
   return EnumNamesOp()[index];
 }
@@ -436,11 +445,12 @@
   Attribute_FullyConnectedAttribute = 19,
   Attribute_NegateAttribute = 20,
   Attribute_CustomAttribute = 21,
+  Attribute_FFTAttribute = 22,
   Attribute_MIN = Attribute_NONE,
-  Attribute_MAX = Attribute_CustomAttribute
+  Attribute_MAX = Attribute_FFTAttribute
 };
 
-inline const Attribute (&EnumValuesAttribute())[22] {
+inline const Attribute (&EnumValuesAttribute())[23] {
   static const Attribute values[] = {
     Attribute_NONE,
     Attribute_PoolAttribute,
@@ -463,13 +473,14 @@
     Attribute_MatMulAttribute,
     Attribute_FullyConnectedAttribute,
     Attribute_NegateAttribute,
-    Attribute_CustomAttribute
+    Attribute_CustomAttribute,
+    Attribute_FFTAttribute
   };
   return values;
 }
 
 inline const char * const *EnumNamesAttribute() {
-  static const char * const names[23] = {
+  static const char * const names[24] = {
     "NONE",
     "PoolAttribute",
     "ConvAttribute",
@@ -492,13 +503,14 @@
     "FullyConnectedAttribute",
     "NegateAttribute",
     "CustomAttribute",
+    "FFTAttribute",
     nullptr
   };
   return names;
 }
 
 inline const char *EnumNameAttribute(Attribute e) {
-  if (flatbuffers::IsOutRange(e, Attribute_NONE, Attribute_CustomAttribute)) return "";
+  if (flatbuffers::IsOutRange(e, Attribute_NONE, Attribute_FFTAttribute)) return "";
   const size_t index = static_cast<size_t>(e);
   return EnumNamesAttribute()[index];
 }
@@ -591,6 +603,10 @@
   static const Attribute enum_value = Attribute_CustomAttribute;
 };
 
+template<> struct AttributeTraits<tosa::FFTAttribute> {
+  static const Attribute enum_value = Attribute_FFTAttribute;
+};
+
 bool VerifyAttribute(flatbuffers::Verifier &verifier, const void *obj, Attribute type);
 bool VerifyAttributeVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
 
@@ -2075,6 +2091,47 @@
       implementation_attrs__);
 }
 
+struct FFTAttribute FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+  typedef FFTAttributeBuilder Builder;
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
+    VT_INVERSE = 4
+  };
+  bool inverse() const {
+    return GetField<uint8_t>(VT_INVERSE, 0) != 0;
+  }
+  bool Verify(flatbuffers::Verifier &verifier) const {
+    return VerifyTableStart(verifier) &&
+           VerifyField<uint8_t>(verifier, VT_INVERSE, 1) &&
+           verifier.EndTable();
+  }
+};
+
+struct FFTAttributeBuilder {
+  typedef FFTAttribute Table;
+  flatbuffers::FlatBufferBuilder &fbb_;
+  flatbuffers::uoffset_t start_;
+  void add_inverse(bool inverse) {
+    fbb_.AddElement<uint8_t>(FFTAttribute::VT_INVERSE, static_cast<uint8_t>(inverse), 0);
+  }
+  explicit FFTAttributeBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+        : fbb_(_fbb) {
+    start_ = fbb_.StartTable();
+  }
+  flatbuffers::Offset<FFTAttribute> Finish() {
+    const auto end = fbb_.EndTable(start_);
+    auto o = flatbuffers::Offset<FFTAttribute>(end);
+    return o;
+  }
+};
+
+inline flatbuffers::Offset<FFTAttribute> CreateFFTAttribute(
+    flatbuffers::FlatBufferBuilder &_fbb,
+    bool inverse = false) {
+  FFTAttributeBuilder builder_(_fbb);
+  builder_.add_inverse(inverse);
+  return builder_.Finish();
+}
+
 struct Version FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
   typedef VersionBuilder Builder;
   enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
@@ -2320,6 +2377,9 @@
   const tosa::CustomAttribute *attribute_as_CustomAttribute() const {
     return attribute_type() == tosa::Attribute_CustomAttribute ? static_cast<const tosa::CustomAttribute *>(attribute()) : nullptr;
   }
+  const tosa::FFTAttribute *attribute_as_FFTAttribute() const {
+    return attribute_type() == tosa::Attribute_FFTAttribute ? static_cast<const tosa::FFTAttribute *>(attribute()) : nullptr;
+  }
   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *inputs() const {
     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_INPUTS);
   }
@@ -2426,6 +2486,10 @@
   return attribute_as_CustomAttribute();
 }
 
+template<> inline const tosa::FFTAttribute *TosaOperator::attribute_as<tosa::FFTAttribute>() const {
+  return attribute_as_FFTAttribute();
+}
+
 struct TosaOperatorBuilder {
   typedef TosaOperator Table;
   flatbuffers::FlatBufferBuilder &fbb_;
@@ -2821,6 +2885,10 @@
       auto ptr = reinterpret_cast<const tosa::CustomAttribute *>(obj);
       return verifier.VerifyTable(ptr);
     }
+    case Attribute_FFTAttribute: {
+      auto ptr = reinterpret_cast<const tosa::FFTAttribute *>(obj);
+      return verifier.VerifyTable(ptr);
+    }
     default: return true;
   }
 }