1 // automatically generated by the FlatBuffers compiler, do not modify
2 
3 
4 #ifndef FLATBUFFERS_GENERATED_MNN_MNN_H_
5 #define FLATBUFFERS_GENERATED_MNN_MNN_H_
6 
7 
8 #include "CaffeOp_generated.h"
9 #include "GpuLibrary_generated.h"
10 #include "TFQuantizeOp_generated.h"
11 #include "Tensor_generated.h"
12 #include "TensorflowOp_generated.h"
13 #include "Type_generated.h"
14 #include "UserDefine_generated.h"
15 
16 namespace MNN {
17 
18 struct Plugin;
19 struct PluginT;
20 
21 struct Extra;
22 struct ExtraT;
23 
24 struct StringVec;
25 struct StringVecT;
26 
27 struct WhileParam;
28 struct WhileParamT;
29 
30 struct IfParam;
31 struct IfParamT;
32 
33 struct RegionCommand;
34 struct RegionCommandT;
35 
36 struct LoopParam;
37 struct LoopParamT;
38 
39 struct Op;
40 struct OpT;
41 
42 struct View;
43 struct ViewT;
44 
45 struct Region;
46 struct RegionT;
47 
48 struct TensorDescribe;
49 struct TensorDescribeT;
50 
51 struct SubGraphProto;
52 struct SubGraphProtoT;
53 
54 struct TensorQuantInfo;
55 struct TensorQuantInfoT;
56 
57 struct Net;
58 struct NetT;
59 
60 inline const flatbuffers::TypeTable *PluginTypeTable();
61 
62 inline const flatbuffers::TypeTable *ExtraTypeTable();
63 
64 inline const flatbuffers::TypeTable *StringVecTypeTable();
65 
66 inline const flatbuffers::TypeTable *WhileParamTypeTable();
67 
68 inline const flatbuffers::TypeTable *IfParamTypeTable();
69 
70 inline const flatbuffers::TypeTable *RegionCommandTypeTable();
71 
72 inline const flatbuffers::TypeTable *LoopParamTypeTable();
73 
74 inline const flatbuffers::TypeTable *OpTypeTable();
75 
76 inline const flatbuffers::TypeTable *ViewTypeTable();
77 
78 inline const flatbuffers::TypeTable *RegionTypeTable();
79 
80 inline const flatbuffers::TypeTable *TensorDescribeTypeTable();
81 
82 inline const flatbuffers::TypeTable *SubGraphProtoTypeTable();
83 
84 inline const flatbuffers::TypeTable *TensorQuantInfoTypeTable();
85 
86 inline const flatbuffers::TypeTable *NetTypeTable();
87 
88 enum OpType {
89   OpType_AbsVal = 0,
90   OpType_QuantizedAdd = 1,
91   OpType_ArgMax = 2,
92   OpType_AsString = 3,
93   OpType_InstanceNorm = 4,
94   OpType_BatchToSpaceND = 5,
95   OpType_Bias = 6,
96   OpType_BinaryOp = 7,
97   OpType_Bnll = 8,
98   OpType_Cast = 9,
99   OpType_Concat = 10,
100   OpType_Const = 11,
101   OpType_Convolution = 12,
102   OpType_ConvolutionDepthwise = 13,
103   OpType_Crop = 14,
104   OpType_CropAndResize = 15,
105   OpType_Cubic = 16,
106   OpType_Deconvolution = 17,
107   OpType_DeconvolutionDepthwise = 18,
108   OpType_Dequantize = 19,
109   OpType_DetectionOutput = 20,
110   OpType_Dropout = 21,
111   OpType_Eltwise = 22,
112   OpType_ELU = 23,
113   OpType_Embed = 24,
114   OpType_Exp = 25,
115   OpType_ExpandDims = 26,
116   OpType_Fill = 27,
117   OpType_Flatten = 28,
118   OpType_FloorMod = 29,
119   OpType_Gather = 30,
120   OpType_GatherV2 = 31,
121   OpType_Im2Seq = 32,
122   OpType_InnerProduct = 33,
123   OpType_Input = 34,
124   OpType_Interp = 35,
125   OpType_Log = 36,
126   OpType_LRN = 37,
127   OpType_LSTM = 38,
128   OpType_MatMul = 39,
129   OpType_MVN = 40,
130   OpType_NonMaxSuppression = 41,
131   OpType_NonMaxSuppressionV2 = 42,
132   OpType_Normalize = 43,
133   OpType_Pack = 44,
134   OpType_Padding = 45,
135   OpType_Permute = 46,
136   OpType_Pooling = 47,
137   OpType_Power = 48,
138   OpType_PReLU = 49,
139   OpType_PriorBox = 50,
140   OpType_Proposal = 51,
141   OpType_QuantizedAvgPool = 52,
142   OpType_QuantizedBiasAdd = 53,
143   OpType_QuantizedConcat = 54,
144   OpType_QuantizedDepthwiseConv2D = 55,
145   OpType_QuantizedLogistic = 56,
146   OpType_QuantizedMatMul = 57,
147   OpType_QuantizedMaxPool = 58,
148   OpType_QuantizedRelu = 59,
149   OpType_QuantizedRelu6 = 60,
150   OpType_QuantizedReshape = 61,
151   OpType_QuantizedSoftmax = 62,
152   OpType_QuantizeMaxMin = 63,
153   OpType_QuantizeV2 = 64,
154   OpType_Range = 65,
155   OpType_Rank = 66,
156   OpType_ReduceJoin = 67,
157   OpType_Reduction = 68,
158   OpType_ReLU = 69,
159   OpType_ReLU6 = 70,
160   OpType_RequantizationRange = 71,
161   OpType_Requantize = 72,
162   OpType_Reshape = 73,
163   OpType_Resize = 74,
164   OpType_RNN = 75,
165   OpType_ROIPooling = 76,
166   OpType_Scale = 77,
167   OpType_Selu = 78,
168   OpType_Seq2Out = 79,
169   OpType_Shape = 80,
170   OpType_Sigmoid = 81,
171   OpType_Size = 82,
172   OpType_Slice = 83,
173   OpType_SliceTf = 84,
174   OpType_Softmax = 85,
175   OpType_SpaceToBatchND = 86,
176   OpType_SpatialProduct = 87,
177   OpType_Split = 88,
178   OpType_SPP = 89,
179   OpType_Squeeze = 90,
180   OpType_StridedSlice = 91,
181   OpType_StringJoin = 92,
182   OpType_StringSplit = 93,
183   OpType_StringToNumber = 94,
184   OpType_TanH = 95,
185   OpType_TfQuantizedConv2D = 96,
186   OpType_Threshold = 97,
187   OpType_Tile = 98,
188   OpType_TopKV2 = 99,
189   OpType_Transpose = 100,
190   OpType_UnaryOp = 101,
191   OpType_Unpack = 102,
192   OpType_Where = 103,
193   OpType_Moments = 104,
194   OpType_RNNSequenceGRU = 105,
195   OpType_BatchMatMul = 106,
196   OpType_Unsqueeze = 107,
197   OpType_CosineSimilarity = 108,
198   OpType_DepthToSpace = 109,
199   OpType_SpaceToDepth = 110,
200   OpType_ReverseSequence = 111,
201   OpType_Pooling3D = 112,
202   OpType_Convolution3D = 113,
203   OpType_MatrixBandPart = 114,
204   OpType_GatherND = 115,
205   OpType_DetectionPostProcess = 116,
206   OpType_UnravelIndex = 117,
207   OpType_ScatterNd = 118,
208   OpType_OneHot = 119,
209   OpType_BroadcastTo = 120,
210   OpType_Dilation2D = 121,
211   OpType_Raster = 128,
212   OpType_ConvertTensor = 129,
213   OpType_ArgMin = 130,
214   OpType_LinSpace = 131,
215   OpType_RandomUniform = 132,
216   OpType_TensorArray = 133,
217   OpType_TensorArraySize = 134,
218   OpType_TensorArrayRead = 135,
219   OpType_TensorArrayWrite = 136,
220   OpType_TensorArrayGather = 137,
221   OpType_TensorArrayScatter = 138,
222   OpType_TensorArraySplit = 139,
223   OpType_TensorArrayConcat = 140,
224   OpType_LSTMBlockCell = 141,
225   OpType_Reverse = 142,
226   OpType_Plugin = 256,
227   OpType_Select = 257,
228   OpType_ZerosLike = 258,
229   OpType_Broastcast = 259,
230   OpType_SetDiff1D = 260,
231   OpType_ReluGrad = 261,
232   OpType_Relu6Grad = 262,
233   OpType_PoolGrad = 263,
234   OpType_SoftmaxGrad = 264,
235   OpType_Conv2DBackPropFilter = 265,
236   OpType_TrainableParam = 266,
237   OpType_BatchNorm = 267,
238   OpType_ZeroGrad = 268,
239   OpType_Extra = 512,
240   OpType_ConvInt8 = 513,
241   OpType_Int8ToFloat = 514,
242   OpType_DepthwiseConvInt8 = 515,
243   OpType_PoolInt8 = 516,
244   OpType_FloatToInt8 = 517,
245   OpType_EltwiseInt8 = 518,
246   OpType_While = 600,
247   OpType_If = 601,
248   OpType_LayerNorm = 603,
249   OpType_GridSample = 604,
250   OpType_MIN = OpType_AbsVal,
251   OpType_MAX = OpType_GridSample
252 };
253 
EnumValuesOpType()254 inline const OpType (&EnumValuesOpType())[161] {
255   static const OpType values[] = {
256     OpType_AbsVal,
257     OpType_QuantizedAdd,
258     OpType_ArgMax,
259     OpType_AsString,
260     OpType_InstanceNorm,
261     OpType_BatchToSpaceND,
262     OpType_Bias,
263     OpType_BinaryOp,
264     OpType_Bnll,
265     OpType_Cast,
266     OpType_Concat,
267     OpType_Const,
268     OpType_Convolution,
269     OpType_ConvolutionDepthwise,
270     OpType_Crop,
271     OpType_CropAndResize,
272     OpType_Cubic,
273     OpType_Deconvolution,
274     OpType_DeconvolutionDepthwise,
275     OpType_Dequantize,
276     OpType_DetectionOutput,
277     OpType_Dropout,
278     OpType_Eltwise,
279     OpType_ELU,
280     OpType_Embed,
281     OpType_Exp,
282     OpType_ExpandDims,
283     OpType_Fill,
284     OpType_Flatten,
285     OpType_FloorMod,
286     OpType_Gather,
287     OpType_GatherV2,
288     OpType_Im2Seq,
289     OpType_InnerProduct,
290     OpType_Input,
291     OpType_Interp,
292     OpType_Log,
293     OpType_LRN,
294     OpType_LSTM,
295     OpType_MatMul,
296     OpType_MVN,
297     OpType_NonMaxSuppression,
298     OpType_NonMaxSuppressionV2,
299     OpType_Normalize,
300     OpType_Pack,
301     OpType_Padding,
302     OpType_Permute,
303     OpType_Pooling,
304     OpType_Power,
305     OpType_PReLU,
306     OpType_PriorBox,
307     OpType_Proposal,
308     OpType_QuantizedAvgPool,
309     OpType_QuantizedBiasAdd,
310     OpType_QuantizedConcat,
311     OpType_QuantizedDepthwiseConv2D,
312     OpType_QuantizedLogistic,
313     OpType_QuantizedMatMul,
314     OpType_QuantizedMaxPool,
315     OpType_QuantizedRelu,
316     OpType_QuantizedRelu6,
317     OpType_QuantizedReshape,
318     OpType_QuantizedSoftmax,
319     OpType_QuantizeMaxMin,
320     OpType_QuantizeV2,
321     OpType_Range,
322     OpType_Rank,
323     OpType_ReduceJoin,
324     OpType_Reduction,
325     OpType_ReLU,
326     OpType_ReLU6,
327     OpType_RequantizationRange,
328     OpType_Requantize,
329     OpType_Reshape,
330     OpType_Resize,
331     OpType_RNN,
332     OpType_ROIPooling,
333     OpType_Scale,
334     OpType_Selu,
335     OpType_Seq2Out,
336     OpType_Shape,
337     OpType_Sigmoid,
338     OpType_Size,
339     OpType_Slice,
340     OpType_SliceTf,
341     OpType_Softmax,
342     OpType_SpaceToBatchND,
343     OpType_SpatialProduct,
344     OpType_Split,
345     OpType_SPP,
346     OpType_Squeeze,
347     OpType_StridedSlice,
348     OpType_StringJoin,
349     OpType_StringSplit,
350     OpType_StringToNumber,
351     OpType_TanH,
352     OpType_TfQuantizedConv2D,
353     OpType_Threshold,
354     OpType_Tile,
355     OpType_TopKV2,
356     OpType_Transpose,
357     OpType_UnaryOp,
358     OpType_Unpack,
359     OpType_Where,
360     OpType_Moments,
361     OpType_RNNSequenceGRU,
362     OpType_BatchMatMul,
363     OpType_Unsqueeze,
364     OpType_CosineSimilarity,
365     OpType_DepthToSpace,
366     OpType_SpaceToDepth,
367     OpType_ReverseSequence,
368     OpType_Pooling3D,
369     OpType_Convolution3D,
370     OpType_MatrixBandPart,
371     OpType_GatherND,
372     OpType_DetectionPostProcess,
373     OpType_UnravelIndex,
374     OpType_ScatterNd,
375     OpType_OneHot,
376     OpType_BroadcastTo,
377     OpType_Dilation2D,
378     OpType_Raster,
379     OpType_ConvertTensor,
380     OpType_ArgMin,
381     OpType_LinSpace,
382     OpType_RandomUniform,
383     OpType_TensorArray,
384     OpType_TensorArraySize,
385     OpType_TensorArrayRead,
386     OpType_TensorArrayWrite,
387     OpType_TensorArrayGather,
388     OpType_TensorArrayScatter,
389     OpType_TensorArraySplit,
390     OpType_TensorArrayConcat,
391     OpType_LSTMBlockCell,
392     OpType_Reverse,
393     OpType_Plugin,
394     OpType_Select,
395     OpType_ZerosLike,
396     OpType_Broastcast,
397     OpType_SetDiff1D,
398     OpType_ReluGrad,
399     OpType_Relu6Grad,
400     OpType_PoolGrad,
401     OpType_SoftmaxGrad,
402     OpType_Conv2DBackPropFilter,
403     OpType_TrainableParam,
404     OpType_BatchNorm,
405     OpType_ZeroGrad,
406     OpType_Extra,
407     OpType_ConvInt8,
408     OpType_Int8ToFloat,
409     OpType_DepthwiseConvInt8,
410     OpType_PoolInt8,
411     OpType_FloatToInt8,
412     OpType_EltwiseInt8,
413     OpType_While,
414     OpType_If,
415     OpType_LayerNorm,
416     OpType_GridSample
417   };
418   return values;
419 }
420 
EnumNamesOpType()421 inline const char * const *EnumNamesOpType() {
422   static const char * const names[] = {
423     "AbsVal",
424     "QuantizedAdd",
425     "ArgMax",
426     "AsString",
427     "InstanceNorm",
428     "BatchToSpaceND",
429     "Bias",
430     "BinaryOp",
431     "Bnll",
432     "Cast",
433     "Concat",
434     "Const",
435     "Convolution",
436     "ConvolutionDepthwise",
437     "Crop",
438     "CropAndResize",
439     "Cubic",
440     "Deconvolution",
441     "DeconvolutionDepthwise",
442     "Dequantize",
443     "DetectionOutput",
444     "Dropout",
445     "Eltwise",
446     "ELU",
447     "Embed",
448     "Exp",
449     "ExpandDims",
450     "Fill",
451     "Flatten",
452     "FloorMod",
453     "Gather",
454     "GatherV2",
455     "Im2Seq",
456     "InnerProduct",
457     "Input",
458     "Interp",
459     "Log",
460     "LRN",
461     "LSTM",
462     "MatMul",
463     "MVN",
464     "NonMaxSuppression",
465     "NonMaxSuppressionV2",
466     "Normalize",
467     "Pack",
468     "Padding",
469     "Permute",
470     "Pooling",
471     "Power",
472     "PReLU",
473     "PriorBox",
474     "Proposal",
475     "QuantizedAvgPool",
476     "QuantizedBiasAdd",
477     "QuantizedConcat",
478     "QuantizedDepthwiseConv2D",
479     "QuantizedLogistic",
480     "QuantizedMatMul",
481     "QuantizedMaxPool",
482     "QuantizedRelu",
483     "QuantizedRelu6",
484     "QuantizedReshape",
485     "QuantizedSoftmax",
486     "QuantizeMaxMin",
487     "QuantizeV2",
488     "Range",
489     "Rank",
490     "ReduceJoin",
491     "Reduction",
492     "ReLU",
493     "ReLU6",
494     "RequantizationRange",
495     "Requantize",
496     "Reshape",
497     "Resize",
498     "RNN",
499     "ROIPooling",
500     "Scale",
501     "Selu",
502     "Seq2Out",
503     "Shape",
504     "Sigmoid",
505     "Size",
506     "Slice",
507     "SliceTf",
508     "Softmax",
509     "SpaceToBatchND",
510     "SpatialProduct",
511     "Split",
512     "SPP",
513     "Squeeze",
514     "StridedSlice",
515     "StringJoin",
516     "StringSplit",
517     "StringToNumber",
518     "TanH",
519     "TfQuantizedConv2D",
520     "Threshold",
521     "Tile",
522     "TopKV2",
523     "Transpose",
524     "UnaryOp",
525     "Unpack",
526     "Where",
527     "Moments",
528     "RNNSequenceGRU",
529     "BatchMatMul",
530     "Unsqueeze",
531     "CosineSimilarity",
532     "DepthToSpace",
533     "SpaceToDepth",
534     "ReverseSequence",
535     "Pooling3D",
536     "Convolution3D",
537     "MatrixBandPart",
538     "GatherND",
539     "DetectionPostProcess",
540     "UnravelIndex",
541     "ScatterNd",
542     "OneHot",
543     "BroadcastTo",
544     "Dilation2D",
545     "",
546     "",
547     "",
548     "",
549     "",
550     "",
551     "Raster",
552     "ConvertTensor",
553     "ArgMin",
554     "LinSpace",
555     "RandomUniform",
556     "TensorArray",
557     "TensorArraySize",
558     "TensorArrayRead",
559     "TensorArrayWrite",
560     "TensorArrayGather",
561     "TensorArrayScatter",
562     "TensorArraySplit",
563     "TensorArrayConcat",
564     "LSTMBlockCell",
565     "Reverse",
566     "",
567     "",
568     "",
569     "",
570     "",
571     "",
572     "",
573     "",
574     "",
575     "",
576     "",
577     "",
578     "",
579     "",
580     "",
581     "",
582     "",
583     "",
584     "",
585     "",
586     "",
587     "",
588     "",
589     "",
590     "",
591     "",
592     "",
593     "",
594     "",
595     "",
596     "",
597     "",
598     "",
599     "",
600     "",
601     "",
602     "",
603     "",
604     "",
605     "",
606     "",
607     "",
608     "",
609     "",
610     "",
611     "",
612     "",
613     "",
614     "",
615     "",
616     "",
617     "",
618     "",
619     "",
620     "",
621     "",
622     "",
623     "",
624     "",
625     "",
626     "",
627     "",
628     "",
629     "",
630     "",
631     "",
632     "",
633     "",
634     "",
635     "",
636     "",
637     "",
638     "",
639     "",
640     "",
641     "",
642     "",
643     "",
644     "",
645     "",
646     "",
647     "",
648     "",
649     "",
650     "",
651     "",
652     "",
653     "",
654     "",
655     "",
656     "",
657     "",
658     "",
659     "",
660     "",
661     "",
662     "",
663     "",
664     "",
665     "",
666     "",
667     "",
668     "",
669     "",
670     "",
671     "",
672     "",
673     "",
674     "",
675     "",
676     "",
677     "",
678     "",
679     "Plugin",
680     "Select",
681     "ZerosLike",
682     "Broastcast",
683     "SetDiff1D",
684     "ReluGrad",
685     "Relu6Grad",
686     "PoolGrad",
687     "SoftmaxGrad",
688     "Conv2DBackPropFilter",
689     "TrainableParam",
690     "BatchNorm",
691     "ZeroGrad",
692     "",
693     "",
694     "",
695     "",
696     "",
697     "",
698     "",
699     "",
700     "",
701     "",
702     "",
703     "",
704     "",
705     "",
706     "",
707     "",
708     "",
709     "",
710     "",
711     "",
712     "",
713     "",
714     "",
715     "",
716     "",
717     "",
718     "",
719     "",
720     "",
721     "",
722     "",
723     "",
724     "",
725     "",
726     "",
727     "",
728     "",
729     "",
730     "",
731     "",
732     "",
733     "",
734     "",
735     "",
736     "",
737     "",
738     "",
739     "",
740     "",
741     "",
742     "",
743     "",
744     "",
745     "",
746     "",
747     "",
748     "",
749     "",
750     "",
751     "",
752     "",
753     "",
754     "",
755     "",
756     "",
757     "",
758     "",
759     "",
760     "",
761     "",
762     "",
763     "",
764     "",
765     "",
766     "",
767     "",
768     "",
769     "",
770     "",
771     "",
772     "",
773     "",
774     "",
775     "",
776     "",
777     "",
778     "",
779     "",
780     "",
781     "",
782     "",
783     "",
784     "",
785     "",
786     "",
787     "",
788     "",
789     "",
790     "",
791     "",
792     "",
793     "",
794     "",
795     "",
796     "",
797     "",
798     "",
799     "",
800     "",
801     "",
802     "",
803     "",
804     "",
805     "",
806     "",
807     "",
808     "",
809     "",
810     "",
811     "",
812     "",
813     "",
814     "",
815     "",
816     "",
817     "",
818     "",
819     "",
820     "",
821     "",
822     "",
823     "",
824     "",
825     "",
826     "",
827     "",
828     "",
829     "",
830     "",
831     "",
832     "",
833     "",
834     "",
835     "",
836     "",
837     "",
838     "",
839     "",
840     "",
841     "",
842     "",
843     "",
844     "",
845     "",
846     "",
847     "",
848     "",
849     "",
850     "",
851     "",
852     "",
853     "",
854     "",
855     "",
856     "",
857     "",
858     "",
859     "",
860     "",
861     "",
862     "",
863     "",
864     "",
865     "",
866     "",
867     "",
868     "",
869     "",
870     "",
871     "",
872     "",
873     "",
874     "",
875     "",
876     "",
877     "",
878     "",
879     "",
880     "",
881     "",
882     "",
883     "",
884     "",
885     "",
886     "",
887     "",
888     "",
889     "",
890     "",
891     "",
892     "",
893     "",
894     "",
895     "",
896     "",
897     "",
898     "",
899     "",
900     "",
901     "",
902     "",
903     "",
904     "",
905     "",
906     "",
907     "",
908     "",
909     "",
910     "",
911     "",
912     "",
913     "",
914     "",
915     "",
916     "",
917     "",
918     "",
919     "",
920     "",
921     "",
922     "",
923     "",
924     "",
925     "",
926     "",
927     "",
928     "",
929     "",
930     "",
931     "",
932     "",
933     "",
934     "",
935     "Extra",
936     "ConvInt8",
937     "Int8ToFloat",
938     "DepthwiseConvInt8",
939     "PoolInt8",
940     "FloatToInt8",
941     "EltwiseInt8",
942     "",
943     "",
944     "",
945     "",
946     "",
947     "",
948     "",
949     "",
950     "",
951     "",
952     "",
953     "",
954     "",
955     "",
956     "",
957     "",
958     "",
959     "",
960     "",
961     "",
962     "",
963     "",
964     "",
965     "",
966     "",
967     "",
968     "",
969     "",
970     "",
971     "",
972     "",
973     "",
974     "",
975     "",
976     "",
977     "",
978     "",
979     "",
980     "",
981     "",
982     "",
983     "",
984     "",
985     "",
986     "",
987     "",
988     "",
989     "",
990     "",
991     "",
992     "",
993     "",
994     "",
995     "",
996     "",
997     "",
998     "",
999     "",
1000     "",
1001     "",
1002     "",
1003     "",
1004     "",
1005     "",
1006     "",
1007     "",
1008     "",
1009     "",
1010     "",
1011     "",
1012     "",
1013     "",
1014     "",
1015     "",
1016     "",
1017     "",
1018     "",
1019     "",
1020     "",
1021     "",
1022     "",
1023     "While",
1024     "If",
1025     "",
1026     "LayerNorm",
1027     "GridSample",
1028     nullptr
1029   };
1030   return names;
1031 }
1032 
EnumNameOpType(OpType e)1033 inline const char *EnumNameOpType(OpType e) {
1034   if (e < OpType_AbsVal || e > OpType_GridSample) return "";
1035   const size_t index = static_cast<int>(e);
1036   return EnumNamesOpType()[index];
1037 }
1038 
1039 enum OpParameter {
1040   OpParameter_NONE = 0,
1041   OpParameter_QuantizedAdd = 1,
1042   OpParameter_ArgMax = 2,
1043   OpParameter_AsString = 3,
1044   OpParameter_Axis = 4,
1045   OpParameter_BatchNorm = 5,
1046   OpParameter_BinaryOp = 6,
1047   OpParameter_Blob = 7,
1048   OpParameter_CastParam = 8,
1049   OpParameter_Convolution2D = 9,
1050   OpParameter_Crop = 10,
1051   OpParameter_CropAndResize = 11,
1052   OpParameter_Dequantize = 12,
1053   OpParameter_DetectionOutput = 13,
1054   OpParameter_Eltwise = 14,
1055   OpParameter_ExpandDims = 15,
1056   OpParameter_Fill = 16,
1057   OpParameter_Flatten = 17,
1058   OpParameter_Gather = 18,
1059   OpParameter_GatherV2 = 19,
1060   OpParameter_InnerProduct = 20,
1061   OpParameter_Input = 21,
1062   OpParameter_Interp = 22,
1063   OpParameter_LRN = 23,
1064   OpParameter_LSTM = 24,
1065   OpParameter_MatMul = 25,
1066   OpParameter_NonMaxSuppressionV2 = 26,
1067   OpParameter_Normalize = 27,
1068   OpParameter_PackParam = 28,
1069   OpParameter_Permute = 29,
1070   OpParameter_Plugin = 30,
1071   OpParameter_Pool = 31,
1072   OpParameter_PRelu = 32,
1073   OpParameter_PriorBox = 33,
1074   OpParameter_Proposal = 34,
1075   OpParameter_QuantizedAvgPool = 35,
1076   OpParameter_QuantizedBiasAdd = 36,
1077   OpParameter_QuantizedConcat = 37,
1078   OpParameter_QuantizedLogistic = 38,
1079   OpParameter_QuantizedMatMul = 39,
1080   OpParameter_QuantizedMaxPool = 40,
1081   OpParameter_QuantizedRelu = 41,
1082   OpParameter_QuantizedRelu6 = 42,
1083   OpParameter_QuantizedReshape = 43,
1084   OpParameter_QuantizedSoftmax = 44,
1085   OpParameter_QuantizeMaxMin = 45,
1086   OpParameter_QuantizeV2 = 46,
1087   OpParameter_Range = 47,
1088   OpParameter_Rank = 48,
1089   OpParameter_ReduceJoin = 49,
1090   OpParameter_ReductionParam = 50,
1091   OpParameter_Relu = 51,
1092   OpParameter_Relu6 = 52,
1093   OpParameter_RequantizationRange = 53,
1094   OpParameter_Requantize = 54,
1095   OpParameter_Reshape = 55,
1096   OpParameter_Resize = 56,
1097   OpParameter_RoiPooling = 57,
1098   OpParameter_Scale = 58,
1099   OpParameter_Selu = 59,
1100   OpParameter_Size = 60,
1101   OpParameter_Slice = 61,
1102   OpParameter_SliceTf = 62,
1103   OpParameter_SpaceBatch = 63,
1104   OpParameter_SqueezeParam = 64,
1105   OpParameter_StridedSliceParam = 65,
1106   OpParameter_TensorConvertInfo = 66,
1107   OpParameter_TfQuantizedConv2D = 67,
1108   OpParameter_TopKV2 = 68,
1109   OpParameter_Transpose = 69,
1110   OpParameter_UnaryOp = 70,
1111   OpParameter_MomentsParam = 71,
1112   OpParameter_RNNParam = 72,
1113   OpParameter_BatchMatMulParam = 73,
1114   OpParameter_QuantizedFloatParam = 74,
1115   OpParameter_DepthSpaceParam = 75,
1116   OpParameter_EltwiseInt8 = 76,
1117   OpParameter_ReverseSequenceParam = 77,
1118   OpParameter_Extra = 78,
1119   OpParameter_Pool3D = 79,
1120   OpParameter_Convolution3D = 80,
1121   OpParameter_ELU = 81,
1122   OpParameter_DetectionPostProcessParam = 82,
1123   OpParameter_OneHotParam = 83,
1124   OpParameter_PadParam = 84,
1125   OpParameter_WhileParam = 85,
1126   OpParameter_IfParam = 86,
1127   OpParameter_RandomUniform = 87,
1128   OpParameter_LayerNorm = 88,
1129   OpParameter_TensorArray = 89,
1130   OpParameter_LSTMBlockCell = 90,
1131   OpParameter_GridSample = 91,
1132   OpParameter_LoopParam = 92,
1133   OpParameter_MIN = OpParameter_NONE,
1134   OpParameter_MAX = OpParameter_LoopParam
1135 };
1136 
EnumValuesOpParameter()1137 inline const OpParameter (&EnumValuesOpParameter())[93] {
1138   static const OpParameter values[] = {
1139     OpParameter_NONE,
1140     OpParameter_QuantizedAdd,
1141     OpParameter_ArgMax,
1142     OpParameter_AsString,
1143     OpParameter_Axis,
1144     OpParameter_BatchNorm,
1145     OpParameter_BinaryOp,
1146     OpParameter_Blob,
1147     OpParameter_CastParam,
1148     OpParameter_Convolution2D,
1149     OpParameter_Crop,
1150     OpParameter_CropAndResize,
1151     OpParameter_Dequantize,
1152     OpParameter_DetectionOutput,
1153     OpParameter_Eltwise,
1154     OpParameter_ExpandDims,
1155     OpParameter_Fill,
1156     OpParameter_Flatten,
1157     OpParameter_Gather,
1158     OpParameter_GatherV2,
1159     OpParameter_InnerProduct,
1160     OpParameter_Input,
1161     OpParameter_Interp,
1162     OpParameter_LRN,
1163     OpParameter_LSTM,
1164     OpParameter_MatMul,
1165     OpParameter_NonMaxSuppressionV2,
1166     OpParameter_Normalize,
1167     OpParameter_PackParam,
1168     OpParameter_Permute,
1169     OpParameter_Plugin,
1170     OpParameter_Pool,
1171     OpParameter_PRelu,
1172     OpParameter_PriorBox,
1173     OpParameter_Proposal,
1174     OpParameter_QuantizedAvgPool,
1175     OpParameter_QuantizedBiasAdd,
1176     OpParameter_QuantizedConcat,
1177     OpParameter_QuantizedLogistic,
1178     OpParameter_QuantizedMatMul,
1179     OpParameter_QuantizedMaxPool,
1180     OpParameter_QuantizedRelu,
1181     OpParameter_QuantizedRelu6,
1182     OpParameter_QuantizedReshape,
1183     OpParameter_QuantizedSoftmax,
1184     OpParameter_QuantizeMaxMin,
1185     OpParameter_QuantizeV2,
1186     OpParameter_Range,
1187     OpParameter_Rank,
1188     OpParameter_ReduceJoin,
1189     OpParameter_ReductionParam,
1190     OpParameter_Relu,
1191     OpParameter_Relu6,
1192     OpParameter_RequantizationRange,
1193     OpParameter_Requantize,
1194     OpParameter_Reshape,
1195     OpParameter_Resize,
1196     OpParameter_RoiPooling,
1197     OpParameter_Scale,
1198     OpParameter_Selu,
1199     OpParameter_Size,
1200     OpParameter_Slice,
1201     OpParameter_SliceTf,
1202     OpParameter_SpaceBatch,
1203     OpParameter_SqueezeParam,
1204     OpParameter_StridedSliceParam,
1205     OpParameter_TensorConvertInfo,
1206     OpParameter_TfQuantizedConv2D,
1207     OpParameter_TopKV2,
1208     OpParameter_Transpose,
1209     OpParameter_UnaryOp,
1210     OpParameter_MomentsParam,
1211     OpParameter_RNNParam,
1212     OpParameter_BatchMatMulParam,
1213     OpParameter_QuantizedFloatParam,
1214     OpParameter_DepthSpaceParam,
1215     OpParameter_EltwiseInt8,
1216     OpParameter_ReverseSequenceParam,
1217     OpParameter_Extra,
1218     OpParameter_Pool3D,
1219     OpParameter_Convolution3D,
1220     OpParameter_ELU,
1221     OpParameter_DetectionPostProcessParam,
1222     OpParameter_OneHotParam,
1223     OpParameter_PadParam,
1224     OpParameter_WhileParam,
1225     OpParameter_IfParam,
1226     OpParameter_RandomUniform,
1227     OpParameter_LayerNorm,
1228     OpParameter_TensorArray,
1229     OpParameter_LSTMBlockCell,
1230     OpParameter_GridSample,
1231     OpParameter_LoopParam
1232   };
1233   return values;
1234 }
1235 
EnumNamesOpParameter()1236 inline const char * const *EnumNamesOpParameter() {
1237   static const char * const names[] = {
1238     "NONE",
1239     "QuantizedAdd",
1240     "ArgMax",
1241     "AsString",
1242     "Axis",
1243     "BatchNorm",
1244     "BinaryOp",
1245     "Blob",
1246     "CastParam",
1247     "Convolution2D",
1248     "Crop",
1249     "CropAndResize",
1250     "Dequantize",
1251     "DetectionOutput",
1252     "Eltwise",
1253     "ExpandDims",
1254     "Fill",
1255     "Flatten",
1256     "Gather",
1257     "GatherV2",
1258     "InnerProduct",
1259     "Input",
1260     "Interp",
1261     "LRN",
1262     "LSTM",
1263     "MatMul",
1264     "NonMaxSuppressionV2",
1265     "Normalize",
1266     "PackParam",
1267     "Permute",
1268     "Plugin",
1269     "Pool",
1270     "PRelu",
1271     "PriorBox",
1272     "Proposal",
1273     "QuantizedAvgPool",
1274     "QuantizedBiasAdd",
1275     "QuantizedConcat",
1276     "QuantizedLogistic",
1277     "QuantizedMatMul",
1278     "QuantizedMaxPool",
1279     "QuantizedRelu",
1280     "QuantizedRelu6",
1281     "QuantizedReshape",
1282     "QuantizedSoftmax",
1283     "QuantizeMaxMin",
1284     "QuantizeV2",
1285     "Range",
1286     "Rank",
1287     "ReduceJoin",
1288     "ReductionParam",
1289     "Relu",
1290     "Relu6",
1291     "RequantizationRange",
1292     "Requantize",
1293     "Reshape",
1294     "Resize",
1295     "RoiPooling",
1296     "Scale",
1297     "Selu",
1298     "Size",
1299     "Slice",
1300     "SliceTf",
1301     "SpaceBatch",
1302     "SqueezeParam",
1303     "StridedSliceParam",
1304     "TensorConvertInfo",
1305     "TfQuantizedConv2D",
1306     "TopKV2",
1307     "Transpose",
1308     "UnaryOp",
1309     "MomentsParam",
1310     "RNNParam",
1311     "BatchMatMulParam",
1312     "QuantizedFloatParam",
1313     "DepthSpaceParam",
1314     "EltwiseInt8",
1315     "ReverseSequenceParam",
1316     "Extra",
1317     "Pool3D",
1318     "Convolution3D",
1319     "ELU",
1320     "DetectionPostProcessParam",
1321     "OneHotParam",
1322     "PadParam",
1323     "WhileParam",
1324     "IfParam",
1325     "RandomUniform",
1326     "LayerNorm",
1327     "TensorArray",
1328     "LSTMBlockCell",
1329     "GridSample",
1330     "LoopParam",
1331     nullptr
1332   };
1333   return names;
1334 }
1335 
EnumNameOpParameter(OpParameter e)1336 inline const char *EnumNameOpParameter(OpParameter e) {
1337   if (e < OpParameter_NONE || e > OpParameter_LoopParam) return "";
1338   const size_t index = static_cast<int>(e);
1339   return EnumNamesOpParameter()[index];
1340 }
1341 
1342 template<typename T> struct OpParameterTraits {
1343   static const OpParameter enum_value = OpParameter_NONE;
1344 };
1345 
1346 template<> struct OpParameterTraits<QuantizedAdd> {
1347   static const OpParameter enum_value = OpParameter_QuantizedAdd;
1348 };
1349 
1350 template<> struct OpParameterTraits<ArgMax> {
1351   static const OpParameter enum_value = OpParameter_ArgMax;
1352 };
1353 
1354 template<> struct OpParameterTraits<AsString> {
1355   static const OpParameter enum_value = OpParameter_AsString;
1356 };
1357 
1358 template<> struct OpParameterTraits<Axis> {
1359   static const OpParameter enum_value = OpParameter_Axis;
1360 };
1361 
1362 template<> struct OpParameterTraits<BatchNorm> {
1363   static const OpParameter enum_value = OpParameter_BatchNorm;
1364 };
1365 
1366 template<> struct OpParameterTraits<BinaryOp> {
1367   static const OpParameter enum_value = OpParameter_BinaryOp;
1368 };
1369 
1370 template<> struct OpParameterTraits<Blob> {
1371   static const OpParameter enum_value = OpParameter_Blob;
1372 };
1373 
1374 template<> struct OpParameterTraits<CastParam> {
1375   static const OpParameter enum_value = OpParameter_CastParam;
1376 };
1377 
1378 template<> struct OpParameterTraits<Convolution2D> {
1379   static const OpParameter enum_value = OpParameter_Convolution2D;
1380 };
1381 
1382 template<> struct OpParameterTraits<Crop> {
1383   static const OpParameter enum_value = OpParameter_Crop;
1384 };
1385 
1386 template<> struct OpParameterTraits<CropAndResize> {
1387   static const OpParameter enum_value = OpParameter_CropAndResize;
1388 };
1389 
1390 template<> struct OpParameterTraits<Dequantize> {
1391   static const OpParameter enum_value = OpParameter_Dequantize;
1392 };
1393 
1394 template<> struct OpParameterTraits<DetectionOutput> {
1395   static const OpParameter enum_value = OpParameter_DetectionOutput;
1396 };
1397 
1398 template<> struct OpParameterTraits<Eltwise> {
1399   static const OpParameter enum_value = OpParameter_Eltwise;
1400 };
1401 
1402 template<> struct OpParameterTraits<ExpandDims> {
1403   static const OpParameter enum_value = OpParameter_ExpandDims;
1404 };
1405 
1406 template<> struct OpParameterTraits<Fill> {
1407   static const OpParameter enum_value = OpParameter_Fill;
1408 };
1409 
1410 template<> struct OpParameterTraits<Flatten> {
1411   static const OpParameter enum_value = OpParameter_Flatten;
1412 };
1413 
1414 template<> struct OpParameterTraits<Gather> {
1415   static const OpParameter enum_value = OpParameter_Gather;
1416 };
1417 
1418 template<> struct OpParameterTraits<GatherV2> {
1419   static const OpParameter enum_value = OpParameter_GatherV2;
1420 };
1421 
1422 template<> struct OpParameterTraits<InnerProduct> {
1423   static const OpParameter enum_value = OpParameter_InnerProduct;
1424 };
1425 
1426 template<> struct OpParameterTraits<Input> {
1427   static const OpParameter enum_value = OpParameter_Input;
1428 };
1429 
1430 template<> struct OpParameterTraits<Interp> {
1431   static const OpParameter enum_value = OpParameter_Interp;
1432 };
1433 
1434 template<> struct OpParameterTraits<LRN> {
1435   static const OpParameter enum_value = OpParameter_LRN;
1436 };
1437 
1438 template<> struct OpParameterTraits<LSTM> {
1439   static const OpParameter enum_value = OpParameter_LSTM;
1440 };
1441 
1442 template<> struct OpParameterTraits<MatMul> {
1443   static const OpParameter enum_value = OpParameter_MatMul;
1444 };
1445 
1446 template<> struct OpParameterTraits<NonMaxSuppressionV2> {
1447   static const OpParameter enum_value = OpParameter_NonMaxSuppressionV2;
1448 };
1449 
1450 template<> struct OpParameterTraits<Normalize> {
1451   static const OpParameter enum_value = OpParameter_Normalize;
1452 };
1453 
1454 template<> struct OpParameterTraits<PackParam> {
1455   static const OpParameter enum_value = OpParameter_PackParam;
1456 };
1457 
1458 template<> struct OpParameterTraits<Permute> {
1459   static const OpParameter enum_value = OpParameter_Permute;
1460 };
1461 
1462 template<> struct OpParameterTraits<Plugin> {
1463   static const OpParameter enum_value = OpParameter_Plugin;
1464 };
1465 
1466 template<> struct OpParameterTraits<Pool> {
1467   static const OpParameter enum_value = OpParameter_Pool;
1468 };
1469 
1470 template<> struct OpParameterTraits<PRelu> {
1471   static const OpParameter enum_value = OpParameter_PRelu;
1472 };
1473 
1474 template<> struct OpParameterTraits<PriorBox> {
1475   static const OpParameter enum_value = OpParameter_PriorBox;
1476 };
1477 
1478 template<> struct OpParameterTraits<Proposal> {
1479   static const OpParameter enum_value = OpParameter_Proposal;
1480 };
1481 
1482 template<> struct OpParameterTraits<QuantizedAvgPool> {
1483   static const OpParameter enum_value = OpParameter_QuantizedAvgPool;
1484 };
1485 
1486 template<> struct OpParameterTraits<QuantizedBiasAdd> {
1487   static const OpParameter enum_value = OpParameter_QuantizedBiasAdd;
1488 };
1489 
1490 template<> struct OpParameterTraits<QuantizedConcat> {
1491   static const OpParameter enum_value = OpParameter_QuantizedConcat;
1492 };
1493 
1494 template<> struct OpParameterTraits<QuantizedLogistic> {
1495   static const OpParameter enum_value = OpParameter_QuantizedLogistic;
1496 };
1497 
1498 template<> struct OpParameterTraits<QuantizedMatMul> {
1499   static const OpParameter enum_value = OpParameter_QuantizedMatMul;
1500 };
1501 
1502 template<> struct OpParameterTraits<QuantizedMaxPool> {
1503   static const OpParameter enum_value = OpParameter_QuantizedMaxPool;
1504 };
1505 
1506 template<> struct OpParameterTraits<QuantizedRelu> {
1507   static const OpParameter enum_value = OpParameter_QuantizedRelu;
1508 };
1509 
1510 template<> struct OpParameterTraits<QuantizedRelu6> {
1511   static const OpParameter enum_value = OpParameter_QuantizedRelu6;
1512 };
1513 
1514 template<> struct OpParameterTraits<QuantizedReshape> {
1515   static const OpParameter enum_value = OpParameter_QuantizedReshape;
1516 };
1517 
1518 template<> struct OpParameterTraits<QuantizedSoftmax> {
1519   static const OpParameter enum_value = OpParameter_QuantizedSoftmax;
1520 };
1521 
1522 template<> struct OpParameterTraits<QuantizeMaxMin> {
1523   static const OpParameter enum_value = OpParameter_QuantizeMaxMin;
1524 };
1525 
1526 template<> struct OpParameterTraits<QuantizeV2> {
1527   static const OpParameter enum_value = OpParameter_QuantizeV2;
1528 };
1529 
1530 template<> struct OpParameterTraits<Range> {
1531   static const OpParameter enum_value = OpParameter_Range;
1532 };
1533 
1534 template<> struct OpParameterTraits<Rank> {
1535   static const OpParameter enum_value = OpParameter_Rank;
1536 };
1537 
1538 template<> struct OpParameterTraits<ReduceJoin> {
1539   static const OpParameter enum_value = OpParameter_ReduceJoin;
1540 };
1541 
1542 template<> struct OpParameterTraits<ReductionParam> {
1543   static const OpParameter enum_value = OpParameter_ReductionParam;
1544 };
1545 
1546 template<> struct OpParameterTraits<Relu> {
1547   static const OpParameter enum_value = OpParameter_Relu;
1548 };
1549 
1550 template<> struct OpParameterTraits<Relu6> {
1551   static const OpParameter enum_value = OpParameter_Relu6;
1552 };
1553 
1554 template<> struct OpParameterTraits<RequantizationRange> {
1555   static const OpParameter enum_value = OpParameter_RequantizationRange;
1556 };
1557 
1558 template<> struct OpParameterTraits<Requantize> {
1559   static const OpParameter enum_value = OpParameter_Requantize;
1560 };
1561 
1562 template<> struct OpParameterTraits<Reshape> {
1563   static const OpParameter enum_value = OpParameter_Reshape;
1564 };
1565 
1566 template<> struct OpParameterTraits<Resize> {
1567   static const OpParameter enum_value = OpParameter_Resize;
1568 };
1569 
1570 template<> struct OpParameterTraits<RoiPooling> {
1571   static const OpParameter enum_value = OpParameter_RoiPooling;
1572 };
1573 
1574 template<> struct OpParameterTraits<Scale> {
1575   static const OpParameter enum_value = OpParameter_Scale;
1576 };
1577 
1578 template<> struct OpParameterTraits<Selu> {
1579   static const OpParameter enum_value = OpParameter_Selu;
1580 };
1581 
1582 template<> struct OpParameterTraits<Size> {
1583   static const OpParameter enum_value = OpParameter_Size;
1584 };
1585 
1586 template<> struct OpParameterTraits<Slice> {
1587   static const OpParameter enum_value = OpParameter_Slice;
1588 };
1589 
1590 template<> struct OpParameterTraits<SliceTf> {
1591   static const OpParameter enum_value = OpParameter_SliceTf;
1592 };
1593 
1594 template<> struct OpParameterTraits<SpaceBatch> {
1595   static const OpParameter enum_value = OpParameter_SpaceBatch;
1596 };
1597 
1598 template<> struct OpParameterTraits<SqueezeParam> {
1599   static const OpParameter enum_value = OpParameter_SqueezeParam;
1600 };
1601 
1602 template<> struct OpParameterTraits<StridedSliceParam> {
1603   static const OpParameter enum_value = OpParameter_StridedSliceParam;
1604 };
1605 
1606 template<> struct OpParameterTraits<TensorConvertInfo> {
1607   static const OpParameter enum_value = OpParameter_TensorConvertInfo;
1608 };
1609 
1610 template<> struct OpParameterTraits<TfQuantizedConv2D> {
1611   static const OpParameter enum_value = OpParameter_TfQuantizedConv2D;
1612 };
1613 
1614 template<> struct OpParameterTraits<TopKV2> {
1615   static const OpParameter enum_value = OpParameter_TopKV2;
1616 };
1617 
1618 template<> struct OpParameterTraits<Transpose> {
1619   static const OpParameter enum_value = OpParameter_Transpose;
1620 };
1621 
1622 template<> struct OpParameterTraits<UnaryOp> {
1623   static const OpParameter enum_value = OpParameter_UnaryOp;
1624 };
1625 
1626 template<> struct OpParameterTraits<MomentsParam> {
1627   static const OpParameter enum_value = OpParameter_MomentsParam;
1628 };
1629 
1630 template<> struct OpParameterTraits<RNNParam> {
1631   static const OpParameter enum_value = OpParameter_RNNParam;
1632 };
1633 
1634 template<> struct OpParameterTraits<BatchMatMulParam> {
1635   static const OpParameter enum_value = OpParameter_BatchMatMulParam;
1636 };
1637 
1638 template<> struct OpParameterTraits<QuantizedFloatParam> {
1639   static const OpParameter enum_value = OpParameter_QuantizedFloatParam;
1640 };
1641 
1642 template<> struct OpParameterTraits<DepthSpaceParam> {
1643   static const OpParameter enum_value = OpParameter_DepthSpaceParam;
1644 };
1645 
1646 template<> struct OpParameterTraits<EltwiseInt8> {
1647   static const OpParameter enum_value = OpParameter_EltwiseInt8;
1648 };
1649 
1650 template<> struct OpParameterTraits<ReverseSequenceParam> {
1651   static const OpParameter enum_value = OpParameter_ReverseSequenceParam;
1652 };
1653 
1654 template<> struct OpParameterTraits<Extra> {
1655   static const OpParameter enum_value = OpParameter_Extra;
1656 };
1657 
1658 template<> struct OpParameterTraits<Pool3D> {
1659   static const OpParameter enum_value = OpParameter_Pool3D;
1660 };
1661 
1662 template<> struct OpParameterTraits<Convolution3D> {
1663   static const OpParameter enum_value = OpParameter_Convolution3D;
1664 };
1665 
1666 template<> struct OpParameterTraits<ELU> {
1667   static const OpParameter enum_value = OpParameter_ELU;
1668 };
1669 
1670 template<> struct OpParameterTraits<DetectionPostProcessParam> {
1671   static const OpParameter enum_value = OpParameter_DetectionPostProcessParam;
1672 };
1673 
1674 template<> struct OpParameterTraits<OneHotParam> {
1675   static const OpParameter enum_value = OpParameter_OneHotParam;
1676 };
1677 
1678 template<> struct OpParameterTraits<PadParam> {
1679   static const OpParameter enum_value = OpParameter_PadParam;
1680 };
1681 
1682 template<> struct OpParameterTraits<WhileParam> {
1683   static const OpParameter enum_value = OpParameter_WhileParam;
1684 };
1685 
1686 template<> struct OpParameterTraits<IfParam> {
1687   static const OpParameter enum_value = OpParameter_IfParam;
1688 };
1689 
1690 template<> struct OpParameterTraits<RandomUniform> {
1691   static const OpParameter enum_value = OpParameter_RandomUniform;
1692 };
1693 
1694 template<> struct OpParameterTraits<LayerNorm> {
1695   static const OpParameter enum_value = OpParameter_LayerNorm;
1696 };
1697 
1698 template<> struct OpParameterTraits<TensorArray> {
1699   static const OpParameter enum_value = OpParameter_TensorArray;
1700 };
1701 
1702 template<> struct OpParameterTraits<LSTMBlockCell> {
1703   static const OpParameter enum_value = OpParameter_LSTMBlockCell;
1704 };
1705 
1706 template<> struct OpParameterTraits<GridSample> {
1707   static const OpParameter enum_value = OpParameter_GridSample;
1708 };
1709 
1710 template<> struct OpParameterTraits<LoopParam> {
1711   static const OpParameter enum_value = OpParameter_LoopParam;
1712 };
1713 
1714 struct OpParameterUnion {
1715   OpParameter type;
1716   void *value;
1717 
1718   OpParameterUnion() : type(OpParameter_NONE), value(nullptr) {}
1719   OpParameterUnion(OpParameterUnion&& u) FLATBUFFERS_NOEXCEPT :
1720     type(OpParameter_NONE), value(nullptr)
1721     { std::swap(type, u.type); std::swap(value, u.value); }
1722   OpParameterUnion(const OpParameterUnion &) FLATBUFFERS_NOEXCEPT;
1723   OpParameterUnion &operator=(const OpParameterUnion &u) FLATBUFFERS_NOEXCEPT
1724     { OpParameterUnion t(u); std::swap(type, t.type); std::swap(value, t.value); return *this; }
1725   OpParameterUnion &operator=(OpParameterUnion &&u) FLATBUFFERS_NOEXCEPT
1726     { std::swap(type, u.type); std::swap(value, u.value); return *this; }
1727   ~OpParameterUnion() { Reset(); }
1728 
1729   void Reset();
1730 
1731 #ifndef FLATBUFFERS_CPP98_STL
1732   template <typename T>
1733   void Set(T&& val) {
1734     Reset();
1735     type = OpParameterTraits<typename T::TableType>::enum_value;
1736     if (type != OpParameter_NONE) {
1737       value = new T(std::forward<T>(val));
1738     }
1739   }
1740 #endif  // FLATBUFFERS_CPP98_STL
1741 
1742   static void *UnPack(const void *obj, OpParameter type, const flatbuffers::resolver_function_t *resolver);
1743   flatbuffers::Offset<void> Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher = nullptr) const;
1744 
1745   QuantizedAddT *AsQuantizedAdd() {
1746     return type == OpParameter_QuantizedAdd ?
1747       reinterpret_cast<QuantizedAddT *>(value) : nullptr;
1748   }
1749   const QuantizedAddT *AsQuantizedAdd() const {
1750     return type == OpParameter_QuantizedAdd ?
1751       reinterpret_cast<const QuantizedAddT *>(value) : nullptr;
1752   }
1753   ArgMaxT *AsArgMax() {
1754     return type == OpParameter_ArgMax ?
1755       reinterpret_cast<ArgMaxT *>(value) : nullptr;
1756   }
1757   const ArgMaxT *AsArgMax() const {
1758     return type == OpParameter_ArgMax ?
1759       reinterpret_cast<const ArgMaxT *>(value) : nullptr;
1760   }
1761   AsStringT *AsAsString() {
1762     return type == OpParameter_AsString ?
1763       reinterpret_cast<AsStringT *>(value) : nullptr;
1764   }
1765   const AsStringT *AsAsString() const {
1766     return type == OpParameter_AsString ?
1767       reinterpret_cast<const AsStringT *>(value) : nullptr;
1768   }
1769   AxisT *AsAxis() {
1770     return type == OpParameter_Axis ?
1771       reinterpret_cast<AxisT *>(value) : nullptr;
1772   }
1773   const AxisT *AsAxis() const {
1774     return type == OpParameter_Axis ?
1775       reinterpret_cast<const AxisT *>(value) : nullptr;
1776   }
1777   BatchNormT *AsBatchNorm() {
1778     return type == OpParameter_BatchNorm ?
1779       reinterpret_cast<BatchNormT *>(value) : nullptr;
1780   }
1781   const BatchNormT *AsBatchNorm() const {
1782     return type == OpParameter_BatchNorm ?
1783       reinterpret_cast<const BatchNormT *>(value) : nullptr;
1784   }
1785   BinaryOpT *AsBinaryOp() {
1786     return type == OpParameter_BinaryOp ?
1787       reinterpret_cast<BinaryOpT *>(value) : nullptr;
1788   }
1789   const BinaryOpT *AsBinaryOp() const {
1790     return type == OpParameter_BinaryOp ?
1791       reinterpret_cast<const BinaryOpT *>(value) : nullptr;
1792   }
1793   BlobT *AsBlob() {
1794     return type == OpParameter_Blob ?
1795       reinterpret_cast<BlobT *>(value) : nullptr;
1796   }
1797   const BlobT *AsBlob() const {
1798     return type == OpParameter_Blob ?
1799       reinterpret_cast<const BlobT *>(value) : nullptr;
1800   }
1801   CastParamT *AsCastParam() {
1802     return type == OpParameter_CastParam ?
1803       reinterpret_cast<CastParamT *>(value) : nullptr;
1804   }
1805   const CastParamT *AsCastParam() const {
1806     return type == OpParameter_CastParam ?
1807       reinterpret_cast<const CastParamT *>(value) : nullptr;
1808   }
1809   Convolution2DT *AsConvolution2D() {
1810     return type == OpParameter_Convolution2D ?
1811       reinterpret_cast<Convolution2DT *>(value) : nullptr;
1812   }
1813   const Convolution2DT *AsConvolution2D() const {
1814     return type == OpParameter_Convolution2D ?
1815       reinterpret_cast<const Convolution2DT *>(value) : nullptr;
1816   }
1817   CropT *AsCrop() {
1818     return type == OpParameter_Crop ?
1819       reinterpret_cast<CropT *>(value) : nullptr;
1820   }
1821   const CropT *AsCrop() const {
1822     return type == OpParameter_Crop ?
1823       reinterpret_cast<const CropT *>(value) : nullptr;
1824   }
1825   CropAndResizeT *AsCropAndResize() {
1826     return type == OpParameter_CropAndResize ?
1827       reinterpret_cast<CropAndResizeT *>(value) : nullptr;
1828   }
1829   const CropAndResizeT *AsCropAndResize() const {
1830     return type == OpParameter_CropAndResize ?
1831       reinterpret_cast<const CropAndResizeT *>(value) : nullptr;
1832   }
1833   DequantizeT *AsDequantize() {
1834     return type == OpParameter_Dequantize ?
1835       reinterpret_cast<DequantizeT *>(value) : nullptr;
1836   }
1837   const DequantizeT *AsDequantize() const {
1838     return type == OpParameter_Dequantize ?
1839       reinterpret_cast<const DequantizeT *>(value) : nullptr;
1840   }
1841   DetectionOutputT *AsDetectionOutput() {
1842     return type == OpParameter_DetectionOutput ?
1843       reinterpret_cast<DetectionOutputT *>(value) : nullptr;
1844   }
1845   const DetectionOutputT *AsDetectionOutput() const {
1846     return type == OpParameter_DetectionOutput ?
1847       reinterpret_cast<const DetectionOutputT *>(value) : nullptr;
1848   }
1849   EltwiseT *AsEltwise() {
1850     return type == OpParameter_Eltwise ?
1851       reinterpret_cast<EltwiseT *>(value) : nullptr;
1852   }
1853   const EltwiseT *AsEltwise() const {
1854     return type == OpParameter_Eltwise ?
1855       reinterpret_cast<const EltwiseT *>(value) : nullptr;
1856   }
1857   ExpandDimsT *AsExpandDims() {
1858     return type == OpParameter_ExpandDims ?
1859       reinterpret_cast<ExpandDimsT *>(value) : nullptr;
1860   }
1861   const ExpandDimsT *AsExpandDims() const {
1862     return type == OpParameter_ExpandDims ?
1863       reinterpret_cast<const ExpandDimsT *>(value) : nullptr;
1864   }
1865   FillT *AsFill() {
1866     return type == OpParameter_Fill ?
1867       reinterpret_cast<FillT *>(value) : nullptr;
1868   }
1869   const FillT *AsFill() const {
1870     return type == OpParameter_Fill ?
1871       reinterpret_cast<const FillT *>(value) : nullptr;
1872   }
1873   FlattenT *AsFlatten() {
1874     return type == OpParameter_Flatten ?
1875       reinterpret_cast<FlattenT *>(value) : nullptr;
1876   }
1877   const FlattenT *AsFlatten() const {
1878     return type == OpParameter_Flatten ?
1879       reinterpret_cast<const FlattenT *>(value) : nullptr;
1880   }
1881   GatherT *AsGather() {
1882     return type == OpParameter_Gather ?
1883       reinterpret_cast<GatherT *>(value) : nullptr;
1884   }
1885   const GatherT *AsGather() const {
1886     return type == OpParameter_Gather ?
1887       reinterpret_cast<const GatherT *>(value) : nullptr;
1888   }
1889   GatherV2T *AsGatherV2() {
1890     return type == OpParameter_GatherV2 ?
1891       reinterpret_cast<GatherV2T *>(value) : nullptr;
1892   }
1893   const GatherV2T *AsGatherV2() const {
1894     return type == OpParameter_GatherV2 ?
1895       reinterpret_cast<const GatherV2T *>(value) : nullptr;
1896   }
1897   InnerProductT *AsInnerProduct() {
1898     return type == OpParameter_InnerProduct ?
1899       reinterpret_cast<InnerProductT *>(value) : nullptr;
1900   }
1901   const InnerProductT *AsInnerProduct() const {
1902     return type == OpParameter_InnerProduct ?
1903       reinterpret_cast<const InnerProductT *>(value) : nullptr;
1904   }
1905   InputT *AsInput() {
1906     return type == OpParameter_Input ?
1907       reinterpret_cast<InputT *>(value) : nullptr;
1908   }
1909   const InputT *AsInput() const {
1910     return type == OpParameter_Input ?
1911       reinterpret_cast<const InputT *>(value) : nullptr;
1912   }
1913   InterpT *AsInterp() {
1914     return type == OpParameter_Interp ?
1915       reinterpret_cast<InterpT *>(value) : nullptr;
1916   }
1917   const InterpT *AsInterp() const {
1918     return type == OpParameter_Interp ?
1919       reinterpret_cast<const InterpT *>(value) : nullptr;
1920   }
1921   LRNT *AsLRN() {
1922     return type == OpParameter_LRN ?
1923       reinterpret_cast<LRNT *>(value) : nullptr;
1924   }
1925   const LRNT *AsLRN() const {
1926     return type == OpParameter_LRN ?
1927       reinterpret_cast<const LRNT *>(value) : nullptr;
1928   }
1929   LSTMT *AsLSTM() {
1930     return type == OpParameter_LSTM ?
1931       reinterpret_cast<LSTMT *>(value) : nullptr;
1932   }
1933   const LSTMT *AsLSTM() const {
1934     return type == OpParameter_LSTM ?
1935       reinterpret_cast<const LSTMT *>(value) : nullptr;
1936   }
1937   MatMulT *AsMatMul() {
1938     return type == OpParameter_MatMul ?
1939       reinterpret_cast<MatMulT *>(value) : nullptr;
1940   }
1941   const MatMulT *AsMatMul() const {
1942     return type == OpParameter_MatMul ?
1943       reinterpret_cast<const MatMulT *>(value) : nullptr;
1944   }
1945   NonMaxSuppressionV2T *AsNonMaxSuppressionV2() {
1946     return type == OpParameter_NonMaxSuppressionV2 ?
1947       reinterpret_cast<NonMaxSuppressionV2T *>(value) : nullptr;
1948   }
1949   const NonMaxSuppressionV2T *AsNonMaxSuppressionV2() const {
1950     return type == OpParameter_NonMaxSuppressionV2 ?
1951       reinterpret_cast<const NonMaxSuppressionV2T *>(value) : nullptr;
1952   }
1953   NormalizeT *AsNormalize() {
1954     return type == OpParameter_Normalize ?
1955       reinterpret_cast<NormalizeT *>(value) : nullptr;
1956   }
1957   const NormalizeT *AsNormalize() const {
1958     return type == OpParameter_Normalize ?
1959       reinterpret_cast<const NormalizeT *>(value) : nullptr;
1960   }
1961   PackParamT *AsPackParam() {
1962     return type == OpParameter_PackParam ?
1963       reinterpret_cast<PackParamT *>(value) : nullptr;
1964   }
1965   const PackParamT *AsPackParam() const {
1966     return type == OpParameter_PackParam ?
1967       reinterpret_cast<const PackParamT *>(value) : nullptr;
1968   }
1969   PermuteT *AsPermute() {
1970     return type == OpParameter_Permute ?
1971       reinterpret_cast<PermuteT *>(value) : nullptr;
1972   }
1973   const PermuteT *AsPermute() const {
1974     return type == OpParameter_Permute ?
1975       reinterpret_cast<const PermuteT *>(value) : nullptr;
1976   }
1977   PluginT *AsPlugin() {
1978     return type == OpParameter_Plugin ?
1979       reinterpret_cast<PluginT *>(value) : nullptr;
1980   }
1981   const PluginT *AsPlugin() const {
1982     return type == OpParameter_Plugin ?
1983       reinterpret_cast<const PluginT *>(value) : nullptr;
1984   }
1985   PoolT *AsPool() {
1986     return type == OpParameter_Pool ?
1987       reinterpret_cast<PoolT *>(value) : nullptr;
1988   }
1989   const PoolT *AsPool() const {
1990     return type == OpParameter_Pool ?
1991       reinterpret_cast<const PoolT *>(value) : nullptr;
1992   }
1993   PReluT *AsPRelu() {
1994     return type == OpParameter_PRelu ?
1995       reinterpret_cast<PReluT *>(value) : nullptr;
1996   }
1997   const PReluT *AsPRelu() const {
1998     return type == OpParameter_PRelu ?
1999       reinterpret_cast<const PReluT *>(value) : nullptr;
2000   }
2001   PriorBoxT *AsPriorBox() {
2002     return type == OpParameter_PriorBox ?
2003       reinterpret_cast<PriorBoxT *>(value) : nullptr;
2004   }
2005   const PriorBoxT *AsPriorBox() const {
2006     return type == OpParameter_PriorBox ?
2007       reinterpret_cast<const PriorBoxT *>(value) : nullptr;
2008   }
2009   ProposalT *AsProposal() {
2010     return type == OpParameter_Proposal ?
2011       reinterpret_cast<ProposalT *>(value) : nullptr;
2012   }
2013   const ProposalT *AsProposal() const {
2014     return type == OpParameter_Proposal ?
2015       reinterpret_cast<const ProposalT *>(value) : nullptr;
2016   }
2017   QuantizedAvgPoolT *AsQuantizedAvgPool() {
2018     return type == OpParameter_QuantizedAvgPool ?
2019       reinterpret_cast<QuantizedAvgPoolT *>(value) : nullptr;
2020   }
2021   const QuantizedAvgPoolT *AsQuantizedAvgPool() const {
2022     return type == OpParameter_QuantizedAvgPool ?
2023       reinterpret_cast<const QuantizedAvgPoolT *>(value) : nullptr;
2024   }
2025   QuantizedBiasAddT *AsQuantizedBiasAdd() {
2026     return type == OpParameter_QuantizedBiasAdd ?
2027       reinterpret_cast<QuantizedBiasAddT *>(value) : nullptr;
2028   }
2029   const QuantizedBiasAddT *AsQuantizedBiasAdd() const {
2030     return type == OpParameter_QuantizedBiasAdd ?
2031       reinterpret_cast<const QuantizedBiasAddT *>(value) : nullptr;
2032   }
2033   QuantizedConcatT *AsQuantizedConcat() {
2034     return type == OpParameter_QuantizedConcat ?
2035       reinterpret_cast<QuantizedConcatT *>(value) : nullptr;
2036   }
2037   const QuantizedConcatT *AsQuantizedConcat() const {
2038     return type == OpParameter_QuantizedConcat ?
2039       reinterpret_cast<const QuantizedConcatT *>(value) : nullptr;
2040   }
2041   QuantizedLogisticT *AsQuantizedLogistic() {
2042     return type == OpParameter_QuantizedLogistic ?
2043       reinterpret_cast<QuantizedLogisticT *>(value) : nullptr;
2044   }
2045   const QuantizedLogisticT *AsQuantizedLogistic() const {
2046     return type == OpParameter_QuantizedLogistic ?
2047       reinterpret_cast<const QuantizedLogisticT *>(value) : nullptr;
2048   }
2049   QuantizedMatMulT *AsQuantizedMatMul() {
2050     return type == OpParameter_QuantizedMatMul ?
2051       reinterpret_cast<QuantizedMatMulT *>(value) : nullptr;
2052   }
2053   const QuantizedMatMulT *AsQuantizedMatMul() const {
2054     return type == OpParameter_QuantizedMatMul ?
2055       reinterpret_cast<const QuantizedMatMulT *>(value) : nullptr;
2056   }
2057   QuantizedMaxPoolT *AsQuantizedMaxPool() {
2058     return type == OpParameter_QuantizedMaxPool ?
2059       reinterpret_cast<QuantizedMaxPoolT *>(value) : nullptr;
2060   }
2061   const QuantizedMaxPoolT *AsQuantizedMaxPool() const {
2062     return type == OpParameter_QuantizedMaxPool ?
2063       reinterpret_cast<const QuantizedMaxPoolT *>(value) : nullptr;
2064   }
2065   QuantizedReluT *AsQuantizedRelu() {
2066     return type == OpParameter_QuantizedRelu ?
2067       reinterpret_cast<QuantizedReluT *>(value) : nullptr;
2068   }
2069   const QuantizedReluT *AsQuantizedRelu() const {
2070     return type == OpParameter_QuantizedRelu ?
2071       reinterpret_cast<const QuantizedReluT *>(value) : nullptr;
2072   }
2073   QuantizedRelu6T *AsQuantizedRelu6() {
2074     return type == OpParameter_QuantizedRelu6 ?
2075       reinterpret_cast<QuantizedRelu6T *>(value) : nullptr;
2076   }
2077   const QuantizedRelu6T *AsQuantizedRelu6() const {
2078     return type == OpParameter_QuantizedRelu6 ?
2079       reinterpret_cast<const QuantizedRelu6T *>(value) : nullptr;
2080   }
2081   QuantizedReshapeT *AsQuantizedReshape() {
2082     return type == OpParameter_QuantizedReshape ?
2083       reinterpret_cast<QuantizedReshapeT *>(value) : nullptr;
2084   }
2085   const QuantizedReshapeT *AsQuantizedReshape() const {
2086     return type == OpParameter_QuantizedReshape ?
2087       reinterpret_cast<const QuantizedReshapeT *>(value) : nullptr;
2088   }
2089   QuantizedSoftmaxT *AsQuantizedSoftmax() {
2090     return type == OpParameter_QuantizedSoftmax ?
2091       reinterpret_cast<QuantizedSoftmaxT *>(value) : nullptr;
2092   }
2093   const QuantizedSoftmaxT *AsQuantizedSoftmax() const {
2094     return type == OpParameter_QuantizedSoftmax ?
2095       reinterpret_cast<const QuantizedSoftmaxT *>(value) : nullptr;
2096   }
2097   QuantizeMaxMinT *AsQuantizeMaxMin() {
2098     return type == OpParameter_QuantizeMaxMin ?
2099       reinterpret_cast<QuantizeMaxMinT *>(value) : nullptr;
2100   }
2101   const QuantizeMaxMinT *AsQuantizeMaxMin() const {
2102     return type == OpParameter_QuantizeMaxMin ?
2103       reinterpret_cast<const QuantizeMaxMinT *>(value) : nullptr;
2104   }
2105   QuantizeV2T *AsQuantizeV2() {
2106     return type == OpParameter_QuantizeV2 ?
2107       reinterpret_cast<QuantizeV2T *>(value) : nullptr;
2108   }
2109   const QuantizeV2T *AsQuantizeV2() const {
2110     return type == OpParameter_QuantizeV2 ?
2111       reinterpret_cast<const QuantizeV2T *>(value) : nullptr;
2112   }
2113   RangeT *AsRange() {
2114     return type == OpParameter_Range ?
2115       reinterpret_cast<RangeT *>(value) : nullptr;
2116   }
2117   const RangeT *AsRange() const {
2118     return type == OpParameter_Range ?
2119       reinterpret_cast<const RangeT *>(value) : nullptr;
2120   }
2121   RankT *AsRank() {
2122     return type == OpParameter_Rank ?
2123       reinterpret_cast<RankT *>(value) : nullptr;
2124   }
2125   const RankT *AsRank() const {
2126     return type == OpParameter_Rank ?
2127       reinterpret_cast<const RankT *>(value) : nullptr;
2128   }
2129   ReduceJoinT *AsReduceJoin() {
2130     return type == OpParameter_ReduceJoin ?
2131       reinterpret_cast<ReduceJoinT *>(value) : nullptr;
2132   }
2133   const ReduceJoinT *AsReduceJoin() const {
2134     return type == OpParameter_ReduceJoin ?
2135       reinterpret_cast<const ReduceJoinT *>(value) : nullptr;
2136   }
2137   ReductionParamT *AsReductionParam() {
2138     return type == OpParameter_ReductionParam ?
2139       reinterpret_cast<ReductionParamT *>(value) : nullptr;
2140   }
2141   const ReductionParamT *AsReductionParam() const {
2142     return type == OpParameter_ReductionParam ?
2143       reinterpret_cast<const ReductionParamT *>(value) : nullptr;
2144   }
2145   ReluT *AsRelu() {
2146     return type == OpParameter_Relu ?
2147       reinterpret_cast<ReluT *>(value) : nullptr;
2148   }
2149   const ReluT *AsRelu() const {
2150     return type == OpParameter_Relu ?
2151       reinterpret_cast<const ReluT *>(value) : nullptr;
2152   }
2153   Relu6T *AsRelu6() {
2154     return type == OpParameter_Relu6 ?
2155       reinterpret_cast<Relu6T *>(value) : nullptr;
2156   }
2157   const Relu6T *AsRelu6() const {
2158     return type == OpParameter_Relu6 ?
2159       reinterpret_cast<const Relu6T *>(value) : nullptr;
2160   }
2161   RequantizationRangeT *AsRequantizationRange() {
2162     return type == OpParameter_RequantizationRange ?
2163       reinterpret_cast<RequantizationRangeT *>(value) : nullptr;
2164   }
2165   const RequantizationRangeT *AsRequantizationRange() const {
2166     return type == OpParameter_RequantizationRange ?
2167       reinterpret_cast<const RequantizationRangeT *>(value) : nullptr;
2168   }
2169   RequantizeT *AsRequantize() {
2170     return type == OpParameter_Requantize ?
2171       reinterpret_cast<RequantizeT *>(value) : nullptr;
2172   }
2173   const RequantizeT *AsRequantize() const {
2174     return type == OpParameter_Requantize ?
2175       reinterpret_cast<const RequantizeT *>(value) : nullptr;
2176   }
2177   ReshapeT *AsReshape() {
2178     return type == OpParameter_Reshape ?
2179       reinterpret_cast<ReshapeT *>(value) : nullptr;
2180   }
2181   const ReshapeT *AsReshape() const {
2182     return type == OpParameter_Reshape ?
2183       reinterpret_cast<const ReshapeT *>(value) : nullptr;
2184   }
2185   ResizeT *AsResize() {
2186     return type == OpParameter_Resize ?
2187       reinterpret_cast<ResizeT *>(value) : nullptr;
2188   }
2189   const ResizeT *AsResize() const {
2190     return type == OpParameter_Resize ?
2191       reinterpret_cast<const ResizeT *>(value) : nullptr;
2192   }
2193   RoiPoolingT *AsRoiPooling() {
2194     return type == OpParameter_RoiPooling ?
2195       reinterpret_cast<RoiPoolingT *>(value) : nullptr;
2196   }
2197   const RoiPoolingT *AsRoiPooling() const {
2198     return type == OpParameter_RoiPooling ?
2199       reinterpret_cast<const RoiPoolingT *>(value) : nullptr;
2200   }
2201   ScaleT *AsScale() {
2202     return type == OpParameter_Scale ?
2203       reinterpret_cast<ScaleT *>(value) : nullptr;
2204   }
2205   const ScaleT *AsScale() const {
2206     return type == OpParameter_Scale ?
2207       reinterpret_cast<const ScaleT *>(value) : nullptr;
2208   }
2209   SeluT *AsSelu() {
2210     return type == OpParameter_Selu ?
2211       reinterpret_cast<SeluT *>(value) : nullptr;
2212   }
2213   const SeluT *AsSelu() const {
2214     return type == OpParameter_Selu ?
2215       reinterpret_cast<const SeluT *>(value) : nullptr;
2216   }
2217   SizeT *AsSize() {
2218     return type == OpParameter_Size ?
2219       reinterpret_cast<SizeT *>(value) : nullptr;
2220   }
2221   const SizeT *AsSize() const {
2222     return type == OpParameter_Size ?
2223       reinterpret_cast<const SizeT *>(value) : nullptr;
2224   }
2225   SliceT *AsSlice() {
2226     return type == OpParameter_Slice ?
2227       reinterpret_cast<SliceT *>(value) : nullptr;
2228   }
2229   const SliceT *AsSlice() const {
2230     return type == OpParameter_Slice ?
2231       reinterpret_cast<const SliceT *>(value) : nullptr;
2232   }
2233   SliceTfT *AsSliceTf() {
2234     return type == OpParameter_SliceTf ?
2235       reinterpret_cast<SliceTfT *>(value) : nullptr;
2236   }
2237   const SliceTfT *AsSliceTf() const {
2238     return type == OpParameter_SliceTf ?
2239       reinterpret_cast<const SliceTfT *>(value) : nullptr;
2240   }
2241   SpaceBatchT *AsSpaceBatch() {
2242     return type == OpParameter_SpaceBatch ?
2243       reinterpret_cast<SpaceBatchT *>(value) : nullptr;
2244   }
2245   const SpaceBatchT *AsSpaceBatch() const {
2246     return type == OpParameter_SpaceBatch ?
2247       reinterpret_cast<const SpaceBatchT *>(value) : nullptr;
2248   }
2249   SqueezeParamT *AsSqueezeParam() {
2250     return type == OpParameter_SqueezeParam ?
2251       reinterpret_cast<SqueezeParamT *>(value) : nullptr;
2252   }
2253   const SqueezeParamT *AsSqueezeParam() const {
2254     return type == OpParameter_SqueezeParam ?
2255       reinterpret_cast<const SqueezeParamT *>(value) : nullptr;
2256   }
2257   StridedSliceParamT *AsStridedSliceParam() {
2258     return type == OpParameter_StridedSliceParam ?
2259       reinterpret_cast<StridedSliceParamT *>(value) : nullptr;
2260   }
2261   const StridedSliceParamT *AsStridedSliceParam() const {
2262     return type == OpParameter_StridedSliceParam ?
2263       reinterpret_cast<const StridedSliceParamT *>(value) : nullptr;
2264   }
2265   TensorConvertInfoT *AsTensorConvertInfo() {
2266     return type == OpParameter_TensorConvertInfo ?
2267       reinterpret_cast<TensorConvertInfoT *>(value) : nullptr;
2268   }
2269   const TensorConvertInfoT *AsTensorConvertInfo() const {
2270     return type == OpParameter_TensorConvertInfo ?
2271       reinterpret_cast<const TensorConvertInfoT *>(value) : nullptr;
2272   }
2273   TfQuantizedConv2DT *AsTfQuantizedConv2D() {
2274     return type == OpParameter_TfQuantizedConv2D ?
2275       reinterpret_cast<TfQuantizedConv2DT *>(value) : nullptr;
2276   }
2277   const TfQuantizedConv2DT *AsTfQuantizedConv2D() const {
2278     return type == OpParameter_TfQuantizedConv2D ?
2279       reinterpret_cast<const TfQuantizedConv2DT *>(value) : nullptr;
2280   }
2281   TopKV2T *AsTopKV2() {
2282     return type == OpParameter_TopKV2 ?
2283       reinterpret_cast<TopKV2T *>(value) : nullptr;
2284   }
2285   const TopKV2T *AsTopKV2() const {
2286     return type == OpParameter_TopKV2 ?
2287       reinterpret_cast<const TopKV2T *>(value) : nullptr;
2288   }
2289   TransposeT *AsTranspose() {
2290     return type == OpParameter_Transpose ?
2291       reinterpret_cast<TransposeT *>(value) : nullptr;
2292   }
2293   const TransposeT *AsTranspose() const {
2294     return type == OpParameter_Transpose ?
2295       reinterpret_cast<const TransposeT *>(value) : nullptr;
2296   }
2297   UnaryOpT *AsUnaryOp() {
2298     return type == OpParameter_UnaryOp ?
2299       reinterpret_cast<UnaryOpT *>(value) : nullptr;
2300   }
2301   const UnaryOpT *AsUnaryOp() const {
2302     return type == OpParameter_UnaryOp ?
2303       reinterpret_cast<const UnaryOpT *>(value) : nullptr;
2304   }
2305   MomentsParamT *AsMomentsParam() {
2306     return type == OpParameter_MomentsParam ?
2307       reinterpret_cast<MomentsParamT *>(value) : nullptr;
2308   }
2309   const MomentsParamT *AsMomentsParam() const {
2310     return type == OpParameter_MomentsParam ?
2311       reinterpret_cast<const MomentsParamT *>(value) : nullptr;
2312   }
2313   RNNParamT *AsRNNParam() {
2314     return type == OpParameter_RNNParam ?
2315       reinterpret_cast<RNNParamT *>(value) : nullptr;
2316   }
2317   const RNNParamT *AsRNNParam() const {
2318     return type == OpParameter_RNNParam ?
2319       reinterpret_cast<const RNNParamT *>(value) : nullptr;
2320   }
2321   BatchMatMulParamT *AsBatchMatMulParam() {
2322     return type == OpParameter_BatchMatMulParam ?
2323       reinterpret_cast<BatchMatMulParamT *>(value) : nullptr;
2324   }
2325   const BatchMatMulParamT *AsBatchMatMulParam() const {
2326     return type == OpParameter_BatchMatMulParam ?
2327       reinterpret_cast<const BatchMatMulParamT *>(value) : nullptr;
2328   }
2329   QuantizedFloatParamT *AsQuantizedFloatParam() {
2330     return type == OpParameter_QuantizedFloatParam ?
2331       reinterpret_cast<QuantizedFloatParamT *>(value) : nullptr;
2332   }
2333   const QuantizedFloatParamT *AsQuantizedFloatParam() const {
2334     return type == OpParameter_QuantizedFloatParam ?
2335       reinterpret_cast<const QuantizedFloatParamT *>(value) : nullptr;
2336   }
2337   DepthSpaceParamT *AsDepthSpaceParam() {
2338     return type == OpParameter_DepthSpaceParam ?
2339       reinterpret_cast<DepthSpaceParamT *>(value) : nullptr;
2340   }
2341   const DepthSpaceParamT *AsDepthSpaceParam() const {
2342     return type == OpParameter_DepthSpaceParam ?
2343       reinterpret_cast<const DepthSpaceParamT *>(value) : nullptr;
2344   }
2345   EltwiseInt8T *AsEltwiseInt8() {
2346     return type == OpParameter_EltwiseInt8 ?
2347       reinterpret_cast<EltwiseInt8T *>(value) : nullptr;
2348   }
2349   const EltwiseInt8T *AsEltwiseInt8() const {
2350     return type == OpParameter_EltwiseInt8 ?
2351       reinterpret_cast<const EltwiseInt8T *>(value) : nullptr;
2352   }
2353   ReverseSequenceParamT *AsReverseSequenceParam() {
2354     return type == OpParameter_ReverseSequenceParam ?
2355       reinterpret_cast<ReverseSequenceParamT *>(value) : nullptr;
2356   }
2357   const ReverseSequenceParamT *AsReverseSequenceParam() const {
2358     return type == OpParameter_ReverseSequenceParam ?
2359       reinterpret_cast<const ReverseSequenceParamT *>(value) : nullptr;
2360   }
2361   ExtraT *AsExtra() {
2362     return type == OpParameter_Extra ?
2363       reinterpret_cast<ExtraT *>(value) : nullptr;
2364   }
2365   const ExtraT *AsExtra() const {
2366     return type == OpParameter_Extra ?
2367       reinterpret_cast<const ExtraT *>(value) : nullptr;
2368   }
2369   Pool3DT *AsPool3D() {
2370     return type == OpParameter_Pool3D ?
2371       reinterpret_cast<Pool3DT *>(value) : nullptr;
2372   }
2373   const Pool3DT *AsPool3D() const {
2374     return type == OpParameter_Pool3D ?
2375       reinterpret_cast<const Pool3DT *>(value) : nullptr;
2376   }
2377   Convolution3DT *AsConvolution3D() {
2378     return type == OpParameter_Convolution3D ?
2379       reinterpret_cast<Convolution3DT *>(value) : nullptr;
2380   }
2381   const Convolution3DT *AsConvolution3D() const {
2382     return type == OpParameter_Convolution3D ?
2383       reinterpret_cast<const Convolution3DT *>(value) : nullptr;
2384   }
2385   ELUT *AsELU() {
2386     return type == OpParameter_ELU ?
2387       reinterpret_cast<ELUT *>(value) : nullptr;
2388   }
2389   const ELUT *AsELU() const {
2390     return type == OpParameter_ELU ?
2391       reinterpret_cast<const ELUT *>(value) : nullptr;
2392   }
2393   DetectionPostProcessParamT *AsDetectionPostProcessParam() {
2394     return type == OpParameter_DetectionPostProcessParam ?
2395       reinterpret_cast<DetectionPostProcessParamT *>(value) : nullptr;
2396   }
2397   const DetectionPostProcessParamT *AsDetectionPostProcessParam() const {
2398     return type == OpParameter_DetectionPostProcessParam ?
2399       reinterpret_cast<const DetectionPostProcessParamT *>(value) : nullptr;
2400   }
2401   OneHotParamT *AsOneHotParam() {
2402     return type == OpParameter_OneHotParam ?
2403       reinterpret_cast<OneHotParamT *>(value) : nullptr;
2404   }
2405   const OneHotParamT *AsOneHotParam() const {
2406     return type == OpParameter_OneHotParam ?
2407       reinterpret_cast<const OneHotParamT *>(value) : nullptr;
2408   }
2409   PadParamT *AsPadParam() {
2410     return type == OpParameter_PadParam ?
2411       reinterpret_cast<PadParamT *>(value) : nullptr;
2412   }
2413   const PadParamT *AsPadParam() const {
2414     return type == OpParameter_PadParam ?
2415       reinterpret_cast<const PadParamT *>(value) : nullptr;
2416   }
2417   WhileParamT *AsWhileParam() {
2418     return type == OpParameter_WhileParam ?
2419       reinterpret_cast<WhileParamT *>(value) : nullptr;
2420   }
2421   const WhileParamT *AsWhileParam() const {
2422     return type == OpParameter_WhileParam ?
2423       reinterpret_cast<const WhileParamT *>(value) : nullptr;
2424   }
2425   IfParamT *AsIfParam() {
2426     return type == OpParameter_IfParam ?
2427       reinterpret_cast<IfParamT *>(value) : nullptr;
2428   }
2429   const IfParamT *AsIfParam() const {
2430     return type == OpParameter_IfParam ?
2431       reinterpret_cast<const IfParamT *>(value) : nullptr;
2432   }
2433   RandomUniformT *AsRandomUniform() {
2434     return type == OpParameter_RandomUniform ?
2435       reinterpret_cast<RandomUniformT *>(value) : nullptr;
2436   }
2437   const RandomUniformT *AsRandomUniform() const {
2438     return type == OpParameter_RandomUniform ?
2439       reinterpret_cast<const RandomUniformT *>(value) : nullptr;
2440   }
2441   LayerNormT *AsLayerNorm() {
2442     return type == OpParameter_LayerNorm ?
2443       reinterpret_cast<LayerNormT *>(value) : nullptr;
2444   }
2445   const LayerNormT *AsLayerNorm() const {
2446     return type == OpParameter_LayerNorm ?
2447       reinterpret_cast<const LayerNormT *>(value) : nullptr;
2448   }
2449   TensorArrayT *AsTensorArray() {
2450     return type == OpParameter_TensorArray ?
2451       reinterpret_cast<TensorArrayT *>(value) : nullptr;
2452   }
2453   const TensorArrayT *AsTensorArray() const {
2454     return type == OpParameter_TensorArray ?
2455       reinterpret_cast<const TensorArrayT *>(value) : nullptr;
2456   }
2457   LSTMBlockCellT *AsLSTMBlockCell() {
2458     return type == OpParameter_LSTMBlockCell ?
2459       reinterpret_cast<LSTMBlockCellT *>(value) : nullptr;
2460   }
2461   const LSTMBlockCellT *AsLSTMBlockCell() const {
2462     return type == OpParameter_LSTMBlockCell ?
2463       reinterpret_cast<const LSTMBlockCellT *>(value) : nullptr;
2464   }
2465   GridSampleT *AsGridSample() {
2466     return type == OpParameter_GridSample ?
2467       reinterpret_cast<GridSampleT *>(value) : nullptr;
2468   }
2469   const GridSampleT *AsGridSample() const {
2470     return type == OpParameter_GridSample ?
2471       reinterpret_cast<const GridSampleT *>(value) : nullptr;
2472   }
2473   LoopParamT *AsLoopParam() {
2474     return type == OpParameter_LoopParam ?
2475       reinterpret_cast<LoopParamT *>(value) : nullptr;
2476   }
2477   const LoopParamT *AsLoopParam() const {
2478     return type == OpParameter_LoopParam ?
2479       reinterpret_cast<const LoopParamT *>(value) : nullptr;
2480   }
2481 };
2482 
2483 bool VerifyOpParameter(flatbuffers::Verifier &verifier, const void *obj, OpParameter type);
2484 bool VerifyOpParameterVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
2485 
2486 enum ForwardType {
2487   ForwardType_CPU = 0,
2488   ForwardType_METAL = 1,
2489   ForwardType_OPENCL = 2,
2490   ForwardType_OPENGLES = 3,
2491   ForwardType_VULKAN = 4,
2492   ForwardType_MIN = ForwardType_CPU,
2493   ForwardType_MAX = ForwardType_VULKAN
2494 };
2495 
2496 inline const ForwardType (&EnumValuesForwardType())[5] {
2497   static const ForwardType values[] = {
2498     ForwardType_CPU,
2499     ForwardType_METAL,
2500     ForwardType_OPENCL,
2501     ForwardType_OPENGLES,
2502     ForwardType_VULKAN
2503   };
2504   return values;
2505 }
2506 
2507 inline const char * const *EnumNamesForwardType() {
2508   static const char * const names[] = {
2509     "CPU",
2510     "METAL",
2511     "OPENCL",
2512     "OPENGLES",
2513     "VULKAN",
2514     nullptr
2515   };
2516   return names;
2517 }
2518 
2519 inline const char *EnumNameForwardType(ForwardType e) {
2520   if (e < ForwardType_CPU || e > ForwardType_VULKAN) return "";
2521   const size_t index = static_cast<int>(e);
2522   return EnumNamesForwardType()[index];
2523 }
2524 
2525 enum Usage {
2526   Usage_INFERENCE = 0,
2527   Usage_TRAIN = 1,
2528   Usage_INFERENCE_STATIC = 2,
2529   Usage_MIN = Usage_INFERENCE,
2530   Usage_MAX = Usage_INFERENCE_STATIC
2531 };
2532 
2533 inline const Usage (&EnumValuesUsage())[3] {
2534   static const Usage values[] = {
2535     Usage_INFERENCE,
2536     Usage_TRAIN,
2537     Usage_INFERENCE_STATIC
2538   };
2539   return values;
2540 }
2541 
2542 inline const char * const *EnumNamesUsage() {
2543   static const char * const names[] = {
2544     "INFERENCE",
2545     "TRAIN",
2546     "INFERENCE_STATIC",
2547     nullptr
2548   };
2549   return names;
2550 }
2551 
2552 inline const char *EnumNameUsage(Usage e) {
2553   if (e < Usage_INFERENCE || e > Usage_INFERENCE_STATIC) return "";
2554   const size_t index = static_cast<int>(e);
2555   return EnumNamesUsage()[index];
2556 }
2557 
2558 struct PluginT : public flatbuffers::NativeTable {
2559   typedef Plugin TableType;
2560   std::string type;
2561   std::vector<std::unique_ptr<AttributeT>> attr;
2562   PluginT() {
2563   }
2564 };
2565 
2566 struct Plugin FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
2567   typedef PluginT NativeTableType;
2568   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
2569     return PluginTypeTable();
2570   }
2571   const flatbuffers::String *type() const {
2572     return GetPointer<const flatbuffers::String *>(4);
2573   }
2574   const flatbuffers::Vector<flatbuffers::Offset<Attribute>> *attr() const {
2575     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Attribute>> *>(6);
2576   }
2577   bool Verify(flatbuffers::Verifier &verifier) const {
2578     return VerifyTableStart(verifier) &&
2579            VerifyOffset(verifier, 4) &&
2580            verifier.VerifyString(type()) &&
2581            VerifyOffset(verifier, 6) &&
2582            verifier.VerifyVector(attr()) &&
2583            verifier.VerifyVectorOfTables(attr()) &&
2584            verifier.EndTable();
2585   }
2586   PluginT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2587   void UnPackTo(PluginT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2588   static flatbuffers::Offset<Plugin> Pack(flatbuffers::FlatBufferBuilder &_fbb, const PluginT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2589 };
2590 
2591 struct PluginBuilder {
2592   flatbuffers::FlatBufferBuilder &fbb_;
2593   flatbuffers::uoffset_t start_;
2594   void add_type(flatbuffers::Offset<flatbuffers::String> type) {
2595     fbb_.AddOffset(4, type);
2596   }
2597   void add_attr(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Attribute>>> attr) {
2598     fbb_.AddOffset(6, attr);
2599   }
2600   explicit PluginBuilder(flatbuffers::FlatBufferBuilder &_fbb)
2601         : fbb_(_fbb) {
2602     start_ = fbb_.StartTable();
2603   }
2604   PluginBuilder &operator=(const PluginBuilder &);
2605   flatbuffers::Offset<Plugin> Finish() {
2606     const auto end = fbb_.EndTable(start_);
2607     auto o = flatbuffers::Offset<Plugin>(end);
2608     return o;
2609   }
2610 };
2611 
2612 inline flatbuffers::Offset<Plugin> CreatePlugin(
2613     flatbuffers::FlatBufferBuilder &_fbb,
2614     flatbuffers::Offset<flatbuffers::String> type = 0,
2615     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Attribute>>> attr = 0) {
2616   PluginBuilder builder_(_fbb);
2617   builder_.add_attr(attr);
2618   builder_.add_type(type);
2619   return builder_.Finish();
2620 }
2621 
2622 flatbuffers::Offset<Plugin> CreatePlugin(flatbuffers::FlatBufferBuilder &_fbb, const PluginT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2623 
2624 struct ExtraT : public flatbuffers::NativeTable {
2625   typedef Extra TableType;
2626   std::string type;
2627   std::string engine;
2628   std::vector<int8_t> info;
2629   std::vector<std::unique_ptr<AttributeT>> attr;
2630   ExtraT() {
2631   }
2632 };
2633 
2634 struct Extra FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
2635   typedef ExtraT NativeTableType;
2636   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
2637     return ExtraTypeTable();
2638   }
2639   const flatbuffers::String *type() const {
2640     return GetPointer<const flatbuffers::String *>(4);
2641   }
2642   const flatbuffers::String *engine() const {
2643     return GetPointer<const flatbuffers::String *>(6);
2644   }
2645   const flatbuffers::Vector<int8_t> *info() const {
2646     return GetPointer<const flatbuffers::Vector<int8_t> *>(8);
2647   }
2648   const flatbuffers::Vector<flatbuffers::Offset<Attribute>> *attr() const {
2649     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Attribute>> *>(10);
2650   }
2651   bool Verify(flatbuffers::Verifier &verifier) const {
2652     return VerifyTableStart(verifier) &&
2653            VerifyOffset(verifier, 4) &&
2654            verifier.VerifyString(type()) &&
2655            VerifyOffset(verifier, 6) &&
2656            verifier.VerifyString(engine()) &&
2657            VerifyOffset(verifier, 8) &&
2658            verifier.VerifyVector(info()) &&
2659            VerifyOffset(verifier, 10) &&
2660            verifier.VerifyVector(attr()) &&
2661            verifier.VerifyVectorOfTables(attr()) &&
2662            verifier.EndTable();
2663   }
2664   ExtraT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2665   void UnPackTo(ExtraT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2666   static flatbuffers::Offset<Extra> Pack(flatbuffers::FlatBufferBuilder &_fbb, const ExtraT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2667 };
2668 
2669 struct ExtraBuilder {
2670   flatbuffers::FlatBufferBuilder &fbb_;
2671   flatbuffers::uoffset_t start_;
2672   void add_type(flatbuffers::Offset<flatbuffers::String> type) {
2673     fbb_.AddOffset(4, type);
2674   }
2675   void add_engine(flatbuffers::Offset<flatbuffers::String> engine) {
2676     fbb_.AddOffset(6, engine);
2677   }
2678   void add_info(flatbuffers::Offset<flatbuffers::Vector<int8_t>> info) {
2679     fbb_.AddOffset(8, info);
2680   }
2681   void add_attr(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Attribute>>> attr) {
2682     fbb_.AddOffset(10, attr);
2683   }
2684   explicit ExtraBuilder(flatbuffers::FlatBufferBuilder &_fbb)
2685         : fbb_(_fbb) {
2686     start_ = fbb_.StartTable();
2687   }
2688   ExtraBuilder &operator=(const ExtraBuilder &);
2689   flatbuffers::Offset<Extra> Finish() {
2690     const auto end = fbb_.EndTable(start_);
2691     auto o = flatbuffers::Offset<Extra>(end);
2692     return o;
2693   }
2694 };
2695 
2696 inline flatbuffers::Offset<Extra> CreateExtra(
2697     flatbuffers::FlatBufferBuilder &_fbb,
2698     flatbuffers::Offset<flatbuffers::String> type = 0,
2699     flatbuffers::Offset<flatbuffers::String> engine = 0,
2700     flatbuffers::Offset<flatbuffers::Vector<int8_t>> info = 0,
2701     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Attribute>>> attr = 0) {
2702   ExtraBuilder builder_(_fbb);
2703   builder_.add_attr(attr);
2704   builder_.add_info(info);
2705   builder_.add_engine(engine);
2706   builder_.add_type(type);
2707   return builder_.Finish();
2708 }
2709 
2710 flatbuffers::Offset<Extra> CreateExtra(flatbuffers::FlatBufferBuilder &_fbb, const ExtraT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2711 
2712 struct StringVecT : public flatbuffers::NativeTable {
2713   typedef StringVec TableType;
2714   std::vector<std::string> data;
2715   StringVecT() {
2716   }
2717 };
2718 
2719 struct StringVec FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
2720   typedef StringVecT NativeTableType;
2721   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
2722     return StringVecTypeTable();
2723   }
2724   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *data() const {
2725     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(4);
2726   }
2727   bool Verify(flatbuffers::Verifier &verifier) const {
2728     return VerifyTableStart(verifier) &&
2729            VerifyOffset(verifier, 4) &&
2730            verifier.VerifyVector(data()) &&
2731            verifier.VerifyVectorOfStrings(data()) &&
2732            verifier.EndTable();
2733   }
2734   StringVecT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2735   void UnPackTo(StringVecT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2736   static flatbuffers::Offset<StringVec> Pack(flatbuffers::FlatBufferBuilder &_fbb, const StringVecT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2737 };
2738 
2739 struct StringVecBuilder {
2740   flatbuffers::FlatBufferBuilder &fbb_;
2741   flatbuffers::uoffset_t start_;
2742   void add_data(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> data) {
2743     fbb_.AddOffset(4, data);
2744   }
2745   explicit StringVecBuilder(flatbuffers::FlatBufferBuilder &_fbb)
2746         : fbb_(_fbb) {
2747     start_ = fbb_.StartTable();
2748   }
2749   StringVecBuilder &operator=(const StringVecBuilder &);
2750   flatbuffers::Offset<StringVec> Finish() {
2751     const auto end = fbb_.EndTable(start_);
2752     auto o = flatbuffers::Offset<StringVec>(end);
2753     return o;
2754   }
2755 };
2756 
2757 inline flatbuffers::Offset<StringVec> CreateStringVec(
2758     flatbuffers::FlatBufferBuilder &_fbb,
2759     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> data = 0) {
2760   StringVecBuilder builder_(_fbb);
2761   builder_.add_data(data);
2762   return builder_.Finish();
2763 }
2764 
2765 flatbuffers::Offset<StringVec> CreateStringVec(flatbuffers::FlatBufferBuilder &_fbb, const StringVecT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2766 
2767 struct WhileParamT : public flatbuffers::NativeTable {
2768   typedef WhileParam TableType;
2769   std::string cond_graph;
2770   std::string body_graph;
2771   std::vector<std::unique_ptr<StringVecT>> aliases_inputs;
2772   std::vector<std::string> aliases_outputs;
2773   std::vector<std::unique_ptr<StringVecT>> aliases_updates;
2774   WhileParamT() {
2775   }
2776 };
2777 
2778 struct WhileParam FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
2779   typedef WhileParamT NativeTableType;
2780   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
2781     return WhileParamTypeTable();
2782   }
2783   const flatbuffers::String *cond_graph() const {
2784     return GetPointer<const flatbuffers::String *>(4);
2785   }
2786   const flatbuffers::String *body_graph() const {
2787     return GetPointer<const flatbuffers::String *>(6);
2788   }
2789   const flatbuffers::Vector<flatbuffers::Offset<StringVec>> *aliases_inputs() const {
2790     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<StringVec>> *>(8);
2791   }
2792   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *aliases_outputs() const {
2793     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(10);
2794   }
2795   const flatbuffers::Vector<flatbuffers::Offset<StringVec>> *aliases_updates() const {
2796     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<StringVec>> *>(12);
2797   }
2798   bool Verify(flatbuffers::Verifier &verifier) const {
2799     return VerifyTableStart(verifier) &&
2800            VerifyOffset(verifier, 4) &&
2801            verifier.VerifyString(cond_graph()) &&
2802            VerifyOffset(verifier, 6) &&
2803            verifier.VerifyString(body_graph()) &&
2804            VerifyOffset(verifier, 8) &&
2805            verifier.VerifyVector(aliases_inputs()) &&
2806            verifier.VerifyVectorOfTables(aliases_inputs()) &&
2807            VerifyOffset(verifier, 10) &&
2808            verifier.VerifyVector(aliases_outputs()) &&
2809            verifier.VerifyVectorOfStrings(aliases_outputs()) &&
2810            VerifyOffset(verifier, 12) &&
2811            verifier.VerifyVector(aliases_updates()) &&
2812            verifier.VerifyVectorOfTables(aliases_updates()) &&
2813            verifier.EndTable();
2814   }
2815   WhileParamT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2816   void UnPackTo(WhileParamT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2817   static flatbuffers::Offset<WhileParam> Pack(flatbuffers::FlatBufferBuilder &_fbb, const WhileParamT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2818 };
2819 
2820 struct WhileParamBuilder {
2821   flatbuffers::FlatBufferBuilder &fbb_;
2822   flatbuffers::uoffset_t start_;
2823   void add_cond_graph(flatbuffers::Offset<flatbuffers::String> cond_graph) {
2824     fbb_.AddOffset(4, cond_graph);
2825   }
2826   void add_body_graph(flatbuffers::Offset<flatbuffers::String> body_graph) {
2827     fbb_.AddOffset(6, body_graph);
2828   }
2829   void add_aliases_inputs(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<StringVec>>> aliases_inputs) {
2830     fbb_.AddOffset(8, aliases_inputs);
2831   }
2832   void add_aliases_outputs(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> aliases_outputs) {
2833     fbb_.AddOffset(10, aliases_outputs);
2834   }
2835   void add_aliases_updates(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<StringVec>>> aliases_updates) {
2836     fbb_.AddOffset(12, aliases_updates);
2837   }
2838   explicit WhileParamBuilder(flatbuffers::FlatBufferBuilder &_fbb)
2839         : fbb_(_fbb) {
2840     start_ = fbb_.StartTable();
2841   }
2842   WhileParamBuilder &operator=(const WhileParamBuilder &);
2843   flatbuffers::Offset<WhileParam> Finish() {
2844     const auto end = fbb_.EndTable(start_);
2845     auto o = flatbuffers::Offset<WhileParam>(end);
2846     return o;
2847   }
2848 };
2849 
2850 inline flatbuffers::Offset<WhileParam> CreateWhileParam(
2851     flatbuffers::FlatBufferBuilder &_fbb,
2852     flatbuffers::Offset<flatbuffers::String> cond_graph = 0,
2853     flatbuffers::Offset<flatbuffers::String> body_graph = 0,
2854     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<StringVec>>> aliases_inputs = 0,
2855     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> aliases_outputs = 0,
2856     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<StringVec>>> aliases_updates = 0) {
2857   WhileParamBuilder builder_(_fbb);
2858   builder_.add_aliases_updates(aliases_updates);
2859   builder_.add_aliases_outputs(aliases_outputs);
2860   builder_.add_aliases_inputs(aliases_inputs);
2861   builder_.add_body_graph(body_graph);
2862   builder_.add_cond_graph(cond_graph);
2863   return builder_.Finish();
2864 }
2865 
2866 flatbuffers::Offset<WhileParam> CreateWhileParam(flatbuffers::FlatBufferBuilder &_fbb, const WhileParamT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2867 
2868 struct IfParamT : public flatbuffers::NativeTable {
2869   typedef IfParam TableType;
2870   std::string then_graph;
2871   std::string else_graph;
2872   std::vector<std::unique_ptr<StringVecT>> aliases_inputs;
2873   std::vector<std::unique_ptr<StringVecT>> aliases_outputs;
2874   IfParamT() {
2875   }
2876 };
2877 
2878 struct IfParam FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
2879   typedef IfParamT NativeTableType;
2880   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
2881     return IfParamTypeTable();
2882   }
2883   const flatbuffers::String *then_graph() const {
2884     return GetPointer<const flatbuffers::String *>(4);
2885   }
2886   const flatbuffers::String *else_graph() const {
2887     return GetPointer<const flatbuffers::String *>(6);
2888   }
2889   const flatbuffers::Vector<flatbuffers::Offset<StringVec>> *aliases_inputs() const {
2890     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<StringVec>> *>(8);
2891   }
2892   const flatbuffers::Vector<flatbuffers::Offset<StringVec>> *aliases_outputs() const {
2893     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<StringVec>> *>(10);
2894   }
2895   bool Verify(flatbuffers::Verifier &verifier) const {
2896     return VerifyTableStart(verifier) &&
2897            VerifyOffset(verifier, 4) &&
2898            verifier.VerifyString(then_graph()) &&
2899            VerifyOffset(verifier, 6) &&
2900            verifier.VerifyString(else_graph()) &&
2901            VerifyOffset(verifier, 8) &&
2902            verifier.VerifyVector(aliases_inputs()) &&
2903            verifier.VerifyVectorOfTables(aliases_inputs()) &&
2904            VerifyOffset(verifier, 10) &&
2905            verifier.VerifyVector(aliases_outputs()) &&
2906            verifier.VerifyVectorOfTables(aliases_outputs()) &&
2907            verifier.EndTable();
2908   }
2909   IfParamT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2910   void UnPackTo(IfParamT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2911   static flatbuffers::Offset<IfParam> Pack(flatbuffers::FlatBufferBuilder &_fbb, const IfParamT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2912 };
2913 
2914 struct IfParamBuilder {
2915   flatbuffers::FlatBufferBuilder &fbb_;
2916   flatbuffers::uoffset_t start_;
2917   void add_then_graph(flatbuffers::Offset<flatbuffers::String> then_graph) {
2918     fbb_.AddOffset(4, then_graph);
2919   }
2920   void add_else_graph(flatbuffers::Offset<flatbuffers::String> else_graph) {
2921     fbb_.AddOffset(6, else_graph);
2922   }
2923   void add_aliases_inputs(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<StringVec>>> aliases_inputs) {
2924     fbb_.AddOffset(8, aliases_inputs);
2925   }
2926   void add_aliases_outputs(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<StringVec>>> aliases_outputs) {
2927     fbb_.AddOffset(10, aliases_outputs);
2928   }
2929   explicit IfParamBuilder(flatbuffers::FlatBufferBuilder &_fbb)
2930         : fbb_(_fbb) {
2931     start_ = fbb_.StartTable();
2932   }
2933   IfParamBuilder &operator=(const IfParamBuilder &);
2934   flatbuffers::Offset<IfParam> Finish() {
2935     const auto end = fbb_.EndTable(start_);
2936     auto o = flatbuffers::Offset<IfParam>(end);
2937     return o;
2938   }
2939 };
2940 
2941 inline flatbuffers::Offset<IfParam> CreateIfParam(
2942     flatbuffers::FlatBufferBuilder &_fbb,
2943     flatbuffers::Offset<flatbuffers::String> then_graph = 0,
2944     flatbuffers::Offset<flatbuffers::String> else_graph = 0,
2945     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<StringVec>>> aliases_inputs = 0,
2946     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<StringVec>>> aliases_outputs = 0) {
2947   IfParamBuilder builder_(_fbb);
2948   builder_.add_aliases_outputs(aliases_outputs);
2949   builder_.add_aliases_inputs(aliases_inputs);
2950   builder_.add_else_graph(else_graph);
2951   builder_.add_then_graph(then_graph);
2952   return builder_.Finish();
2953 }
2954 
2955 flatbuffers::Offset<IfParam> CreateIfParam(flatbuffers::FlatBufferBuilder &_fbb, const IfParamT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2956 
2957 struct RegionCommandT : public flatbuffers::NativeTable {
2958   typedef RegionCommand TableType;
2959   std::unique_ptr<OpT> op;
2960   std::vector<int32_t> steps;
2961   std::vector<int32_t> size;
2962   std::vector<int32_t> indexes;
2963   std::vector<std::unique_ptr<ViewT>> view;
2964   int32_t fuse;
2965   std::vector<int32_t> iterIndexes;
2966   RegionCommandT()
2967       : fuse(-1) {
2968   }
2969 };
2970 
2971 struct RegionCommand FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
2972   typedef RegionCommandT NativeTableType;
2973   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
2974     return RegionCommandTypeTable();
2975   }
2976   const Op *op() const {
2977     return GetPointer<const Op *>(4);
2978   }
2979   const flatbuffers::Vector<int32_t> *steps() const {
2980     return GetPointer<const flatbuffers::Vector<int32_t> *>(6);
2981   }
2982   const flatbuffers::Vector<int32_t> *size() const {
2983     return GetPointer<const flatbuffers::Vector<int32_t> *>(8);
2984   }
2985   const flatbuffers::Vector<int32_t> *indexes() const {
2986     return GetPointer<const flatbuffers::Vector<int32_t> *>(10);
2987   }
2988   const flatbuffers::Vector<flatbuffers::Offset<View>> *view() const {
2989     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<View>> *>(12);
2990   }
2991   int32_t fuse() const {
2992     return GetField<int32_t>(14, -1);
2993   }
2994   const flatbuffers::Vector<int32_t> *iterIndexes() const {
2995     return GetPointer<const flatbuffers::Vector<int32_t> *>(16);
2996   }
2997   bool Verify(flatbuffers::Verifier &verifier) const {
2998     return VerifyTableStart(verifier) &&
2999            VerifyOffset(verifier, 4) &&
3000            verifier.VerifyTable(op()) &&
3001            VerifyOffset(verifier, 6) &&
3002            verifier.VerifyVector(steps()) &&
3003            VerifyOffset(verifier, 8) &&
3004            verifier.VerifyVector(size()) &&
3005            VerifyOffset(verifier, 10) &&
3006            verifier.VerifyVector(indexes()) &&
3007            VerifyOffset(verifier, 12) &&
3008            verifier.VerifyVector(view()) &&
3009            verifier.VerifyVectorOfTables(view()) &&
3010            VerifyField<int32_t>(verifier, 14) &&
3011            VerifyOffset(verifier, 16) &&
3012            verifier.VerifyVector(iterIndexes()) &&
3013            verifier.EndTable();
3014   }
3015   RegionCommandT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
3016   void UnPackTo(RegionCommandT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
3017   static flatbuffers::Offset<RegionCommand> Pack(flatbuffers::FlatBufferBuilder &_fbb, const RegionCommandT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
3018 };
3019 
3020 struct RegionCommandBuilder {
3021   flatbuffers::FlatBufferBuilder &fbb_;
3022   flatbuffers::uoffset_t start_;
3023   void add_op(flatbuffers::Offset<Op> op) {
3024     fbb_.AddOffset(4, op);
3025   }
3026   void add_steps(flatbuffers::Offset<flatbuffers::Vector<int32_t>> steps) {
3027     fbb_.AddOffset(6, steps);
3028   }
3029   void add_size(flatbuffers::Offset<flatbuffers::Vector<int32_t>> size) {
3030     fbb_.AddOffset(8, size);
3031   }
3032   void add_indexes(flatbuffers::Offset<flatbuffers::Vector<int32_t>> indexes) {
3033     fbb_.AddOffset(10, indexes);
3034   }
3035   void add_view(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<View>>> view) {
3036     fbb_.AddOffset(12, view);
3037   }
3038   void add_fuse(int32_t fuse) {
3039     fbb_.AddElement<int32_t>(14, fuse, -1);
3040   }
3041   void add_iterIndexes(flatbuffers::Offset<flatbuffers::Vector<int32_t>> iterIndexes) {
3042     fbb_.AddOffset(16, iterIndexes);
3043   }
3044   explicit RegionCommandBuilder(flatbuffers::FlatBufferBuilder &_fbb)
3045         : fbb_(_fbb) {
3046     start_ = fbb_.StartTable();
3047   }
3048   RegionCommandBuilder &operator=(const RegionCommandBuilder &);
3049   flatbuffers::Offset<RegionCommand> Finish() {
3050     const auto end = fbb_.EndTable(start_);
3051     auto o = flatbuffers::Offset<RegionCommand>(end);
3052     return o;
3053   }
3054 };
3055 
3056 inline flatbuffers::Offset<RegionCommand> CreateRegionCommand(
3057     flatbuffers::FlatBufferBuilder &_fbb,
3058     flatbuffers::Offset<Op> op = 0,
3059     flatbuffers::Offset<flatbuffers::Vector<int32_t>> steps = 0,
3060     flatbuffers::Offset<flatbuffers::Vector<int32_t>> size = 0,
3061     flatbuffers::Offset<flatbuffers::Vector<int32_t>> indexes = 0,
3062     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<View>>> view = 0,
3063     int32_t fuse = -1,
3064     flatbuffers::Offset<flatbuffers::Vector<int32_t>> iterIndexes = 0) {
3065   RegionCommandBuilder builder_(_fbb);
3066   builder_.add_iterIndexes(iterIndexes);
3067   builder_.add_fuse(fuse);
3068   builder_.add_view(view);
3069   builder_.add_indexes(indexes);
3070   builder_.add_size(size);
3071   builder_.add_steps(steps);
3072   builder_.add_op(op);
3073   return builder_.Finish();
3074 }
3075 
3076 flatbuffers::Offset<RegionCommand> CreateRegionCommand(flatbuffers::FlatBufferBuilder &_fbb, const RegionCommandT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
3077 
3078 struct LoopParamT : public flatbuffers::NativeTable {
3079   typedef LoopParam TableType;
3080   int32_t tensorNumber;
3081   std::vector<int32_t> outputIndexes;
3082   std::vector<int32_t> inputIndexes;
3083   std::vector<std::unique_ptr<TensorDescribeT>> midTensors;
3084   bool parallel;
3085   int32_t loopNumber;
3086   std::vector<std::unique_ptr<RegionCommandT>> commands;
3087   LoopParamT()
3088       : tensorNumber(0),
3089         parallel(true),
3090         loopNumber(0) {
3091   }
3092 };
3093 
3094 struct LoopParam FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
3095   typedef LoopParamT NativeTableType;
3096   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
3097     return LoopParamTypeTable();
3098   }
3099   int32_t tensorNumber() const {
3100     return GetField<int32_t>(4, 0);
3101   }
3102   const flatbuffers::Vector<int32_t> *outputIndexes() const {
3103     return GetPointer<const flatbuffers::Vector<int32_t> *>(6);
3104   }
3105   const flatbuffers::Vector<int32_t> *inputIndexes() const {
3106     return GetPointer<const flatbuffers::Vector<int32_t> *>(8);
3107   }
3108   const flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>> *midTensors() const {
3109     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>> *>(10);
3110   }
3111   bool parallel() const {
3112     return GetField<uint8_t>(12, 1) != 0;
3113   }
3114   int32_t loopNumber() const {
3115     return GetField<int32_t>(14, 0);
3116   }
3117   const flatbuffers::Vector<flatbuffers::Offset<RegionCommand>> *commands() const {
3118     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<RegionCommand>> *>(16);
3119   }
3120   bool Verify(flatbuffers::Verifier &verifier) const {
3121     return VerifyTableStart(verifier) &&
3122            VerifyField<int32_t>(verifier, 4) &&
3123            VerifyOffset(verifier, 6) &&
3124            verifier.VerifyVector(outputIndexes()) &&
3125            VerifyOffset(verifier, 8) &&
3126            verifier.VerifyVector(inputIndexes()) &&
3127            VerifyOffset(verifier, 10) &&
3128            verifier.VerifyVector(midTensors()) &&
3129            verifier.VerifyVectorOfTables(midTensors()) &&
3130            VerifyField<uint8_t>(verifier, 12) &&
3131            VerifyField<int32_t>(verifier, 14) &&
3132            VerifyOffset(verifier, 16) &&
3133            verifier.VerifyVector(commands()) &&
3134            verifier.VerifyVectorOfTables(commands()) &&
3135            verifier.EndTable();
3136   }
3137   LoopParamT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
3138   void UnPackTo(LoopParamT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
3139   static flatbuffers::Offset<LoopParam> Pack(flatbuffers::FlatBufferBuilder &_fbb, const LoopParamT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
3140 };
3141 
3142 struct LoopParamBuilder {
3143   flatbuffers::FlatBufferBuilder &fbb_;
3144   flatbuffers::uoffset_t start_;
3145   void add_tensorNumber(int32_t tensorNumber) {
3146     fbb_.AddElement<int32_t>(4, tensorNumber, 0);
3147   }
3148   void add_outputIndexes(flatbuffers::Offset<flatbuffers::Vector<int32_t>> outputIndexes) {
3149     fbb_.AddOffset(6, outputIndexes);
3150   }
3151   void add_inputIndexes(flatbuffers::Offset<flatbuffers::Vector<int32_t>> inputIndexes) {
3152     fbb_.AddOffset(8, inputIndexes);
3153   }
3154   void add_midTensors(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>>> midTensors) {
3155     fbb_.AddOffset(10, midTensors);
3156   }
3157   void add_parallel(bool parallel) {
3158     fbb_.AddElement<uint8_t>(12, static_cast<uint8_t>(parallel), 1);
3159   }
3160   void add_loopNumber(int32_t loopNumber) {
3161     fbb_.AddElement<int32_t>(14, loopNumber, 0);
3162   }
3163   void add_commands(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<RegionCommand>>> commands) {
3164     fbb_.AddOffset(16, commands);
3165   }
3166   explicit LoopParamBuilder(flatbuffers::FlatBufferBuilder &_fbb)
3167         : fbb_(_fbb) {
3168     start_ = fbb_.StartTable();
3169   }
3170   LoopParamBuilder &operator=(const LoopParamBuilder &);
3171   flatbuffers::Offset<LoopParam> Finish() {
3172     const auto end = fbb_.EndTable(start_);
3173     auto o = flatbuffers::Offset<LoopParam>(end);
3174     return o;
3175   }
3176 };
3177 
3178 inline flatbuffers::Offset<LoopParam> CreateLoopParam(
3179     flatbuffers::FlatBufferBuilder &_fbb,
3180     int32_t tensorNumber = 0,
3181     flatbuffers::Offset<flatbuffers::Vector<int32_t>> outputIndexes = 0,
3182     flatbuffers::Offset<flatbuffers::Vector<int32_t>> inputIndexes = 0,
3183     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>>> midTensors = 0,
3184     bool parallel = true,
3185     int32_t loopNumber = 0,
3186     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<RegionCommand>>> commands = 0) {
3187   LoopParamBuilder builder_(_fbb);
3188   builder_.add_commands(commands);
3189   builder_.add_loopNumber(loopNumber);
3190   builder_.add_midTensors(midTensors);
3191   builder_.add_inputIndexes(inputIndexes);
3192   builder_.add_outputIndexes(outputIndexes);
3193   builder_.add_tensorNumber(tensorNumber);
3194   builder_.add_parallel(parallel);
3195   return builder_.Finish();
3196 }
3197 
3198 flatbuffers::Offset<LoopParam> CreateLoopParam(flatbuffers::FlatBufferBuilder &_fbb, const LoopParamT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
3199 
3200 struct OpT : public flatbuffers::NativeTable {
3201   typedef Op TableType;
3202   std::vector<int32_t> inputIndexes;
3203   OpParameterUnion main;
3204   std::string name;
3205   std::vector<int32_t> outputIndexes;
3206   OpType type;
3207   MNN_DATA_FORMAT defaultDimentionFormat;
3208   OpT()
3209       : type(OpType_AbsVal),
3210         defaultDimentionFormat(MNN_DATA_FORMAT_NHWC) {
3211   }
3212 };
3213 
3214 struct Op FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
3215   typedef OpT NativeTableType;
3216   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
3217     return OpTypeTable();
3218   }
3219   const flatbuffers::Vector<int32_t> *inputIndexes() const {
3220     return GetPointer<const flatbuffers::Vector<int32_t> *>(4);
3221   }
3222   OpParameter main_type() const {
3223     return static_cast<OpParameter>(GetField<uint8_t>(6, 0));
3224   }
3225   const void *main() const {
3226     return GetPointer<const void *>(8);
3227   }
3228   template<typename T> const T *main_as() const;
3229   const QuantizedAdd *main_as_QuantizedAdd() const {
3230     return main_type() == OpParameter_QuantizedAdd ? static_cast<const QuantizedAdd *>(main()) : nullptr;
3231   }
3232   const ArgMax *main_as_ArgMax() const {
3233     return main_type() == OpParameter_ArgMax ? static_cast<const ArgMax *>(main()) : nullptr;
3234   }
3235   const AsString *main_as_AsString() const {
3236     return main_type() == OpParameter_AsString ? static_cast<const AsString *>(main()) : nullptr;
3237   }
3238   const Axis *main_as_Axis() const {
3239     return main_type() == OpParameter_Axis ? static_cast<const Axis *>(main()) : nullptr;
3240   }
3241   const BatchNorm *main_as_BatchNorm() const {
3242     return main_type() == OpParameter_BatchNorm ? static_cast<const BatchNorm *>(main()) : nullptr;
3243   }
3244   const BinaryOp *main_as_BinaryOp() const {
3245     return main_type() == OpParameter_BinaryOp ? static_cast<const BinaryOp *>(main()) : nullptr;
3246   }
3247   const Blob *main_as_Blob() const {
3248     return main_type() == OpParameter_Blob ? static_cast<const Blob *>(main()) : nullptr;
3249   }
3250   const CastParam *main_as_CastParam() const {
3251     return main_type() == OpParameter_CastParam ? static_cast<const CastParam *>(main()) : nullptr;
3252   }
3253   const Convolution2D *main_as_Convolution2D() const {
3254     return main_type() == OpParameter_Convolution2D ? static_cast<const Convolution2D *>(main()) : nullptr;
3255   }
3256   const Crop *main_as_Crop() const {
3257     return main_type() == OpParameter_Crop ? static_cast<const Crop *>(main()) : nullptr;
3258   }
3259   const CropAndResize *main_as_CropAndResize() const {
3260     return main_type() == OpParameter_CropAndResize ? static_cast<const CropAndResize *>(main()) : nullptr;
3261   }
3262   const Dequantize *main_as_Dequantize() const {
3263     return main_type() == OpParameter_Dequantize ? static_cast<const Dequantize *>(main()) : nullptr;
3264   }
3265   const DetectionOutput *main_as_DetectionOutput() const {
3266     return main_type() == OpParameter_DetectionOutput ? static_cast<const DetectionOutput *>(main()) : nullptr;
3267   }
3268   const Eltwise *main_as_Eltwise() const {
3269     return main_type() == OpParameter_Eltwise ? static_cast<const Eltwise *>(main()) : nullptr;
3270   }
3271   const ExpandDims *main_as_ExpandDims() const {
3272     return main_type() == OpParameter_ExpandDims ? static_cast<const ExpandDims *>(main()) : nullptr;
3273   }
3274   const Fill *main_as_Fill() const {
3275     return main_type() == OpParameter_Fill ? static_cast<const Fill *>(main()) : nullptr;
3276   }
3277   const Flatten *main_as_Flatten() const {
3278     return main_type() == OpParameter_Flatten ? static_cast<const Flatten *>(main()) : nullptr;
3279   }
3280   const Gather *main_as_Gather() const {
3281     return main_type() == OpParameter_Gather ? static_cast<const Gather *>(main()) : nullptr;
3282   }
3283   const GatherV2 *main_as_GatherV2() const {
3284     return main_type() == OpParameter_GatherV2 ? static_cast<const GatherV2 *>(main()) : nullptr;
3285   }
3286   const InnerProduct *main_as_InnerProduct() const {
3287     return main_type() == OpParameter_InnerProduct ? static_cast<const InnerProduct *>(main()) : nullptr;
3288   }
3289   const Input *main_as_Input() const {
3290     return main_type() == OpParameter_Input ? static_cast<const Input *>(main()) : nullptr;
3291   }
3292   const Interp *main_as_Interp() const {
3293     return main_type() == OpParameter_Interp ? static_cast<const Interp *>(main()) : nullptr;
3294   }
3295   const LRN *main_as_LRN() const {
3296     return main_type() == OpParameter_LRN ? static_cast<const LRN *>(main()) : nullptr;
3297   }
3298   const LSTM *main_as_LSTM() const {
3299     return main_type() == OpParameter_LSTM ? static_cast<const LSTM *>(main()) : nullptr;
3300   }
3301   const MatMul *main_as_MatMul() const {
3302     return main_type() == OpParameter_MatMul ? static_cast<const MatMul *>(main()) : nullptr;
3303   }
3304   const NonMaxSuppressionV2 *main_as_NonMaxSuppressionV2() const {
3305     return main_type() == OpParameter_NonMaxSuppressionV2 ? static_cast<const NonMaxSuppressionV2 *>(main()) : nullptr;
3306   }
3307   const Normalize *main_as_Normalize() const {
3308     return main_type() == OpParameter_Normalize ? static_cast<const Normalize *>(main()) : nullptr;
3309   }
3310   const PackParam *main_as_PackParam() const {
3311     return main_type() == OpParameter_PackParam ? static_cast<const PackParam *>(main()) : nullptr;
3312   }
3313   const Permute *main_as_Permute() const {
3314     return main_type() == OpParameter_Permute ? static_cast<const Permute *>(main()) : nullptr;
3315   }
3316   const Plugin *main_as_Plugin() const {
3317     return main_type() == OpParameter_Plugin ? static_cast<const Plugin *>(main()) : nullptr;
3318   }
3319   const Pool *main_as_Pool() const {
3320     return main_type() == OpParameter_Pool ? static_cast<const Pool *>(main()) : nullptr;
3321   }
3322   const PRelu *main_as_PRelu() const {
3323     return main_type() == OpParameter_PRelu ? static_cast<const PRelu *>(main()) : nullptr;
3324   }
3325   const PriorBox *main_as_PriorBox() const {
3326     return main_type() == OpParameter_PriorBox ? static_cast<const PriorBox *>(main()) : nullptr;
3327   }
3328   const Proposal *main_as_Proposal() const {
3329     return main_type() == OpParameter_Proposal ? static_cast<const Proposal *>(main()) : nullptr;
3330   }
3331   const QuantizedAvgPool *main_as_QuantizedAvgPool() const {
3332     return main_type() == OpParameter_QuantizedAvgPool ? static_cast<const QuantizedAvgPool *>(main()) : nullptr;
3333   }
3334   const QuantizedBiasAdd *main_as_QuantizedBiasAdd() const {
3335     return main_type() == OpParameter_QuantizedBiasAdd ? static_cast<const QuantizedBiasAdd *>(main()) : nullptr;
3336   }
3337   const QuantizedConcat *main_as_QuantizedConcat() const {
3338     return main_type() == OpParameter_QuantizedConcat ? static_cast<const QuantizedConcat *>(main()) : nullptr;
3339   }
3340   const QuantizedLogistic *main_as_QuantizedLogistic() const {
3341     return main_type() == OpParameter_QuantizedLogistic ? static_cast<const QuantizedLogistic *>(main()) : nullptr;
3342   }
3343   const QuantizedMatMul *main_as_QuantizedMatMul() const {
3344     return main_type() == OpParameter_QuantizedMatMul ? static_cast<const QuantizedMatMul *>(main()) : nullptr;
3345   }
3346   const QuantizedMaxPool *main_as_QuantizedMaxPool() const {
3347     return main_type() == OpParameter_QuantizedMaxPool ? static_cast<const QuantizedMaxPool *>(main()) : nullptr;
3348   }
3349   const QuantizedRelu *main_as_QuantizedRelu() const {
3350     return main_type() == OpParameter_QuantizedRelu ? static_cast<const QuantizedRelu *>(main()) : nullptr;
3351   }
3352   const QuantizedRelu6 *main_as_QuantizedRelu6() const {
3353     return main_type() == OpParameter_QuantizedRelu6 ? static_cast<const QuantizedRelu6 *>(main()) : nullptr;
3354   }
3355   const QuantizedReshape *main_as_QuantizedReshape() const {
3356     return main_type() == OpParameter_QuantizedReshape ? static_cast<const QuantizedReshape *>(main()) : nullptr;
3357   }
3358   const QuantizedSoftmax *main_as_QuantizedSoftmax() const {
3359     return main_type() == OpParameter_QuantizedSoftmax ? static_cast<const QuantizedSoftmax *>(main()) : nullptr;
3360   }
3361   const QuantizeMaxMin *main_as_QuantizeMaxMin() const {
3362     return main_type() == OpParameter_QuantizeMaxMin ? static_cast<const QuantizeMaxMin *>(main()) : nullptr;
3363   }
3364   const QuantizeV2 *main_as_QuantizeV2() const {
3365     return main_type() == OpParameter_QuantizeV2 ? static_cast<const QuantizeV2 *>(main()) : nullptr;
3366   }
3367   const Range *main_as_Range() const {
3368     return main_type() == OpParameter_Range ? static_cast<const Range *>(main()) : nullptr;
3369   }
3370   const Rank *main_as_Rank() const {
3371     return main_type() == OpParameter_Rank ? static_cast<const Rank *>(main()) : nullptr;
3372   }
3373   const ReduceJoin *main_as_ReduceJoin() const {
3374     return main_type() == OpParameter_ReduceJoin ? static_cast<const ReduceJoin *>(main()) : nullptr;
3375   }
3376   const ReductionParam *main_as_ReductionParam() const {
3377     return main_type() == OpParameter_ReductionParam ? static_cast<const ReductionParam *>(main()) : nullptr;
3378   }
3379   const Relu *main_as_Relu() const {
3380     return main_type() == OpParameter_Relu ? static_cast<const Relu *>(main()) : nullptr;
3381   }
3382   const Relu6 *main_as_Relu6() const {
3383     return main_type() == OpParameter_Relu6 ? static_cast<const Relu6 *>(main()) : nullptr;
3384   }
3385   const RequantizationRange *main_as_RequantizationRange() const {
3386     return main_type() == OpParameter_RequantizationRange ? static_cast<const RequantizationRange *>(main()) : nullptr;
3387   }
3388   const Requantize *main_as_Requantize() const {
3389     return main_type() == OpParameter_Requantize ? static_cast<const Requantize *>(main()) : nullptr;
3390   }
3391   const Reshape *main_as_Reshape() const {
3392     return main_type() == OpParameter_Reshape ? static_cast<const Reshape *>(main()) : nullptr;
3393   }
3394   const Resize *main_as_Resize() const {
3395     return main_type() == OpParameter_Resize ? static_cast<const Resize *>(main()) : nullptr;
3396   }
3397   const RoiPooling *main_as_RoiPooling() const {
3398     return main_type() == OpParameter_RoiPooling ? static_cast<const RoiPooling *>(main()) : nullptr;
3399   }
3400   const Scale *main_as_Scale() const {
3401     return main_type() == OpParameter_Scale ? static_cast<const Scale *>(main()) : nullptr;
3402   }
3403   const Selu *main_as_Selu() const {
3404     return main_type() == OpParameter_Selu ? static_cast<const Selu *>(main()) : nullptr;
3405   }
3406   const Size *main_as_Size() const {
3407     return main_type() == OpParameter_Size ? static_cast<const Size *>(main()) : nullptr;
3408   }
3409   const Slice *main_as_Slice() const {
3410     return main_type() == OpParameter_Slice ? static_cast<const Slice *>(main()) : nullptr;
3411   }
3412   const SliceTf *main_as_SliceTf() const {
3413     return main_type() == OpParameter_SliceTf ? static_cast<const SliceTf *>(main()) : nullptr;
3414   }
3415   const SpaceBatch *main_as_SpaceBatch() const {
3416     return main_type() == OpParameter_SpaceBatch ? static_cast<const SpaceBatch *>(main()) : nullptr;
3417   }
3418   const SqueezeParam *main_as_SqueezeParam() const {
3419     return main_type() == OpParameter_SqueezeParam ? static_cast<const SqueezeParam *>(main()) : nullptr;
3420   }
3421   const StridedSliceParam *main_as_StridedSliceParam() const {
3422     return main_type() == OpParameter_StridedSliceParam ? static_cast<const StridedSliceParam *>(main()) : nullptr;
3423   }
3424   const TensorConvertInfo *main_as_TensorConvertInfo() const {
3425     return main_type() == OpParameter_TensorConvertInfo ? static_cast<const TensorConvertInfo *>(main()) : nullptr;
3426   }
3427   const TfQuantizedConv2D *main_as_TfQuantizedConv2D() const {
3428     return main_type() == OpParameter_TfQuantizedConv2D ? static_cast<const TfQuantizedConv2D *>(main()) : nullptr;
3429   }
3430   const TopKV2 *main_as_TopKV2() const {
3431     return main_type() == OpParameter_TopKV2 ? static_cast<const TopKV2 *>(main()) : nullptr;
3432   }
3433   const Transpose *main_as_Transpose() const {
3434     return main_type() == OpParameter_Transpose ? static_cast<const Transpose *>(main()) : nullptr;
3435   }
3436   const UnaryOp *main_as_UnaryOp() const {
3437     return main_type() == OpParameter_UnaryOp ? static_cast<const UnaryOp *>(main()) : nullptr;
3438   }
3439   const MomentsParam *main_as_MomentsParam() const {
3440     return main_type() == OpParameter_MomentsParam ? static_cast<const MomentsParam *>(main()) : nullptr;
3441   }
3442   const RNNParam *main_as_RNNParam() const {
3443     return main_type() == OpParameter_RNNParam ? static_cast<const RNNParam *>(main()) : nullptr;
3444   }
3445   const BatchMatMulParam *main_as_BatchMatMulParam() const {
3446     return main_type() == OpParameter_BatchMatMulParam ? static_cast<const BatchMatMulParam *>(main()) : nullptr;
3447   }
3448   const QuantizedFloatParam *main_as_QuantizedFloatParam() const {
3449     return main_type() == OpParameter_QuantizedFloatParam ? static_cast<const QuantizedFloatParam *>(main()) : nullptr;
3450   }
3451   const DepthSpaceParam *main_as_DepthSpaceParam() const {
3452     return main_type() == OpParameter_DepthSpaceParam ? static_cast<const DepthSpaceParam *>(main()) : nullptr;
3453   }
3454   const EltwiseInt8 *main_as_EltwiseInt8() const {
3455     return main_type() == OpParameter_EltwiseInt8 ? static_cast<const EltwiseInt8 *>(main()) : nullptr;
3456   }
3457   const ReverseSequenceParam *main_as_ReverseSequenceParam() const {
3458     return main_type() == OpParameter_ReverseSequenceParam ? static_cast<const ReverseSequenceParam *>(main()) : nullptr;
3459   }
3460   const Extra *main_as_Extra() const {
3461     return main_type() == OpParameter_Extra ? static_cast<const Extra *>(main()) : nullptr;
3462   }
3463   const Pool3D *main_as_Pool3D() const {
3464     return main_type() == OpParameter_Pool3D ? static_cast<const Pool3D *>(main()) : nullptr;
3465   }
3466   const Convolution3D *main_as_Convolution3D() const {
3467     return main_type() == OpParameter_Convolution3D ? static_cast<const Convolution3D *>(main()) : nullptr;
3468   }
3469   const ELU *main_as_ELU() const {
3470     return main_type() == OpParameter_ELU ? static_cast<const ELU *>(main()) : nullptr;
3471   }
3472   const DetectionPostProcessParam *main_as_DetectionPostProcessParam() const {
3473     return main_type() == OpParameter_DetectionPostProcessParam ? static_cast<const DetectionPostProcessParam *>(main()) : nullptr;
3474   }
3475   const OneHotParam *main_as_OneHotParam() const {
3476     return main_type() == OpParameter_OneHotParam ? static_cast<const OneHotParam *>(main()) : nullptr;
3477   }
3478   const PadParam *main_as_PadParam() const {
3479     return main_type() == OpParameter_PadParam ? static_cast<const PadParam *>(main()) : nullptr;
3480   }
3481   const WhileParam *main_as_WhileParam() const {
3482     return main_type() == OpParameter_WhileParam ? static_cast<const WhileParam *>(main()) : nullptr;
3483   }
3484   const IfParam *main_as_IfParam() const {
3485     return main_type() == OpParameter_IfParam ? static_cast<const IfParam *>(main()) : nullptr;
3486   }
3487   const RandomUniform *main_as_RandomUniform() const {
3488     return main_type() == OpParameter_RandomUniform ? static_cast<const RandomUniform *>(main()) : nullptr;
3489   }
3490   const LayerNorm *main_as_LayerNorm() const {
3491     return main_type() == OpParameter_LayerNorm ? static_cast<const LayerNorm *>(main()) : nullptr;
3492   }
3493   const TensorArray *main_as_TensorArray() const {
3494     return main_type() == OpParameter_TensorArray ? static_cast<const TensorArray *>(main()) : nullptr;
3495   }
3496   const LSTMBlockCell *main_as_LSTMBlockCell() const {
3497     return main_type() == OpParameter_LSTMBlockCell ? static_cast<const LSTMBlockCell *>(main()) : nullptr;
3498   }
3499   const GridSample *main_as_GridSample() const {
3500     return main_type() == OpParameter_GridSample ? static_cast<const GridSample *>(main()) : nullptr;
3501   }
3502   const LoopParam *main_as_LoopParam() const {
3503     return main_type() == OpParameter_LoopParam ? static_cast<const LoopParam *>(main()) : nullptr;
3504   }
3505   const flatbuffers::String *name() const {
3506     return GetPointer<const flatbuffers::String *>(10);
3507   }
3508   const flatbuffers::Vector<int32_t> *outputIndexes() const {
3509     return GetPointer<const flatbuffers::Vector<int32_t> *>(12);
3510   }
3511   OpType type() const {
3512     return static_cast<OpType>(GetField<int32_t>(14, 0));
3513   }
3514   MNN_DATA_FORMAT defaultDimentionFormat() const {
3515     return static_cast<MNN_DATA_FORMAT>(GetField<int8_t>(16, 1));
3516   }
3517   bool Verify(flatbuffers::Verifier &verifier) const {
3518     return VerifyTableStart(verifier) &&
3519            VerifyOffset(verifier, 4) &&
3520            verifier.VerifyVector(inputIndexes()) &&
3521            VerifyField<uint8_t>(verifier, 6) &&
3522            VerifyOffset(verifier, 8) &&
3523            VerifyOpParameter(verifier, main(), main_type()) &&
3524            VerifyOffset(verifier, 10) &&
3525            verifier.VerifyString(name()) &&
3526            VerifyOffset(verifier, 12) &&
3527            verifier.VerifyVector(outputIndexes()) &&
3528            VerifyField<int32_t>(verifier, 14) &&
3529            VerifyField<int8_t>(verifier, 16) &&
3530            verifier.EndTable();
3531   }
3532   OpT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
3533   void UnPackTo(OpT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
3534   static flatbuffers::Offset<Op> Pack(flatbuffers::FlatBufferBuilder &_fbb, const OpT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
3535 };
3536 
3537 template<> inline const QuantizedAdd *Op::main_as<QuantizedAdd>() const {
3538   return main_as_QuantizedAdd();
3539 }
3540 
3541 template<> inline const ArgMax *Op::main_as<ArgMax>() const {
3542   return main_as_ArgMax();
3543 }
3544 
3545 template<> inline const AsString *Op::main_as<AsString>() const {
3546   return main_as_AsString();
3547 }
3548 
3549 template<> inline const Axis *Op::main_as<Axis>() const {
3550   return main_as_Axis();
3551 }
3552 
3553 template<> inline const BatchNorm *Op::main_as<BatchNorm>() const {
3554   return main_as_BatchNorm();
3555 }
3556 
3557 template<> inline const BinaryOp *Op::main_as<BinaryOp>() const {
3558   return main_as_BinaryOp();
3559 }
3560 
3561 template<> inline const Blob *Op::main_as<Blob>() const {
3562   return main_as_Blob();
3563 }
3564 
3565 template<> inline const CastParam *Op::main_as<CastParam>() const {
3566   return main_as_CastParam();
3567 }
3568 
3569 template<> inline const Convolution2D *Op::main_as<Convolution2D>() const {
3570   return main_as_Convolution2D();
3571 }
3572 
3573 template<> inline const Crop *Op::main_as<Crop>() const {
3574   return main_as_Crop();
3575 }
3576 
3577 template<> inline const CropAndResize *Op::main_as<CropAndResize>() const {
3578   return main_as_CropAndResize();
3579 }
3580 
3581 template<> inline const Dequantize *Op::main_as<Dequantize>() const {
3582   return main_as_Dequantize();
3583 }
3584 
3585 template<> inline const DetectionOutput *Op::main_as<DetectionOutput>() const {
3586   return main_as_DetectionOutput();
3587 }
3588 
3589 template<> inline const Eltwise *Op::main_as<Eltwise>() const {
3590   return main_as_Eltwise();
3591 }
3592 
3593 template<> inline const ExpandDims *Op::main_as<ExpandDims>() const {
3594   return main_as_ExpandDims();
3595 }
3596 
3597 template<> inline const Fill *Op::main_as<Fill>() const {
3598   return main_as_Fill();
3599 }
3600 
3601 template<> inline const Flatten *Op::main_as<Flatten>() const {
3602   return main_as_Flatten();
3603 }
3604 
3605 template<> inline const Gather *Op::main_as<Gather>() const {
3606   return main_as_Gather();
3607 }
3608 
3609 template<> inline const GatherV2 *Op::main_as<GatherV2>() const {
3610   return main_as_GatherV2();
3611 }
3612 
3613 template<> inline const InnerProduct *Op::main_as<InnerProduct>() const {
3614   return main_as_InnerProduct();
3615 }
3616 
3617 template<> inline const Input *Op::main_as<Input>() const {
3618   return main_as_Input();
3619 }
3620 
3621 template<> inline const Interp *Op::main_as<Interp>() const {
3622   return main_as_Interp();
3623 }
3624 
3625 template<> inline const LRN *Op::main_as<LRN>() const {
3626   return main_as_LRN();
3627 }
3628 
3629 template<> inline const LSTM *Op::main_as<LSTM>() const {
3630   return main_as_LSTM();
3631 }
3632 
3633 template<> inline const MatMul *Op::main_as<MatMul>() const {
3634   return main_as_MatMul();
3635 }
3636 
3637 template<> inline const NonMaxSuppressionV2 *Op::main_as<NonMaxSuppressionV2>() const {
3638   return main_as_NonMaxSuppressionV2();
3639 }
3640 
3641 template<> inline const Normalize *Op::main_as<Normalize>() const {
3642   return main_as_Normalize();
3643 }
3644 
3645 template<> inline const PackParam *Op::main_as<PackParam>() const {
3646   return main_as_PackParam();
3647 }
3648 
3649 template<> inline const Permute *Op::main_as<Permute>() const {
3650   return main_as_Permute();
3651 }
3652 
3653 template<> inline const Plugin *Op::main_as<Plugin>() const {
3654   return main_as_Plugin();
3655 }
3656 
3657 template<> inline const Pool *Op::main_as<Pool>() const {
3658   return main_as_Pool();
3659 }
3660 
3661 template<> inline const PRelu *Op::main_as<PRelu>() const {
3662   return main_as_PRelu();
3663 }
3664 
3665 template<> inline const PriorBox *Op::main_as<PriorBox>() const {
3666   return main_as_PriorBox();
3667 }
3668 
3669 template<> inline const Proposal *Op::main_as<Proposal>() const {
3670   return main_as_Proposal();
3671 }
3672 
3673 template<> inline const QuantizedAvgPool *Op::main_as<QuantizedAvgPool>() const {
3674   return main_as_QuantizedAvgPool();
3675 }
3676 
3677 template<> inline const QuantizedBiasAdd *Op::main_as<QuantizedBiasAdd>() const {
3678   return main_as_QuantizedBiasAdd();
3679 }
3680 
3681 template<> inline const QuantizedConcat *Op::main_as<QuantizedConcat>() const {
3682   return main_as_QuantizedConcat();
3683 }
3684 
3685 template<> inline const QuantizedLogistic *Op::main_as<QuantizedLogistic>() const {
3686   return main_as_QuantizedLogistic();
3687 }
3688 
3689 template<> inline const QuantizedMatMul *Op::main_as<QuantizedMatMul>() const {
3690   return main_as_QuantizedMatMul();
3691 }
3692 
3693 template<> inline const QuantizedMaxPool *Op::main_as<QuantizedMaxPool>() const {
3694   return main_as_QuantizedMaxPool();
3695 }
3696 
3697 template<> inline const QuantizedRelu *Op::main_as<QuantizedRelu>() const {
3698   return main_as_QuantizedRelu();
3699 }
3700 
3701 template<> inline const QuantizedRelu6 *Op::main_as<QuantizedRelu6>() const {
3702   return main_as_QuantizedRelu6();
3703 }
3704 
3705 template<> inline const QuantizedReshape *Op::main_as<QuantizedReshape>() const {
3706   return main_as_QuantizedReshape();
3707 }
3708 
3709 template<> inline const QuantizedSoftmax *Op::main_as<QuantizedSoftmax>() const {
3710   return main_as_QuantizedSoftmax();
3711 }
3712 
3713 template<> inline const QuantizeMaxMin *Op::main_as<QuantizeMaxMin>() const {
3714   return main_as_QuantizeMaxMin();
3715 }
3716 
3717 template<> inline const QuantizeV2 *Op::main_as<QuantizeV2>() const {
3718   return main_as_QuantizeV2();
3719 }
3720 
3721 template<> inline const Range *Op::main_as<Range>() const {
3722   return main_as_Range();
3723 }
3724 
3725 template<> inline const Rank *Op::main_as<Rank>() const {
3726   return main_as_Rank();
3727 }
3728 
3729 template<> inline const ReduceJoin *Op::main_as<ReduceJoin>() const {
3730   return main_as_ReduceJoin();
3731 }
3732 
3733 template<> inline const ReductionParam *Op::main_as<ReductionParam>() const {
3734   return main_as_ReductionParam();
3735 }
3736 
3737 template<> inline const Relu *Op::main_as<Relu>() const {
3738   return main_as_Relu();
3739 }
3740 
3741 template<> inline const Relu6 *Op::main_as<Relu6>() const {
3742   return main_as_Relu6();
3743 }
3744 
3745 template<> inline const RequantizationRange *Op::main_as<RequantizationRange>() const {
3746   return main_as_RequantizationRange();
3747 }
3748 
3749 template<> inline const Requantize *Op::main_as<Requantize>() const {
3750   return main_as_Requantize();
3751 }
3752 
3753 template<> inline const Reshape *Op::main_as<Reshape>() const {
3754   return main_as_Reshape();
3755 }
3756 
3757 template<> inline const Resize *Op::main_as<Resize>() const {
3758   return main_as_Resize();
3759 }
3760 
3761 template<> inline const RoiPooling *Op::main_as<RoiPooling>() const {
3762   return main_as_RoiPooling();
3763 }
3764 
3765 template<> inline const Scale *Op::main_as<Scale>() const {
3766   return main_as_Scale();
3767 }
3768 
3769 template<> inline const Selu *Op::main_as<Selu>() const {
3770   return main_as_Selu();
3771 }
3772 
3773 template<> inline const Size *Op::main_as<Size>() const {
3774   return main_as_Size();
3775 }
3776 
3777 template<> inline const Slice *Op::main_as<Slice>() const {
3778   return main_as_Slice();
3779 }
3780 
3781 template<> inline const SliceTf *Op::main_as<SliceTf>() const {
3782   return main_as_SliceTf();
3783 }
3784 
3785 template<> inline const SpaceBatch *Op::main_as<SpaceBatch>() const {
3786   return main_as_SpaceBatch();
3787 }
3788 
3789 template<> inline const SqueezeParam *Op::main_as<SqueezeParam>() const {
3790   return main_as_SqueezeParam();
3791 }
3792 
3793 template<> inline const StridedSliceParam *Op::main_as<StridedSliceParam>() const {
3794   return main_as_StridedSliceParam();
3795 }
3796 
3797 template<> inline const TensorConvertInfo *Op::main_as<TensorConvertInfo>() const {
3798   return main_as_TensorConvertInfo();
3799 }
3800 
3801 template<> inline const TfQuantizedConv2D *Op::main_as<TfQuantizedConv2D>() const {
3802   return main_as_TfQuantizedConv2D();
3803 }
3804 
3805 template<> inline const TopKV2 *Op::main_as<TopKV2>() const {
3806   return main_as_TopKV2();
3807 }
3808 
3809 template<> inline const Transpose *Op::main_as<Transpose>() const {
3810   return main_as_Transpose();
3811 }
3812 
3813 template<> inline const UnaryOp *Op::main_as<UnaryOp>() const {
3814   return main_as_UnaryOp();
3815 }
3816 
3817 template<> inline const MomentsParam *Op::main_as<MomentsParam>() const {
3818   return main_as_MomentsParam();
3819 }
3820 
3821 template<> inline const RNNParam *Op::main_as<RNNParam>() const {
3822   return main_as_RNNParam();
3823 }
3824 
3825 template<> inline const BatchMatMulParam *Op::main_as<BatchMatMulParam>() const {
3826   return main_as_BatchMatMulParam();
3827 }
3828 
3829 template<> inline const QuantizedFloatParam *Op::main_as<QuantizedFloatParam>() const {
3830   return main_as_QuantizedFloatParam();
3831 }
3832 
3833 template<> inline const DepthSpaceParam *Op::main_as<DepthSpaceParam>() const {
3834   return main_as_DepthSpaceParam();
3835 }
3836 
3837 template<> inline const EltwiseInt8 *Op::main_as<EltwiseInt8>() const {
3838   return main_as_EltwiseInt8();
3839 }
3840 
3841 template<> inline const ReverseSequenceParam *Op::main_as<ReverseSequenceParam>() const {
3842   return main_as_ReverseSequenceParam();
3843 }
3844 
3845 template<> inline const Extra *Op::main_as<Extra>() const {
3846   return main_as_Extra();
3847 }
3848 
3849 template<> inline const Pool3D *Op::main_as<Pool3D>() const {
3850   return main_as_Pool3D();
3851 }
3852 
3853 template<> inline const Convolution3D *Op::main_as<Convolution3D>() const {
3854   return main_as_Convolution3D();
3855 }
3856 
3857 template<> inline const ELU *Op::main_as<ELU>() const {
3858   return main_as_ELU();
3859 }
3860 
3861 template<> inline const DetectionPostProcessParam *Op::main_as<DetectionPostProcessParam>() const {
3862   return main_as_DetectionPostProcessParam();
3863 }
3864 
3865 template<> inline const OneHotParam *Op::main_as<OneHotParam>() const {
3866   return main_as_OneHotParam();
3867 }
3868 
3869 template<> inline const PadParam *Op::main_as<PadParam>() const {
3870   return main_as_PadParam();
3871 }
3872 
3873 template<> inline const WhileParam *Op::main_as<WhileParam>() const {
3874   return main_as_WhileParam();
3875 }
3876 
3877 template<> inline const IfParam *Op::main_as<IfParam>() const {
3878   return main_as_IfParam();
3879 }
3880 
3881 template<> inline const RandomUniform *Op::main_as<RandomUniform>() const {
3882   return main_as_RandomUniform();
3883 }
3884 
3885 template<> inline const LayerNorm *Op::main_as<LayerNorm>() const {
3886   return main_as_LayerNorm();
3887 }
3888 
3889 template<> inline const TensorArray *Op::main_as<TensorArray>() const {
3890   return main_as_TensorArray();
3891 }
3892 
3893 template<> inline const LSTMBlockCell *Op::main_as<LSTMBlockCell>() const {
3894   return main_as_LSTMBlockCell();
3895 }
3896 
3897 template<> inline const GridSample *Op::main_as<GridSample>() const {
3898   return main_as_GridSample();
3899 }
3900 
3901 template<> inline const LoopParam *Op::main_as<LoopParam>() const {
3902   return main_as_LoopParam();
3903 }
3904 
3905 struct OpBuilder {
3906   flatbuffers::FlatBufferBuilder &fbb_;
3907   flatbuffers::uoffset_t start_;
3908   void add_inputIndexes(flatbuffers::Offset<flatbuffers::Vector<int32_t>> inputIndexes) {
3909     fbb_.AddOffset(4, inputIndexes);
3910   }
3911   void add_main_type(OpParameter main_type) {
3912     fbb_.AddElement<uint8_t>(6, static_cast<uint8_t>(main_type), 0);
3913   }
3914   void add_main(flatbuffers::Offset<void> main) {
3915     fbb_.AddOffset(8, main);
3916   }
3917   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
3918     fbb_.AddOffset(10, name);
3919   }
3920   void add_outputIndexes(flatbuffers::Offset<flatbuffers::Vector<int32_t>> outputIndexes) {
3921     fbb_.AddOffset(12, outputIndexes);
3922   }
3923   void add_type(OpType type) {
3924     fbb_.AddElement<int32_t>(14, static_cast<int32_t>(type), 0);
3925   }
3926   void add_defaultDimentionFormat(MNN_DATA_FORMAT defaultDimentionFormat) {
3927     fbb_.AddElement<int8_t>(16, static_cast<int8_t>(defaultDimentionFormat), 1);
3928   }
3929   explicit OpBuilder(flatbuffers::FlatBufferBuilder &_fbb)
3930         : fbb_(_fbb) {
3931     start_ = fbb_.StartTable();
3932   }
3933   OpBuilder &operator=(const OpBuilder &);
3934   flatbuffers::Offset<Op> Finish() {
3935     const auto end = fbb_.EndTable(start_);
3936     auto o = flatbuffers::Offset<Op>(end);
3937     return o;
3938   }
3939 };
3940 
3941 inline flatbuffers::Offset<Op> CreateOp(
3942     flatbuffers::FlatBufferBuilder &_fbb,
3943     flatbuffers::Offset<flatbuffers::Vector<int32_t>> inputIndexes = 0,
3944     OpParameter main_type = OpParameter_NONE,
3945     flatbuffers::Offset<void> main = 0,
3946     flatbuffers::Offset<flatbuffers::String> name = 0,
3947     flatbuffers::Offset<flatbuffers::Vector<int32_t>> outputIndexes = 0,
3948     OpType type = OpType_AbsVal,
3949     MNN_DATA_FORMAT defaultDimentionFormat = MNN_DATA_FORMAT_NHWC) {
3950   OpBuilder builder_(_fbb);
3951   builder_.add_type(type);
3952   builder_.add_outputIndexes(outputIndexes);
3953   builder_.add_name(name);
3954   builder_.add_main(main);
3955   builder_.add_inputIndexes(inputIndexes);
3956   builder_.add_defaultDimentionFormat(defaultDimentionFormat);
3957   builder_.add_main_type(main_type);
3958   return builder_.Finish();
3959 }
3960 
3961 flatbuffers::Offset<Op> CreateOp(flatbuffers::FlatBufferBuilder &_fbb, const OpT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
3962 
3963 struct ViewT : public flatbuffers::NativeTable {
3964   typedef View TableType;
3965   int32_t offset;
3966   std::vector<int32_t> stride;
3967   ViewT()
3968       : offset(0) {
3969   }
3970 };
3971 
3972 struct View FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
3973   typedef ViewT NativeTableType;
3974   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
3975     return ViewTypeTable();
3976   }
3977   int32_t offset() const {
3978     return GetField<int32_t>(4, 0);
3979   }
3980   const flatbuffers::Vector<int32_t> *stride() const {
3981     return GetPointer<const flatbuffers::Vector<int32_t> *>(6);
3982   }
3983   bool Verify(flatbuffers::Verifier &verifier) const {
3984     return VerifyTableStart(verifier) &&
3985            VerifyField<int32_t>(verifier, 4) &&
3986            VerifyOffset(verifier, 6) &&
3987            verifier.VerifyVector(stride()) &&
3988            verifier.EndTable();
3989   }
3990   ViewT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
3991   void UnPackTo(ViewT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
3992   static flatbuffers::Offset<View> Pack(flatbuffers::FlatBufferBuilder &_fbb, const ViewT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
3993 };
3994 
3995 struct ViewBuilder {
3996   flatbuffers::FlatBufferBuilder &fbb_;
3997   flatbuffers::uoffset_t start_;
3998   void add_offset(int32_t offset) {
3999     fbb_.AddElement<int32_t>(4, offset, 0);
4000   }
4001   void add_stride(flatbuffers::Offset<flatbuffers::Vector<int32_t>> stride) {
4002     fbb_.AddOffset(6, stride);
4003   }
4004   explicit ViewBuilder(flatbuffers::FlatBufferBuilder &_fbb)
4005         : fbb_(_fbb) {
4006     start_ = fbb_.StartTable();
4007   }
4008   ViewBuilder &operator=(const ViewBuilder &);
4009   flatbuffers::Offset<View> Finish() {
4010     const auto end = fbb_.EndTable(start_);
4011     auto o = flatbuffers::Offset<View>(end);
4012     return o;
4013   }
4014 };
4015 
4016 inline flatbuffers::Offset<View> CreateView(
4017     flatbuffers::FlatBufferBuilder &_fbb,
4018     int32_t offset = 0,
4019     flatbuffers::Offset<flatbuffers::Vector<int32_t>> stride = 0) {
4020   ViewBuilder builder_(_fbb);
4021   builder_.add_stride(stride);
4022   builder_.add_offset(offset);
4023   return builder_.Finish();
4024 }
4025 
4026 flatbuffers::Offset<View> CreateView(flatbuffers::FlatBufferBuilder &_fbb, const ViewT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4027 
4028 struct RegionT : public flatbuffers::NativeTable {
4029   typedef Region TableType;
4030   std::unique_ptr<ViewT> src;
4031   std::unique_ptr<ViewT> dst;
4032   std::vector<int32_t> size;
4033   int32_t origin;
4034   RegionT()
4035       : origin(0) {
4036   }
4037 };
4038 
4039 struct Region FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
4040   typedef RegionT NativeTableType;
4041   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
4042     return RegionTypeTable();
4043   }
4044   const View *src() const {
4045     return GetPointer<const View *>(4);
4046   }
4047   const View *dst() const {
4048     return GetPointer<const View *>(6);
4049   }
4050   const flatbuffers::Vector<int32_t> *size() const {
4051     return GetPointer<const flatbuffers::Vector<int32_t> *>(8);
4052   }
4053   int32_t origin() const {
4054     return GetField<int32_t>(10, 0);
4055   }
4056   bool Verify(flatbuffers::Verifier &verifier) const {
4057     return VerifyTableStart(verifier) &&
4058            VerifyOffset(verifier, 4) &&
4059            verifier.VerifyTable(src()) &&
4060            VerifyOffset(verifier, 6) &&
4061            verifier.VerifyTable(dst()) &&
4062            VerifyOffset(verifier, 8) &&
4063            verifier.VerifyVector(size()) &&
4064            VerifyField<int32_t>(verifier, 10) &&
4065            verifier.EndTable();
4066   }
4067   RegionT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4068   void UnPackTo(RegionT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4069   static flatbuffers::Offset<Region> Pack(flatbuffers::FlatBufferBuilder &_fbb, const RegionT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4070 };
4071 
4072 struct RegionBuilder {
4073   flatbuffers::FlatBufferBuilder &fbb_;
4074   flatbuffers::uoffset_t start_;
4075   void add_src(flatbuffers::Offset<View> src) {
4076     fbb_.AddOffset(4, src);
4077   }
4078   void add_dst(flatbuffers::Offset<View> dst) {
4079     fbb_.AddOffset(6, dst);
4080   }
4081   void add_size(flatbuffers::Offset<flatbuffers::Vector<int32_t>> size) {
4082     fbb_.AddOffset(8, size);
4083   }
4084   void add_origin(int32_t origin) {
4085     fbb_.AddElement<int32_t>(10, origin, 0);
4086   }
4087   explicit RegionBuilder(flatbuffers::FlatBufferBuilder &_fbb)
4088         : fbb_(_fbb) {
4089     start_ = fbb_.StartTable();
4090   }
4091   RegionBuilder &operator=(const RegionBuilder &);
4092   flatbuffers::Offset<Region> Finish() {
4093     const auto end = fbb_.EndTable(start_);
4094     auto o = flatbuffers::Offset<Region>(end);
4095     return o;
4096   }
4097 };
4098 
4099 inline flatbuffers::Offset<Region> CreateRegion(
4100     flatbuffers::FlatBufferBuilder &_fbb,
4101     flatbuffers::Offset<View> src = 0,
4102     flatbuffers::Offset<View> dst = 0,
4103     flatbuffers::Offset<flatbuffers::Vector<int32_t>> size = 0,
4104     int32_t origin = 0) {
4105   RegionBuilder builder_(_fbb);
4106   builder_.add_origin(origin);
4107   builder_.add_size(size);
4108   builder_.add_dst(dst);
4109   builder_.add_src(src);
4110   return builder_.Finish();
4111 }
4112 
4113 flatbuffers::Offset<Region> CreateRegion(flatbuffers::FlatBufferBuilder &_fbb, const RegionT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4114 
4115 struct TensorDescribeT : public flatbuffers::NativeTable {
4116   typedef TensorDescribe TableType;
4117   std::unique_ptr<BlobT> blob;
4118   int32_t index;
4119   std::string name;
4120   std::vector<std::unique_ptr<RegionT>> regions;
4121   std::unique_ptr<TensorQuantInfoT> quantInfo;
4122   TensorDescribeT()
4123       : index(0) {
4124   }
4125 };
4126 
4127 struct TensorDescribe FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
4128   typedef TensorDescribeT NativeTableType;
4129   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
4130     return TensorDescribeTypeTable();
4131   }
4132   const Blob *blob() const {
4133     return GetPointer<const Blob *>(4);
4134   }
4135   int32_t index() const {
4136     return GetField<int32_t>(6, 0);
4137   }
4138   const flatbuffers::String *name() const {
4139     return GetPointer<const flatbuffers::String *>(8);
4140   }
4141   const flatbuffers::Vector<flatbuffers::Offset<Region>> *regions() const {
4142     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Region>> *>(10);
4143   }
4144   const TensorQuantInfo *quantInfo() const {
4145     return GetPointer<const TensorQuantInfo *>(12);
4146   }
4147   bool Verify(flatbuffers::Verifier &verifier) const {
4148     return VerifyTableStart(verifier) &&
4149            VerifyOffset(verifier, 4) &&
4150            verifier.VerifyTable(blob()) &&
4151            VerifyField<int32_t>(verifier, 6) &&
4152            VerifyOffset(verifier, 8) &&
4153            verifier.VerifyString(name()) &&
4154            VerifyOffset(verifier, 10) &&
4155            verifier.VerifyVector(regions()) &&
4156            verifier.VerifyVectorOfTables(regions()) &&
4157            VerifyOffset(verifier, 12) &&
4158            verifier.VerifyTable(quantInfo()) &&
4159            verifier.EndTable();
4160   }
4161   TensorDescribeT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4162   void UnPackTo(TensorDescribeT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4163   static flatbuffers::Offset<TensorDescribe> Pack(flatbuffers::FlatBufferBuilder &_fbb, const TensorDescribeT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4164 };
4165 
4166 struct TensorDescribeBuilder {
4167   flatbuffers::FlatBufferBuilder &fbb_;
4168   flatbuffers::uoffset_t start_;
4169   void add_blob(flatbuffers::Offset<Blob> blob) {
4170     fbb_.AddOffset(4, blob);
4171   }
4172   void add_index(int32_t index) {
4173     fbb_.AddElement<int32_t>(6, index, 0);
4174   }
4175   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
4176     fbb_.AddOffset(8, name);
4177   }
4178   void add_regions(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Region>>> regions) {
4179     fbb_.AddOffset(10, regions);
4180   }
4181   void add_quantInfo(flatbuffers::Offset<TensorQuantInfo> quantInfo) {
4182     fbb_.AddOffset(12, quantInfo);
4183   }
4184   explicit TensorDescribeBuilder(flatbuffers::FlatBufferBuilder &_fbb)
4185         : fbb_(_fbb) {
4186     start_ = fbb_.StartTable();
4187   }
4188   TensorDescribeBuilder &operator=(const TensorDescribeBuilder &);
4189   flatbuffers::Offset<TensorDescribe> Finish() {
4190     const auto end = fbb_.EndTable(start_);
4191     auto o = flatbuffers::Offset<TensorDescribe>(end);
4192     return o;
4193   }
4194 };
4195 
4196 inline flatbuffers::Offset<TensorDescribe> CreateTensorDescribe(
4197     flatbuffers::FlatBufferBuilder &_fbb,
4198     flatbuffers::Offset<Blob> blob = 0,
4199     int32_t index = 0,
4200     flatbuffers::Offset<flatbuffers::String> name = 0,
4201     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Region>>> regions = 0,
4202     flatbuffers::Offset<TensorQuantInfo> quantInfo = 0) {
4203   TensorDescribeBuilder builder_(_fbb);
4204   builder_.add_quantInfo(quantInfo);
4205   builder_.add_regions(regions);
4206   builder_.add_name(name);
4207   builder_.add_index(index);
4208   builder_.add_blob(blob);
4209   return builder_.Finish();
4210 }
4211 
4212 flatbuffers::Offset<TensorDescribe> CreateTensorDescribe(flatbuffers::FlatBufferBuilder &_fbb, const TensorDescribeT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4213 
4214 struct SubGraphProtoT : public flatbuffers::NativeTable {
4215   typedef SubGraphProto TableType;
4216   std::string name;
4217   std::vector<int32_t> inputs;
4218   std::vector<int32_t> outputs;
4219   std::vector<std::string> tensors;
4220   std::vector<std::unique_ptr<OpT>> nodes;
4221   std::vector<std::unique_ptr<TensorDescribeT>> extraTensorDescribe;
4222   SubGraphProtoT() {
4223   }
4224 };
4225 
4226 struct SubGraphProto FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
4227   typedef SubGraphProtoT NativeTableType;
4228   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
4229     return SubGraphProtoTypeTable();
4230   }
4231   const flatbuffers::String *name() const {
4232     return GetPointer<const flatbuffers::String *>(4);
4233   }
4234   const flatbuffers::Vector<int32_t> *inputs() const {
4235     return GetPointer<const flatbuffers::Vector<int32_t> *>(6);
4236   }
4237   const flatbuffers::Vector<int32_t> *outputs() const {
4238     return GetPointer<const flatbuffers::Vector<int32_t> *>(8);
4239   }
4240   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *tensors() const {
4241     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(10);
4242   }
4243   const flatbuffers::Vector<flatbuffers::Offset<Op>> *nodes() const {
4244     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Op>> *>(12);
4245   }
4246   const flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>> *extraTensorDescribe() const {
4247     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>> *>(14);
4248   }
4249   bool Verify(flatbuffers::Verifier &verifier) const {
4250     return VerifyTableStart(verifier) &&
4251            VerifyOffset(verifier, 4) &&
4252            verifier.VerifyString(name()) &&
4253            VerifyOffset(verifier, 6) &&
4254            verifier.VerifyVector(inputs()) &&
4255            VerifyOffset(verifier, 8) &&
4256            verifier.VerifyVector(outputs()) &&
4257            VerifyOffset(verifier, 10) &&
4258            verifier.VerifyVector(tensors()) &&
4259            verifier.VerifyVectorOfStrings(tensors()) &&
4260            VerifyOffset(verifier, 12) &&
4261            verifier.VerifyVector(nodes()) &&
4262            verifier.VerifyVectorOfTables(nodes()) &&
4263            VerifyOffset(verifier, 14) &&
4264            verifier.VerifyVector(extraTensorDescribe()) &&
4265            verifier.VerifyVectorOfTables(extraTensorDescribe()) &&
4266            verifier.EndTable();
4267   }
4268   SubGraphProtoT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4269   void UnPackTo(SubGraphProtoT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4270   static flatbuffers::Offset<SubGraphProto> Pack(flatbuffers::FlatBufferBuilder &_fbb, const SubGraphProtoT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4271 };
4272 
4273 struct SubGraphProtoBuilder {
4274   flatbuffers::FlatBufferBuilder &fbb_;
4275   flatbuffers::uoffset_t start_;
4276   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
4277     fbb_.AddOffset(4, name);
4278   }
4279   void add_inputs(flatbuffers::Offset<flatbuffers::Vector<int32_t>> inputs) {
4280     fbb_.AddOffset(6, inputs);
4281   }
4282   void add_outputs(flatbuffers::Offset<flatbuffers::Vector<int32_t>> outputs) {
4283     fbb_.AddOffset(8, outputs);
4284   }
4285   void add_tensors(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> tensors) {
4286     fbb_.AddOffset(10, tensors);
4287   }
4288   void add_nodes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Op>>> nodes) {
4289     fbb_.AddOffset(12, nodes);
4290   }
4291   void add_extraTensorDescribe(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>>> extraTensorDescribe) {
4292     fbb_.AddOffset(14, extraTensorDescribe);
4293   }
4294   explicit SubGraphProtoBuilder(flatbuffers::FlatBufferBuilder &_fbb)
4295         : fbb_(_fbb) {
4296     start_ = fbb_.StartTable();
4297   }
4298   SubGraphProtoBuilder &operator=(const SubGraphProtoBuilder &);
4299   flatbuffers::Offset<SubGraphProto> Finish() {
4300     const auto end = fbb_.EndTable(start_);
4301     auto o = flatbuffers::Offset<SubGraphProto>(end);
4302     return o;
4303   }
4304 };
4305 
4306 inline flatbuffers::Offset<SubGraphProto> CreateSubGraphProto(
4307     flatbuffers::FlatBufferBuilder &_fbb,
4308     flatbuffers::Offset<flatbuffers::String> name = 0,
4309     flatbuffers::Offset<flatbuffers::Vector<int32_t>> inputs = 0,
4310     flatbuffers::Offset<flatbuffers::Vector<int32_t>> outputs = 0,
4311     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> tensors = 0,
4312     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Op>>> nodes = 0,
4313     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>>> extraTensorDescribe = 0) {
4314   SubGraphProtoBuilder builder_(_fbb);
4315   builder_.add_extraTensorDescribe(extraTensorDescribe);
4316   builder_.add_nodes(nodes);
4317   builder_.add_tensors(tensors);
4318   builder_.add_outputs(outputs);
4319   builder_.add_inputs(inputs);
4320   builder_.add_name(name);
4321   return builder_.Finish();
4322 }
4323 
4324 flatbuffers::Offset<SubGraphProto> CreateSubGraphProto(flatbuffers::FlatBufferBuilder &_fbb, const SubGraphProtoT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4325 
4326 struct TensorQuantInfoT : public flatbuffers::NativeTable {
4327   typedef TensorQuantInfo TableType;
4328   float scale;
4329   float zero;
4330   float min;
4331   float max;
4332   DataType type;
4333   TensorQuantInfoT()
4334       : scale(0.0f),
4335         zero(0.0f),
4336         min(-128.0f),
4337         max(127.0f),
4338         type(DataType_DT_INVALID) {
4339   }
4340 };
4341 
4342 struct TensorQuantInfo FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
4343   typedef TensorQuantInfoT NativeTableType;
4344   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
4345     return TensorQuantInfoTypeTable();
4346   }
4347   float scale() const {
4348     return GetField<float>(4, 0.0f);
4349   }
4350   float zero() const {
4351     return GetField<float>(6, 0.0f);
4352   }
4353   float min() const {
4354     return GetField<float>(8, -128.0f);
4355   }
4356   float max() const {
4357     return GetField<float>(10, 127.0f);
4358   }
4359   DataType type() const {
4360     return static_cast<DataType>(GetField<int32_t>(12, 0));
4361   }
4362   bool Verify(flatbuffers::Verifier &verifier) const {
4363     return VerifyTableStart(verifier) &&
4364            VerifyField<float>(verifier, 4) &&
4365            VerifyField<float>(verifier, 6) &&
4366            VerifyField<float>(verifier, 8) &&
4367            VerifyField<float>(verifier, 10) &&
4368            VerifyField<int32_t>(verifier, 12) &&
4369            verifier.EndTable();
4370   }
4371   TensorQuantInfoT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4372   void UnPackTo(TensorQuantInfoT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4373   static flatbuffers::Offset<TensorQuantInfo> Pack(flatbuffers::FlatBufferBuilder &_fbb, const TensorQuantInfoT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4374 };
4375 
4376 struct TensorQuantInfoBuilder {
4377   flatbuffers::FlatBufferBuilder &fbb_;
4378   flatbuffers::uoffset_t start_;
4379   void add_scale(float scale) {
4380     fbb_.AddElement<float>(4, scale, 0.0f);
4381   }
4382   void add_zero(float zero) {
4383     fbb_.AddElement<float>(6, zero, 0.0f);
4384   }
4385   void add_min(float min) {
4386     fbb_.AddElement<float>(8, min, -128.0f);
4387   }
4388   void add_max(float max) {
4389     fbb_.AddElement<float>(10, max, 127.0f);
4390   }
4391   void add_type(DataType type) {
4392     fbb_.AddElement<int32_t>(12, static_cast<int32_t>(type), 0);
4393   }
4394   explicit TensorQuantInfoBuilder(flatbuffers::FlatBufferBuilder &_fbb)
4395         : fbb_(_fbb) {
4396     start_ = fbb_.StartTable();
4397   }
4398   TensorQuantInfoBuilder &operator=(const TensorQuantInfoBuilder &);
4399   flatbuffers::Offset<TensorQuantInfo> Finish() {
4400     const auto end = fbb_.EndTable(start_);
4401     auto o = flatbuffers::Offset<TensorQuantInfo>(end);
4402     return o;
4403   }
4404 };
4405 
4406 inline flatbuffers::Offset<TensorQuantInfo> CreateTensorQuantInfo(
4407     flatbuffers::FlatBufferBuilder &_fbb,
4408     float scale = 0.0f,
4409     float zero = 0.0f,
4410     float min = -128.0f,
4411     float max = 127.0f,
4412     DataType type = DataType_DT_INVALID) {
4413   TensorQuantInfoBuilder builder_(_fbb);
4414   builder_.add_type(type);
4415   builder_.add_max(max);
4416   builder_.add_min(min);
4417   builder_.add_zero(zero);
4418   builder_.add_scale(scale);
4419   return builder_.Finish();
4420 }
4421 
4422 flatbuffers::Offset<TensorQuantInfo> CreateTensorQuantInfo(flatbuffers::FlatBufferBuilder &_fbb, const TensorQuantInfoT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4423 
4424 struct NetT : public flatbuffers::NativeTable {
4425   typedef Net TableType;
4426   std::string bizCode;
4427   std::vector<std::unique_ptr<TensorDescribeT>> extraTensorDescribe;
4428   std::unique_ptr<GpuLibraryT> gpulibrary;
4429   std::vector<std::unique_ptr<OpT>> oplists;
4430   std::vector<std::string> outputName;
4431   ForwardType preferForwardType;
4432   NetSource sourceType;
4433   std::vector<std::string> tensorName;
4434   int32_t tensorNumber;
4435   Usage usage;
4436   std::vector<std::unique_ptr<SubGraphProtoT>> subgraphs;
4437   NetT()
4438       : preferForwardType(ForwardType_CPU),
4439         sourceType(NetSource_CAFFE),
4440         tensorNumber(0),
4441         usage(Usage_INFERENCE) {
4442   }
4443 };
4444 
4445 struct Net FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
4446   typedef NetT NativeTableType;
4447   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
4448     return NetTypeTable();
4449   }
4450   const flatbuffers::String *bizCode() const {
4451     return GetPointer<const flatbuffers::String *>(4);
4452   }
4453   const flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>> *extraTensorDescribe() const {
4454     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>> *>(6);
4455   }
4456   const GpuLibrary *gpulibrary() const {
4457     return GetPointer<const GpuLibrary *>(8);
4458   }
4459   const flatbuffers::Vector<flatbuffers::Offset<Op>> *oplists() const {
4460     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Op>> *>(10);
4461   }
4462   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *outputName() const {
4463     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(12);
4464   }
4465   ForwardType preferForwardType() const {
4466     return static_cast<ForwardType>(GetField<int8_t>(14, 0));
4467   }
4468   NetSource sourceType() const {
4469     return static_cast<NetSource>(GetField<int8_t>(16, 0));
4470   }
4471   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *tensorName() const {
4472     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(18);
4473   }
4474   int32_t tensorNumber() const {
4475     return GetField<int32_t>(20, 0);
4476   }
4477   Usage usage() const {
4478     return static_cast<Usage>(GetField<int8_t>(22, 0));
4479   }
4480   const flatbuffers::Vector<flatbuffers::Offset<SubGraphProto>> *subgraphs() const {
4481     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<SubGraphProto>> *>(24);
4482   }
4483   bool Verify(flatbuffers::Verifier &verifier) const {
4484     return VerifyTableStart(verifier) &&
4485            VerifyOffset(verifier, 4) &&
4486            verifier.VerifyString(bizCode()) &&
4487            VerifyOffset(verifier, 6) &&
4488            verifier.VerifyVector(extraTensorDescribe()) &&
4489            verifier.VerifyVectorOfTables(extraTensorDescribe()) &&
4490            VerifyOffset(verifier, 8) &&
4491            verifier.VerifyTable(gpulibrary()) &&
4492            VerifyOffset(verifier, 10) &&
4493            verifier.VerifyVector(oplists()) &&
4494            verifier.VerifyVectorOfTables(oplists()) &&
4495            VerifyOffset(verifier, 12) &&
4496            verifier.VerifyVector(outputName()) &&
4497            verifier.VerifyVectorOfStrings(outputName()) &&
4498            VerifyField<int8_t>(verifier, 14) &&
4499            VerifyField<int8_t>(verifier, 16) &&
4500            VerifyOffset(verifier, 18) &&
4501            verifier.VerifyVector(tensorName()) &&
4502            verifier.VerifyVectorOfStrings(tensorName()) &&
4503            VerifyField<int32_t>(verifier, 20) &&
4504            VerifyField<int8_t>(verifier, 22) &&
4505            VerifyOffset(verifier, 24) &&
4506            verifier.VerifyVector(subgraphs()) &&
4507            verifier.VerifyVectorOfTables(subgraphs()) &&
4508            verifier.EndTable();
4509   }
4510   NetT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4511   void UnPackTo(NetT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
4512   static flatbuffers::Offset<Net> Pack(flatbuffers::FlatBufferBuilder &_fbb, const NetT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4513 };
4514 
4515 struct NetBuilder {
4516   flatbuffers::FlatBufferBuilder &fbb_;
4517   flatbuffers::uoffset_t start_;
4518   void add_bizCode(flatbuffers::Offset<flatbuffers::String> bizCode) {
4519     fbb_.AddOffset(4, bizCode);
4520   }
4521   void add_extraTensorDescribe(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>>> extraTensorDescribe) {
4522     fbb_.AddOffset(6, extraTensorDescribe);
4523   }
4524   void add_gpulibrary(flatbuffers::Offset<GpuLibrary> gpulibrary) {
4525     fbb_.AddOffset(8, gpulibrary);
4526   }
4527   void add_oplists(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Op>>> oplists) {
4528     fbb_.AddOffset(10, oplists);
4529   }
4530   void add_outputName(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> outputName) {
4531     fbb_.AddOffset(12, outputName);
4532   }
4533   void add_preferForwardType(ForwardType preferForwardType) {
4534     fbb_.AddElement<int8_t>(14, static_cast<int8_t>(preferForwardType), 0);
4535   }
4536   void add_sourceType(NetSource sourceType) {
4537     fbb_.AddElement<int8_t>(16, static_cast<int8_t>(sourceType), 0);
4538   }
4539   void add_tensorName(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> tensorName) {
4540     fbb_.AddOffset(18, tensorName);
4541   }
4542   void add_tensorNumber(int32_t tensorNumber) {
4543     fbb_.AddElement<int32_t>(20, tensorNumber, 0);
4544   }
4545   void add_usage(Usage usage) {
4546     fbb_.AddElement<int8_t>(22, static_cast<int8_t>(usage), 0);
4547   }
4548   void add_subgraphs(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SubGraphProto>>> subgraphs) {
4549     fbb_.AddOffset(24, subgraphs);
4550   }
4551   explicit NetBuilder(flatbuffers::FlatBufferBuilder &_fbb)
4552         : fbb_(_fbb) {
4553     start_ = fbb_.StartTable();
4554   }
4555   NetBuilder &operator=(const NetBuilder &);
4556   flatbuffers::Offset<Net> Finish() {
4557     const auto end = fbb_.EndTable(start_);
4558     auto o = flatbuffers::Offset<Net>(end);
4559     return o;
4560   }
4561 };
4562 
4563 inline flatbuffers::Offset<Net> CreateNet(
4564     flatbuffers::FlatBufferBuilder &_fbb,
4565     flatbuffers::Offset<flatbuffers::String> bizCode = 0,
4566     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<TensorDescribe>>> extraTensorDescribe = 0,
4567     flatbuffers::Offset<GpuLibrary> gpulibrary = 0,
4568     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Op>>> oplists = 0,
4569     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> outputName = 0,
4570     ForwardType preferForwardType = ForwardType_CPU,
4571     NetSource sourceType = NetSource_CAFFE,
4572     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> tensorName = 0,
4573     int32_t tensorNumber = 0,
4574     Usage usage = Usage_INFERENCE,
4575     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SubGraphProto>>> subgraphs = 0) {
4576   NetBuilder builder_(_fbb);
4577   builder_.add_subgraphs(subgraphs);
4578   builder_.add_tensorNumber(tensorNumber);
4579   builder_.add_tensorName(tensorName);
4580   builder_.add_outputName(outputName);
4581   builder_.add_oplists(oplists);
4582   builder_.add_gpulibrary(gpulibrary);
4583   builder_.add_extraTensorDescribe(extraTensorDescribe);
4584   builder_.add_bizCode(bizCode);
4585   builder_.add_usage(usage);
4586   builder_.add_sourceType(sourceType);
4587   builder_.add_preferForwardType(preferForwardType);
4588   return builder_.Finish();
4589 }
4590 
4591 flatbuffers::Offset<Net> CreateNet(flatbuffers::FlatBufferBuilder &_fbb, const NetT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
4592 
4593 inline PluginT *Plugin::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4594   auto _o = new PluginT();
4595   UnPackTo(_o, _resolver);
4596   return _o;
4597 }
4598 
4599 inline void Plugin::UnPackTo(PluginT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4600   (void)_o;
4601   (void)_resolver;
4602   { auto _e = type(); if (_e) _o->type = _e->str(); };
4603   { auto _e = attr(); if (_e) { _o->attr.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->attr[_i] = std::unique_ptr<AttributeT>(_e->Get(_i)->UnPack(_resolver)); } } };
4604 }
4605 
4606 inline flatbuffers::Offset<Plugin> Plugin::Pack(flatbuffers::FlatBufferBuilder &_fbb, const PluginT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4607   return CreatePlugin(_fbb, _o, _rehasher);
4608 }
4609 
4610 inline flatbuffers::Offset<Plugin> CreatePlugin(flatbuffers::FlatBufferBuilder &_fbb, const PluginT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4611   (void)_rehasher;
4612   (void)_o;
4613   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const PluginT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4614   auto _type = _o->type.empty() ? 0 : _fbb.CreateString(_o->type);
4615   auto _attr = _o->attr.size() ? _fbb.CreateVector<flatbuffers::Offset<Attribute>> (_o->attr.size(), [](size_t i, _VectorArgs *__va) { return CreateAttribute(*__va->__fbb, __va->__o->attr[i].get(), __va->__rehasher); }, &_va ) : 0;
4616   return MNN::CreatePlugin(
4617       _fbb,
4618       _type,
4619       _attr);
4620 }
4621 
4622 inline ExtraT *Extra::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4623   auto _o = new ExtraT();
4624   UnPackTo(_o, _resolver);
4625   return _o;
4626 }
4627 
4628 inline void Extra::UnPackTo(ExtraT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4629   (void)_o;
4630   (void)_resolver;
4631   { auto _e = type(); if (_e) _o->type = _e->str(); };
4632   { auto _e = engine(); if (_e) _o->engine = _e->str(); };
4633   { auto _e = info(); if (_e) { _o->info.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->info[_i] = _e->Get(_i); } } };
4634   { auto _e = attr(); if (_e) { _o->attr.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->attr[_i] = std::unique_ptr<AttributeT>(_e->Get(_i)->UnPack(_resolver)); } } };
4635 }
4636 
4637 inline flatbuffers::Offset<Extra> Extra::Pack(flatbuffers::FlatBufferBuilder &_fbb, const ExtraT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4638   return CreateExtra(_fbb, _o, _rehasher);
4639 }
4640 
4641 inline flatbuffers::Offset<Extra> CreateExtra(flatbuffers::FlatBufferBuilder &_fbb, const ExtraT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4642   (void)_rehasher;
4643   (void)_o;
4644   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const ExtraT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4645   auto _type = _o->type.empty() ? 0 : _fbb.CreateString(_o->type);
4646   auto _engine = _o->engine.empty() ? 0 : _fbb.CreateString(_o->engine);
4647   auto _info = _o->info.size() ? _fbb.CreateVector(_o->info) : 0;
4648   auto _attr = _o->attr.size() ? _fbb.CreateVector<flatbuffers::Offset<Attribute>> (_o->attr.size(), [](size_t i, _VectorArgs *__va) { return CreateAttribute(*__va->__fbb, __va->__o->attr[i].get(), __va->__rehasher); }, &_va ) : 0;
4649   return MNN::CreateExtra(
4650       _fbb,
4651       _type,
4652       _engine,
4653       _info,
4654       _attr);
4655 }
4656 
4657 inline StringVecT *StringVec::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4658   auto _o = new StringVecT();
4659   UnPackTo(_o, _resolver);
4660   return _o;
4661 }
4662 
4663 inline void StringVec::UnPackTo(StringVecT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4664   (void)_o;
4665   (void)_resolver;
4666   { auto _e = data(); if (_e) { _o->data.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->data[_i] = _e->Get(_i)->str(); } } };
4667 }
4668 
4669 inline flatbuffers::Offset<StringVec> StringVec::Pack(flatbuffers::FlatBufferBuilder &_fbb, const StringVecT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4670   return CreateStringVec(_fbb, _o, _rehasher);
4671 }
4672 
4673 inline flatbuffers::Offset<StringVec> CreateStringVec(flatbuffers::FlatBufferBuilder &_fbb, const StringVecT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4674   (void)_rehasher;
4675   (void)_o;
4676   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const StringVecT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4677   auto _data = _o->data.size() ? _fbb.CreateVectorOfStrings(_o->data) : 0;
4678   return MNN::CreateStringVec(
4679       _fbb,
4680       _data);
4681 }
4682 
4683 inline WhileParamT *WhileParam::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4684   auto _o = new WhileParamT();
4685   UnPackTo(_o, _resolver);
4686   return _o;
4687 }
4688 
4689 inline void WhileParam::UnPackTo(WhileParamT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4690   (void)_o;
4691   (void)_resolver;
4692   { auto _e = cond_graph(); if (_e) _o->cond_graph = _e->str(); };
4693   { auto _e = body_graph(); if (_e) _o->body_graph = _e->str(); };
4694   { auto _e = aliases_inputs(); if (_e) { _o->aliases_inputs.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->aliases_inputs[_i] = std::unique_ptr<StringVecT>(_e->Get(_i)->UnPack(_resolver)); } } };
4695   { auto _e = aliases_outputs(); if (_e) { _o->aliases_outputs.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->aliases_outputs[_i] = _e->Get(_i)->str(); } } };
4696   { auto _e = aliases_updates(); if (_e) { _o->aliases_updates.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->aliases_updates[_i] = std::unique_ptr<StringVecT>(_e->Get(_i)->UnPack(_resolver)); } } };
4697 }
4698 
4699 inline flatbuffers::Offset<WhileParam> WhileParam::Pack(flatbuffers::FlatBufferBuilder &_fbb, const WhileParamT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4700   return CreateWhileParam(_fbb, _o, _rehasher);
4701 }
4702 
4703 inline flatbuffers::Offset<WhileParam> CreateWhileParam(flatbuffers::FlatBufferBuilder &_fbb, const WhileParamT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4704   (void)_rehasher;
4705   (void)_o;
4706   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const WhileParamT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4707   auto _cond_graph = _o->cond_graph.empty() ? 0 : _fbb.CreateString(_o->cond_graph);
4708   auto _body_graph = _o->body_graph.empty() ? 0 : _fbb.CreateString(_o->body_graph);
4709   auto _aliases_inputs = _o->aliases_inputs.size() ? _fbb.CreateVector<flatbuffers::Offset<StringVec>> (_o->aliases_inputs.size(), [](size_t i, _VectorArgs *__va) { return CreateStringVec(*__va->__fbb, __va->__o->aliases_inputs[i].get(), __va->__rehasher); }, &_va ) : 0;
4710   auto _aliases_outputs = _o->aliases_outputs.size() ? _fbb.CreateVectorOfStrings(_o->aliases_outputs) : 0;
4711   auto _aliases_updates = _o->aliases_updates.size() ? _fbb.CreateVector<flatbuffers::Offset<StringVec>> (_o->aliases_updates.size(), [](size_t i, _VectorArgs *__va) { return CreateStringVec(*__va->__fbb, __va->__o->aliases_updates[i].get(), __va->__rehasher); }, &_va ) : 0;
4712   return MNN::CreateWhileParam(
4713       _fbb,
4714       _cond_graph,
4715       _body_graph,
4716       _aliases_inputs,
4717       _aliases_outputs,
4718       _aliases_updates);
4719 }
4720 
4721 inline IfParamT *IfParam::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4722   auto _o = new IfParamT();
4723   UnPackTo(_o, _resolver);
4724   return _o;
4725 }
4726 
4727 inline void IfParam::UnPackTo(IfParamT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4728   (void)_o;
4729   (void)_resolver;
4730   { auto _e = then_graph(); if (_e) _o->then_graph = _e->str(); };
4731   { auto _e = else_graph(); if (_e) _o->else_graph = _e->str(); };
4732   { auto _e = aliases_inputs(); if (_e) { _o->aliases_inputs.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->aliases_inputs[_i] = std::unique_ptr<StringVecT>(_e->Get(_i)->UnPack(_resolver)); } } };
4733   { auto _e = aliases_outputs(); if (_e) { _o->aliases_outputs.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->aliases_outputs[_i] = std::unique_ptr<StringVecT>(_e->Get(_i)->UnPack(_resolver)); } } };
4734 }
4735 
4736 inline flatbuffers::Offset<IfParam> IfParam::Pack(flatbuffers::FlatBufferBuilder &_fbb, const IfParamT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4737   return CreateIfParam(_fbb, _o, _rehasher);
4738 }
4739 
4740 inline flatbuffers::Offset<IfParam> CreateIfParam(flatbuffers::FlatBufferBuilder &_fbb, const IfParamT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4741   (void)_rehasher;
4742   (void)_o;
4743   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const IfParamT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4744   auto _then_graph = _o->then_graph.empty() ? 0 : _fbb.CreateString(_o->then_graph);
4745   auto _else_graph = _o->else_graph.empty() ? 0 : _fbb.CreateString(_o->else_graph);
4746   auto _aliases_inputs = _o->aliases_inputs.size() ? _fbb.CreateVector<flatbuffers::Offset<StringVec>> (_o->aliases_inputs.size(), [](size_t i, _VectorArgs *__va) { return CreateStringVec(*__va->__fbb, __va->__o->aliases_inputs[i].get(), __va->__rehasher); }, &_va ) : 0;
4747   auto _aliases_outputs = _o->aliases_outputs.size() ? _fbb.CreateVector<flatbuffers::Offset<StringVec>> (_o->aliases_outputs.size(), [](size_t i, _VectorArgs *__va) { return CreateStringVec(*__va->__fbb, __va->__o->aliases_outputs[i].get(), __va->__rehasher); }, &_va ) : 0;
4748   return MNN::CreateIfParam(
4749       _fbb,
4750       _then_graph,
4751       _else_graph,
4752       _aliases_inputs,
4753       _aliases_outputs);
4754 }
4755 
4756 inline RegionCommandT *RegionCommand::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4757   auto _o = new RegionCommandT();
4758   UnPackTo(_o, _resolver);
4759   return _o;
4760 }
4761 
4762 inline void RegionCommand::UnPackTo(RegionCommandT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4763   (void)_o;
4764   (void)_resolver;
4765   { auto _e = op(); if (_e) _o->op = std::unique_ptr<OpT>(_e->UnPack(_resolver)); };
4766   { auto _e = steps(); if (_e) { _o->steps.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->steps[_i] = _e->Get(_i); } } };
4767   { auto _e = size(); if (_e) { _o->size.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->size[_i] = _e->Get(_i); } } };
4768   { auto _e = indexes(); if (_e) { _o->indexes.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->indexes[_i] = _e->Get(_i); } } };
4769   { auto _e = view(); if (_e) { _o->view.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->view[_i] = std::unique_ptr<ViewT>(_e->Get(_i)->UnPack(_resolver)); } } };
4770   { auto _e = fuse(); _o->fuse = _e; };
4771   { auto _e = iterIndexes(); if (_e) { _o->iterIndexes.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->iterIndexes[_i] = _e->Get(_i); } } };
4772 }
4773 
4774 inline flatbuffers::Offset<RegionCommand> RegionCommand::Pack(flatbuffers::FlatBufferBuilder &_fbb, const RegionCommandT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4775   return CreateRegionCommand(_fbb, _o, _rehasher);
4776 }
4777 
4778 inline flatbuffers::Offset<RegionCommand> CreateRegionCommand(flatbuffers::FlatBufferBuilder &_fbb, const RegionCommandT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4779   (void)_rehasher;
4780   (void)_o;
4781   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const RegionCommandT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4782   auto _op = _o->op ? CreateOp(_fbb, _o->op.get(), _rehasher) : 0;
4783   auto _steps = _o->steps.size() ? _fbb.CreateVector(_o->steps) : 0;
4784   auto _size = _o->size.size() ? _fbb.CreateVector(_o->size) : 0;
4785   auto _indexes = _o->indexes.size() ? _fbb.CreateVector(_o->indexes) : 0;
4786   auto _view = _o->view.size() ? _fbb.CreateVector<flatbuffers::Offset<View>> (_o->view.size(), [](size_t i, _VectorArgs *__va) { return CreateView(*__va->__fbb, __va->__o->view[i].get(), __va->__rehasher); }, &_va ) : 0;
4787   auto _fuse = _o->fuse;
4788   auto _iterIndexes = _o->iterIndexes.size() ? _fbb.CreateVector(_o->iterIndexes) : 0;
4789   return MNN::CreateRegionCommand(
4790       _fbb,
4791       _op,
4792       _steps,
4793       _size,
4794       _indexes,
4795       _view,
4796       _fuse,
4797       _iterIndexes);
4798 }
4799 
4800 inline LoopParamT *LoopParam::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4801   auto _o = new LoopParamT();
4802   UnPackTo(_o, _resolver);
4803   return _o;
4804 }
4805 
4806 inline void LoopParam::UnPackTo(LoopParamT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4807   (void)_o;
4808   (void)_resolver;
4809   { auto _e = tensorNumber(); _o->tensorNumber = _e; };
4810   { auto _e = outputIndexes(); if (_e) { _o->outputIndexes.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->outputIndexes[_i] = _e->Get(_i); } } };
4811   { auto _e = inputIndexes(); if (_e) { _o->inputIndexes.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->inputIndexes[_i] = _e->Get(_i); } } };
4812   { auto _e = midTensors(); if (_e) { _o->midTensors.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->midTensors[_i] = std::unique_ptr<TensorDescribeT>(_e->Get(_i)->UnPack(_resolver)); } } };
4813   { auto _e = parallel(); _o->parallel = _e; };
4814   { auto _e = loopNumber(); _o->loopNumber = _e; };
4815   { auto _e = commands(); if (_e) { _o->commands.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->commands[_i] = std::unique_ptr<RegionCommandT>(_e->Get(_i)->UnPack(_resolver)); } } };
4816 }
4817 
4818 inline flatbuffers::Offset<LoopParam> LoopParam::Pack(flatbuffers::FlatBufferBuilder &_fbb, const LoopParamT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4819   return CreateLoopParam(_fbb, _o, _rehasher);
4820 }
4821 
4822 inline flatbuffers::Offset<LoopParam> CreateLoopParam(flatbuffers::FlatBufferBuilder &_fbb, const LoopParamT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4823   (void)_rehasher;
4824   (void)_o;
4825   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const LoopParamT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4826   auto _tensorNumber = _o->tensorNumber;
4827   auto _outputIndexes = _o->outputIndexes.size() ? _fbb.CreateVector(_o->outputIndexes) : 0;
4828   auto _inputIndexes = _o->inputIndexes.size() ? _fbb.CreateVector(_o->inputIndexes) : 0;
4829   auto _midTensors = _o->midTensors.size() ? _fbb.CreateVector<flatbuffers::Offset<TensorDescribe>> (_o->midTensors.size(), [](size_t i, _VectorArgs *__va) { return CreateTensorDescribe(*__va->__fbb, __va->__o->midTensors[i].get(), __va->__rehasher); }, &_va ) : 0;
4830   auto _parallel = _o->parallel;
4831   auto _loopNumber = _o->loopNumber;
4832   auto _commands = _o->commands.size() ? _fbb.CreateVector<flatbuffers::Offset<RegionCommand>> (_o->commands.size(), [](size_t i, _VectorArgs *__va) { return CreateRegionCommand(*__va->__fbb, __va->__o->commands[i].get(), __va->__rehasher); }, &_va ) : 0;
4833   return MNN::CreateLoopParam(
4834       _fbb,
4835       _tensorNumber,
4836       _outputIndexes,
4837       _inputIndexes,
4838       _midTensors,
4839       _parallel,
4840       _loopNumber,
4841       _commands);
4842 }
4843 
4844 inline OpT *Op::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4845   auto _o = new OpT();
4846   UnPackTo(_o, _resolver);
4847   return _o;
4848 }
4849 
4850 inline void Op::UnPackTo(OpT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4851   (void)_o;
4852   (void)_resolver;
4853   { auto _e = inputIndexes(); if (_e) { _o->inputIndexes.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->inputIndexes[_i] = _e->Get(_i); } } };
4854   { auto _e = main_type(); _o->main.type = _e; };
4855   { auto _e = main(); if (_e) _o->main.value = OpParameterUnion::UnPack(_e, main_type(), _resolver); };
4856   { auto _e = name(); if (_e) _o->name = _e->str(); };
4857   { auto _e = outputIndexes(); if (_e) { _o->outputIndexes.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->outputIndexes[_i] = _e->Get(_i); } } };
4858   { auto _e = type(); _o->type = _e; };
4859   { auto _e = defaultDimentionFormat(); _o->defaultDimentionFormat = _e; };
4860 }
4861 
4862 inline flatbuffers::Offset<Op> Op::Pack(flatbuffers::FlatBufferBuilder &_fbb, const OpT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4863   return CreateOp(_fbb, _o, _rehasher);
4864 }
4865 
4866 inline flatbuffers::Offset<Op> CreateOp(flatbuffers::FlatBufferBuilder &_fbb, const OpT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4867   (void)_rehasher;
4868   (void)_o;
4869   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const OpT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4870   auto _inputIndexes = _o->inputIndexes.size() ? _fbb.CreateVector(_o->inputIndexes) : 0;
4871   auto _main_type = _o->main.type;
4872   auto _main = _o->main.Pack(_fbb);
4873   auto _name = _o->name.empty() ? 0 : _fbb.CreateString(_o->name);
4874   auto _outputIndexes = _o->outputIndexes.size() ? _fbb.CreateVector(_o->outputIndexes) : 0;
4875   auto _type = _o->type;
4876   auto _defaultDimentionFormat = _o->defaultDimentionFormat;
4877   return MNN::CreateOp(
4878       _fbb,
4879       _inputIndexes,
4880       _main_type,
4881       _main,
4882       _name,
4883       _outputIndexes,
4884       _type,
4885       _defaultDimentionFormat);
4886 }
4887 
4888 inline ViewT *View::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4889   auto _o = new ViewT();
4890   UnPackTo(_o, _resolver);
4891   return _o;
4892 }
4893 
4894 inline void View::UnPackTo(ViewT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4895   (void)_o;
4896   (void)_resolver;
4897   { auto _e = offset(); _o->offset = _e; };
4898   { auto _e = stride(); if (_e) { _o->stride.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->stride[_i] = _e->Get(_i); } } };
4899 }
4900 
4901 inline flatbuffers::Offset<View> View::Pack(flatbuffers::FlatBufferBuilder &_fbb, const ViewT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4902   return CreateView(_fbb, _o, _rehasher);
4903 }
4904 
4905 inline flatbuffers::Offset<View> CreateView(flatbuffers::FlatBufferBuilder &_fbb, const ViewT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4906   (void)_rehasher;
4907   (void)_o;
4908   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const ViewT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4909   auto _offset = _o->offset;
4910   auto _stride = _o->stride.size() ? _fbb.CreateVector(_o->stride) : 0;
4911   return MNN::CreateView(
4912       _fbb,
4913       _offset,
4914       _stride);
4915 }
4916 
4917 inline RegionT *Region::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4918   auto _o = new RegionT();
4919   UnPackTo(_o, _resolver);
4920   return _o;
4921 }
4922 
4923 inline void Region::UnPackTo(RegionT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4924   (void)_o;
4925   (void)_resolver;
4926   { auto _e = src(); if (_e) _o->src = std::unique_ptr<ViewT>(_e->UnPack(_resolver)); };
4927   { auto _e = dst(); if (_e) _o->dst = std::unique_ptr<ViewT>(_e->UnPack(_resolver)); };
4928   { auto _e = size(); if (_e) { _o->size.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->size[_i] = _e->Get(_i); } } };
4929   { auto _e = origin(); _o->origin = _e; };
4930 }
4931 
4932 inline flatbuffers::Offset<Region> Region::Pack(flatbuffers::FlatBufferBuilder &_fbb, const RegionT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4933   return CreateRegion(_fbb, _o, _rehasher);
4934 }
4935 
4936 inline flatbuffers::Offset<Region> CreateRegion(flatbuffers::FlatBufferBuilder &_fbb, const RegionT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4937   (void)_rehasher;
4938   (void)_o;
4939   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const RegionT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4940   auto _src = _o->src ? CreateView(_fbb, _o->src.get(), _rehasher) : 0;
4941   auto _dst = _o->dst ? CreateView(_fbb, _o->dst.get(), _rehasher) : 0;
4942   auto _size = _o->size.size() ? _fbb.CreateVector(_o->size) : 0;
4943   auto _origin = _o->origin;
4944   return MNN::CreateRegion(
4945       _fbb,
4946       _src,
4947       _dst,
4948       _size,
4949       _origin);
4950 }
4951 
4952 inline TensorDescribeT *TensorDescribe::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4953   auto _o = new TensorDescribeT();
4954   UnPackTo(_o, _resolver);
4955   return _o;
4956 }
4957 
4958 inline void TensorDescribe::UnPackTo(TensorDescribeT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4959   (void)_o;
4960   (void)_resolver;
4961   { auto _e = blob(); if (_e) _o->blob = std::unique_ptr<BlobT>(_e->UnPack(_resolver)); };
4962   { auto _e = index(); _o->index = _e; };
4963   { auto _e = name(); if (_e) _o->name = _e->str(); };
4964   { auto _e = regions(); if (_e) { _o->regions.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->regions[_i] = std::unique_ptr<RegionT>(_e->Get(_i)->UnPack(_resolver)); } } };
4965   { auto _e = quantInfo(); if (_e) _o->quantInfo = std::unique_ptr<TensorQuantInfoT>(_e->UnPack(_resolver)); };
4966 }
4967 
4968 inline flatbuffers::Offset<TensorDescribe> TensorDescribe::Pack(flatbuffers::FlatBufferBuilder &_fbb, const TensorDescribeT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
4969   return CreateTensorDescribe(_fbb, _o, _rehasher);
4970 }
4971 
4972 inline flatbuffers::Offset<TensorDescribe> CreateTensorDescribe(flatbuffers::FlatBufferBuilder &_fbb, const TensorDescribeT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
4973   (void)_rehasher;
4974   (void)_o;
4975   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const TensorDescribeT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
4976   auto _blob = _o->blob ? CreateBlob(_fbb, _o->blob.get(), _rehasher) : 0;
4977   auto _index = _o->index;
4978   auto _name = _o->name.empty() ? 0 : _fbb.CreateString(_o->name);
4979   auto _regions = _o->regions.size() ? _fbb.CreateVector<flatbuffers::Offset<Region>> (_o->regions.size(), [](size_t i, _VectorArgs *__va) { return CreateRegion(*__va->__fbb, __va->__o->regions[i].get(), __va->__rehasher); }, &_va ) : 0;
4980   auto _quantInfo = _o->quantInfo ? CreateTensorQuantInfo(_fbb, _o->quantInfo.get(), _rehasher) : 0;
4981   return MNN::CreateTensorDescribe(
4982       _fbb,
4983       _blob,
4984       _index,
4985       _name,
4986       _regions,
4987       _quantInfo);
4988 }
4989 
4990 inline SubGraphProtoT *SubGraphProto::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
4991   auto _o = new SubGraphProtoT();
4992   UnPackTo(_o, _resolver);
4993   return _o;
4994 }
4995 
4996 inline void SubGraphProto::UnPackTo(SubGraphProtoT *_o, const flatbuffers::resolver_function_t *_resolver) const {
4997   (void)_o;
4998   (void)_resolver;
4999   { auto _e = name(); if (_e) _o->name = _e->str(); };
5000   { auto _e = inputs(); if (_e) { _o->inputs.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->inputs[_i] = _e->Get(_i); } } };
5001   { auto _e = outputs(); if (_e) { _o->outputs.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->outputs[_i] = _e->Get(_i); } } };
5002   { auto _e = tensors(); if (_e) { _o->tensors.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->tensors[_i] = _e->Get(_i)->str(); } } };
5003   { auto _e = nodes(); if (_e) { _o->nodes.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->nodes[_i] = std::unique_ptr<OpT>(_e->Get(_i)->UnPack(_resolver)); } } };
5004   { auto _e = extraTensorDescribe(); if (_e) { _o->extraTensorDescribe.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->extraTensorDescribe[_i] = std::unique_ptr<TensorDescribeT>(_e->Get(_i)->UnPack(_resolver)); } } };
5005 }
5006 
5007 inline flatbuffers::Offset<SubGraphProto> SubGraphProto::Pack(flatbuffers::FlatBufferBuilder &_fbb, const SubGraphProtoT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
5008   return CreateSubGraphProto(_fbb, _o, _rehasher);
5009 }
5010 
5011 inline flatbuffers::Offset<SubGraphProto> CreateSubGraphProto(flatbuffers::FlatBufferBuilder &_fbb, const SubGraphProtoT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
5012   (void)_rehasher;
5013   (void)_o;
5014   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const SubGraphProtoT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
5015   auto _name = _o->name.empty() ? 0 : _fbb.CreateString(_o->name);
5016   auto _inputs = _o->inputs.size() ? _fbb.CreateVector(_o->inputs) : 0;
5017   auto _outputs = _o->outputs.size() ? _fbb.CreateVector(_o->outputs) : 0;
5018   auto _tensors = _o->tensors.size() ? _fbb.CreateVectorOfStrings(_o->tensors) : 0;
5019   auto _nodes = _o->nodes.size() ? _fbb.CreateVector<flatbuffers::Offset<Op>> (_o->nodes.size(), [](size_t i, _VectorArgs *__va) { return CreateOp(*__va->__fbb, __va->__o->nodes[i].get(), __va->__rehasher); }, &_va ) : 0;
5020   auto _extraTensorDescribe = _o->extraTensorDescribe.size() ? _fbb.CreateVector<flatbuffers::Offset<TensorDescribe>> (_o->extraTensorDescribe.size(), [](size_t i, _VectorArgs *__va) { return CreateTensorDescribe(*__va->__fbb, __va->__o->extraTensorDescribe[i].get(), __va->__rehasher); }, &_va ) : 0;
5021   return MNN::CreateSubGraphProto(
5022       _fbb,
5023       _name,
5024       _inputs,
5025       _outputs,
5026       _tensors,
5027       _nodes,
5028       _extraTensorDescribe);
5029 }
5030 
5031 inline TensorQuantInfoT *TensorQuantInfo::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
5032   auto _o = new TensorQuantInfoT();
5033   UnPackTo(_o, _resolver);
5034   return _o;
5035 }
5036 
5037 inline void TensorQuantInfo::UnPackTo(TensorQuantInfoT *_o, const flatbuffers::resolver_function_t *_resolver) const {
5038   (void)_o;
5039   (void)_resolver;
5040   { auto _e = scale(); _o->scale = _e; };
5041   { auto _e = zero(); _o->zero = _e; };
5042   { auto _e = min(); _o->min = _e; };
5043   { auto _e = max(); _o->max = _e; };
5044   { auto _e = type(); _o->type = _e; };
5045 }
5046 
5047 inline flatbuffers::Offset<TensorQuantInfo> TensorQuantInfo::Pack(flatbuffers::FlatBufferBuilder &_fbb, const TensorQuantInfoT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
5048   return CreateTensorQuantInfo(_fbb, _o, _rehasher);
5049 }
5050 
5051 inline flatbuffers::Offset<TensorQuantInfo> CreateTensorQuantInfo(flatbuffers::FlatBufferBuilder &_fbb, const TensorQuantInfoT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
5052   (void)_rehasher;
5053   (void)_o;
5054   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const TensorQuantInfoT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
5055   auto _scale = _o->scale;
5056   auto _zero = _o->zero;
5057   auto _min = _o->min;
5058   auto _max = _o->max;
5059   auto _type = _o->type;
5060   return MNN::CreateTensorQuantInfo(
5061       _fbb,
5062       _scale,
5063       _zero,
5064       _min,
5065       _max,
5066       _type);
5067 }
5068 
5069 inline NetT *Net::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
5070   auto _o = new NetT();
5071   UnPackTo(_o, _resolver);
5072   return _o;
5073 }
5074 
5075 inline void Net::UnPackTo(NetT *_o, const flatbuffers::resolver_function_t *_resolver) const {
5076   (void)_o;
5077   (void)_resolver;
5078   { auto _e = bizCode(); if (_e) _o->bizCode = _e->str(); };
5079   { auto _e = extraTensorDescribe(); if (_e) { _o->extraTensorDescribe.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->extraTensorDescribe[_i] = std::unique_ptr<TensorDescribeT>(_e->Get(_i)->UnPack(_resolver)); } } };
5080   { auto _e = gpulibrary(); if (_e) _o->gpulibrary = std::unique_ptr<GpuLibraryT>(_e->UnPack(_resolver)); };
5081   { auto _e = oplists(); if (_e) { _o->oplists.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->oplists[_i] = std::unique_ptr<OpT>(_e->Get(_i)->UnPack(_resolver)); } } };
5082   { auto _e = outputName(); if (_e) { _o->outputName.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->outputName[_i] = _e->Get(_i)->str(); } } };
5083   { auto _e = preferForwardType(); _o->preferForwardType = _e; };
5084   { auto _e = sourceType(); _o->sourceType = _e; };
5085   { auto _e = tensorName(); if (_e) { _o->tensorName.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->tensorName[_i] = _e->Get(_i)->str(); } } };
5086   { auto _e = tensorNumber(); _o->tensorNumber = _e; };
5087   { auto _e = usage(); _o->usage = _e; };
5088   { auto _e = subgraphs(); if (_e) { _o->subgraphs.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->subgraphs[_i] = std::unique_ptr<SubGraphProtoT>(_e->Get(_i)->UnPack(_resolver)); } } };
5089 }
5090 
5091 inline flatbuffers::Offset<Net> Net::Pack(flatbuffers::FlatBufferBuilder &_fbb, const NetT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
5092   return CreateNet(_fbb, _o, _rehasher);
5093 }
5094 
5095 inline flatbuffers::Offset<Net> CreateNet(flatbuffers::FlatBufferBuilder &_fbb, const NetT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
5096   (void)_rehasher;
5097   (void)_o;
5098   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const NetT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
5099   auto _bizCode = _o->bizCode.empty() ? 0 : _fbb.CreateString(_o->bizCode);
5100   auto _extraTensorDescribe = _o->extraTensorDescribe.size() ? _fbb.CreateVector<flatbuffers::Offset<TensorDescribe>> (_o->extraTensorDescribe.size(), [](size_t i, _VectorArgs *__va) { return CreateTensorDescribe(*__va->__fbb, __va->__o->extraTensorDescribe[i].get(), __va->__rehasher); }, &_va ) : 0;
5101   auto _gpulibrary = _o->gpulibrary ? CreateGpuLibrary(_fbb, _o->gpulibrary.get(), _rehasher) : 0;
5102   auto _oplists = _o->oplists.size() ? _fbb.CreateVector<flatbuffers::Offset<Op>> (_o->oplists.size(), [](size_t i, _VectorArgs *__va) { return CreateOp(*__va->__fbb, __va->__o->oplists[i].get(), __va->__rehasher); }, &_va ) : 0;
5103   auto _outputName = _o->outputName.size() ? _fbb.CreateVectorOfStrings(_o->outputName) : 0;
5104   auto _preferForwardType = _o->preferForwardType;
5105   auto _sourceType = _o->sourceType;
5106   auto _tensorName = _o->tensorName.size() ? _fbb.CreateVectorOfStrings(_o->tensorName) : 0;
5107   auto _tensorNumber = _o->tensorNumber;
5108   auto _usage = _o->usage;
5109   auto _subgraphs = _o->subgraphs.size() ? _fbb.CreateVector<flatbuffers::Offset<SubGraphProto>> (_o->subgraphs.size(), [](size_t i, _VectorArgs *__va) { return CreateSubGraphProto(*__va->__fbb, __va->__o->subgraphs[i].get(), __va->__rehasher); }, &_va ) : 0;
5110   return MNN::CreateNet(
5111       _fbb,
5112       _bizCode,
5113       _extraTensorDescribe,
5114       _gpulibrary,
5115       _oplists,
5116       _outputName,
5117       _preferForwardType,
5118       _sourceType,
5119       _tensorName,
5120       _tensorNumber,
5121       _usage,
5122       _subgraphs);
5123 }
5124 
5125 inline bool VerifyOpParameter(flatbuffers::Verifier &verifier, const void *obj, OpParameter type) {
5126   switch (type) {
5127     case OpParameter_NONE: {
5128       return true;
5129     }
5130     case OpParameter_QuantizedAdd: {
5131       auto ptr = reinterpret_cast<const QuantizedAdd *>(obj);
5132       return verifier.VerifyTable(ptr);
5133     }
5134     case OpParameter_ArgMax: {
5135       auto ptr = reinterpret_cast<const ArgMax *>(obj);
5136       return verifier.VerifyTable(ptr);
5137     }
5138     case OpParameter_AsString: {
5139       auto ptr = reinterpret_cast<const AsString *>(obj);
5140       return verifier.VerifyTable(ptr);
5141     }
5142     case OpParameter_Axis: {
5143       auto ptr = reinterpret_cast<const Axis *>(obj);
5144       return verifier.VerifyTable(ptr);
5145     }
5146     case OpParameter_BatchNorm: {
5147       auto ptr = reinterpret_cast<const BatchNorm *>(obj);
5148       return verifier.VerifyTable(ptr);
5149     }
5150     case OpParameter_BinaryOp: {
5151       auto ptr = reinterpret_cast<const BinaryOp *>(obj);
5152       return verifier.VerifyTable(ptr);
5153     }
5154     case OpParameter_Blob: {
5155       auto ptr = reinterpret_cast<const Blob *>(obj);
5156       return verifier.VerifyTable(ptr);
5157     }
5158     case OpParameter_CastParam: {
5159       auto ptr = reinterpret_cast<const CastParam *>(obj);
5160       return verifier.VerifyTable(ptr);
5161     }
5162     case OpParameter_Convolution2D: {
5163       auto ptr = reinterpret_cast<const Convolution2D *>(obj);
5164       return verifier.VerifyTable(ptr);
5165     }
5166     case OpParameter_Crop: {
5167       auto ptr = reinterpret_cast<const Crop *>(obj);
5168       return verifier.VerifyTable(ptr);
5169     }
5170     case OpParameter_CropAndResize: {
5171       auto ptr = reinterpret_cast<const CropAndResize *>(obj);
5172       return verifier.VerifyTable(ptr);
5173     }
5174     case OpParameter_Dequantize: {
5175       auto ptr = reinterpret_cast<const Dequantize *>(obj);
5176       return verifier.VerifyTable(ptr);
5177     }
5178     case OpParameter_DetectionOutput: {
5179       auto ptr = reinterpret_cast<const DetectionOutput *>(obj);
5180       return verifier.VerifyTable(ptr);
5181     }
5182     case OpParameter_Eltwise: {
5183       auto ptr = reinterpret_cast<const Eltwise *>(obj);
5184       return verifier.VerifyTable(ptr);
5185     }
5186     case OpParameter_ExpandDims: {
5187       auto ptr = reinterpret_cast<const ExpandDims *>(obj);
5188       return verifier.VerifyTable(ptr);
5189     }
5190     case OpParameter_Fill: {
5191       auto ptr = reinterpret_cast<const Fill *>(obj);
5192       return verifier.VerifyTable(ptr);
5193     }
5194     case OpParameter_Flatten: {
5195       auto ptr = reinterpret_cast<const Flatten *>(obj);
5196       return verifier.VerifyTable(ptr);
5197     }
5198     case OpParameter_Gather: {
5199       auto ptr = reinterpret_cast<const Gather *>(obj);
5200       return verifier.VerifyTable(ptr);
5201     }
5202     case OpParameter_GatherV2: {
5203       auto ptr = reinterpret_cast<const GatherV2 *>(obj);
5204       return verifier.VerifyTable(ptr);
5205     }
5206     case OpParameter_InnerProduct: {
5207       auto ptr = reinterpret_cast<const InnerProduct *>(obj);
5208       return verifier.VerifyTable(ptr);
5209     }
5210     case OpParameter_Input: {
5211       auto ptr = reinterpret_cast<const Input *>(obj);
5212       return verifier.VerifyTable(ptr);
5213     }
5214     case OpParameter_Interp: {
5215       auto ptr = reinterpret_cast<const Interp *>(obj);
5216       return verifier.VerifyTable(ptr);
5217     }
5218     case OpParameter_LRN: {
5219       auto ptr = reinterpret_cast<const LRN *>(obj);
5220       return verifier.VerifyTable(ptr);
5221     }
5222     case OpParameter_LSTM: {
5223       auto ptr = reinterpret_cast<const LSTM *>(obj);
5224       return verifier.VerifyTable(ptr);
5225     }
5226     case OpParameter_MatMul: {
5227       auto ptr = reinterpret_cast<const MatMul *>(obj);
5228       return verifier.VerifyTable(ptr);
5229     }
5230     case OpParameter_NonMaxSuppressionV2: {
5231       auto ptr = reinterpret_cast<const NonMaxSuppressionV2 *>(obj);
5232       return verifier.VerifyTable(ptr);
5233     }
5234     case OpParameter_Normalize: {
5235       auto ptr = reinterpret_cast<const Normalize *>(obj);
5236       return verifier.VerifyTable(ptr);
5237     }
5238     case OpParameter_PackParam: {
5239       auto ptr = reinterpret_cast<const PackParam *>(obj);
5240       return verifier.VerifyTable(ptr);
5241     }
5242     case OpParameter_Permute: {
5243       auto ptr = reinterpret_cast<const Permute *>(obj);
5244       return verifier.VerifyTable(ptr);
5245     }
5246     case OpParameter_Plugin: {
5247       auto ptr = reinterpret_cast<const Plugin *>(obj);
5248       return verifier.VerifyTable(ptr);
5249     }
5250     case OpParameter_Pool: {
5251       auto ptr = reinterpret_cast<const Pool *>(obj);
5252       return verifier.VerifyTable(ptr);
5253     }
5254     case OpParameter_PRelu: {
5255       auto ptr = reinterpret_cast<const PRelu *>(obj);
5256       return verifier.VerifyTable(ptr);
5257     }
5258     case OpParameter_PriorBox: {
5259       auto ptr = reinterpret_cast<const PriorBox *>(obj);
5260       return verifier.VerifyTable(ptr);
5261     }
5262     case OpParameter_Proposal: {
5263       auto ptr = reinterpret_cast<const Proposal *>(obj);
5264       return verifier.VerifyTable(ptr);
5265     }
5266     case OpParameter_QuantizedAvgPool: {
5267       auto ptr = reinterpret_cast<const QuantizedAvgPool *>(obj);
5268       return verifier.VerifyTable(ptr);
5269     }
5270     case OpParameter_QuantizedBiasAdd: {
5271       auto ptr = reinterpret_cast<const QuantizedBiasAdd *>(obj);
5272       return verifier.VerifyTable(ptr);
5273     }
5274     case OpParameter_QuantizedConcat: {
5275       auto ptr = reinterpret_cast<const QuantizedConcat *>(obj);
5276       return verifier.VerifyTable(ptr);
5277     }
5278     case OpParameter_QuantizedLogistic: {
5279       auto ptr = reinterpret_cast<const QuantizedLogistic *>(obj);
5280       return verifier.VerifyTable(ptr);
5281     }
5282     case OpParameter_QuantizedMatMul: {
5283       auto ptr = reinterpret_cast<const QuantizedMatMul *>(obj);
5284       return verifier.VerifyTable(ptr);
5285     }
5286     case OpParameter_QuantizedMaxPool: {
5287       auto ptr = reinterpret_cast<const QuantizedMaxPool *>(obj);
5288       return verifier.VerifyTable(ptr);
5289     }
5290     case OpParameter_QuantizedRelu: {
5291       auto ptr = reinterpret_cast<const QuantizedRelu *>(obj);
5292       return verifier.VerifyTable(ptr);
5293     }
5294     case OpParameter_QuantizedRelu6: {
5295       auto ptr = reinterpret_cast<const QuantizedRelu6 *>(obj);
5296       return verifier.VerifyTable(ptr);
5297     }
5298     case OpParameter_QuantizedReshape: {
5299       auto ptr = reinterpret_cast<const QuantizedReshape *>(obj);
5300       return verifier.VerifyTable(ptr);
5301     }
5302     case OpParameter_QuantizedSoftmax: {
5303       auto ptr = reinterpret_cast<const QuantizedSoftmax *>(obj);
5304       return verifier.VerifyTable(ptr);
5305     }
5306     case OpParameter_QuantizeMaxMin: {
5307       auto ptr = reinterpret_cast<const QuantizeMaxMin *>(obj);
5308       return verifier.VerifyTable(ptr);
5309     }
5310     case OpParameter_QuantizeV2: {
5311       auto ptr = reinterpret_cast<const QuantizeV2 *>(obj);
5312       return verifier.VerifyTable(ptr);
5313     }
5314     case OpParameter_Range: {
5315       auto ptr = reinterpret_cast<const Range *>(obj);
5316       return verifier.VerifyTable(ptr);
5317     }
5318     case OpParameter_Rank: {
5319       auto ptr = reinterpret_cast<const Rank *>(obj);
5320       return verifier.VerifyTable(ptr);
5321     }
5322     case OpParameter_ReduceJoin: {
5323       auto ptr = reinterpret_cast<const ReduceJoin *>(obj);
5324       return verifier.VerifyTable(ptr);
5325     }
5326     case OpParameter_ReductionParam: {
5327       auto ptr = reinterpret_cast<const ReductionParam *>(obj);
5328       return verifier.VerifyTable(ptr);
5329     }
5330     case OpParameter_Relu: {
5331       auto ptr = reinterpret_cast<const Relu *>(obj);
5332       return verifier.VerifyTable(ptr);
5333     }
5334     case OpParameter_Relu6: {
5335       auto ptr = reinterpret_cast<const Relu6 *>(obj);
5336       return verifier.VerifyTable(ptr);
5337     }
5338     case OpParameter_RequantizationRange: {
5339       auto ptr = reinterpret_cast<const RequantizationRange *>(obj);
5340       return verifier.VerifyTable(ptr);
5341     }
5342     case OpParameter_Requantize: {
5343       auto ptr = reinterpret_cast<const Requantize *>(obj);
5344       return verifier.VerifyTable(ptr);
5345     }
5346     case OpParameter_Reshape: {
5347       auto ptr = reinterpret_cast<const Reshape *>(obj);
5348       return verifier.VerifyTable(ptr);
5349     }
5350     case OpParameter_Resize: {
5351       auto ptr = reinterpret_cast<const Resize *>(obj);
5352       return verifier.VerifyTable(ptr);
5353     }
5354     case OpParameter_RoiPooling: {
5355       auto ptr = reinterpret_cast<const RoiPooling *>(obj);
5356       return verifier.VerifyTable(ptr);
5357     }
5358     case OpParameter_Scale: {
5359       auto ptr = reinterpret_cast<const Scale *>(obj);
5360       return verifier.VerifyTable(ptr);
5361     }
5362     case OpParameter_Selu: {
5363       auto ptr = reinterpret_cast<const Selu *>(obj);
5364       return verifier.VerifyTable(ptr);
5365     }
5366     case OpParameter_Size: {
5367       auto ptr = reinterpret_cast<const Size *>(obj);
5368       return verifier.VerifyTable(ptr);
5369     }
5370     case OpParameter_Slice: {
5371       auto ptr = reinterpret_cast<const Slice *>(obj);
5372       return verifier.VerifyTable(ptr);
5373     }
5374     case OpParameter_SliceTf: {
5375       auto ptr = reinterpret_cast<const SliceTf *>(obj);
5376       return verifier.VerifyTable(ptr);
5377     }
5378     case OpParameter_SpaceBatch: {
5379       auto ptr = reinterpret_cast<const SpaceBatch *>(obj);
5380       return verifier.VerifyTable(ptr);
5381     }
5382     case OpParameter_SqueezeParam: {
5383       auto ptr = reinterpret_cast<const SqueezeParam *>(obj);
5384       return verifier.VerifyTable(ptr);
5385     }
5386     case OpParameter_StridedSliceParam: {
5387       auto ptr = reinterpret_cast<const StridedSliceParam *>(obj);
5388       return verifier.VerifyTable(ptr);
5389     }
5390     case OpParameter_TensorConvertInfo: {
5391       auto ptr = reinterpret_cast<const TensorConvertInfo *>(obj);
5392       return verifier.VerifyTable(ptr);
5393     }
5394     case OpParameter_TfQuantizedConv2D: {
5395       auto ptr = reinterpret_cast<const TfQuantizedConv2D *>(obj);
5396       return verifier.VerifyTable(ptr);
5397     }
5398     case OpParameter_TopKV2: {
5399       auto ptr = reinterpret_cast<const TopKV2 *>(obj);
5400       return verifier.VerifyTable(ptr);
5401     }
5402     case OpParameter_Transpose: {
5403       auto ptr = reinterpret_cast<const Transpose *>(obj);
5404       return verifier.VerifyTable(ptr);
5405     }
5406     case OpParameter_UnaryOp: {
5407       auto ptr = reinterpret_cast<const UnaryOp *>(obj);
5408       return verifier.VerifyTable(ptr);
5409     }
5410     case OpParameter_MomentsParam: {
5411       auto ptr = reinterpret_cast<const MomentsParam *>(obj);
5412       return verifier.VerifyTable(ptr);
5413     }
5414     case OpParameter_RNNParam: {
5415       auto ptr = reinterpret_cast<const RNNParam *>(obj);
5416       return verifier.VerifyTable(ptr);
5417     }
5418     case OpParameter_BatchMatMulParam: {
5419       auto ptr = reinterpret_cast<const BatchMatMulParam *>(obj);
5420       return verifier.VerifyTable(ptr);
5421     }
5422     case OpParameter_QuantizedFloatParam: {
5423       auto ptr = reinterpret_cast<const QuantizedFloatParam *>(obj);
5424       return verifier.VerifyTable(ptr);
5425     }
5426     case OpParameter_DepthSpaceParam: {
5427       auto ptr = reinterpret_cast<const DepthSpaceParam *>(obj);
5428       return verifier.VerifyTable(ptr);
5429     }
5430     case OpParameter_EltwiseInt8: {
5431       auto ptr = reinterpret_cast<const EltwiseInt8 *>(obj);
5432       return verifier.VerifyTable(ptr);
5433     }
5434     case OpParameter_ReverseSequenceParam: {
5435       auto ptr = reinterpret_cast<const ReverseSequenceParam *>(obj);
5436       return verifier.VerifyTable(ptr);
5437     }
5438     case OpParameter_Extra: {
5439       auto ptr = reinterpret_cast<const Extra *>(obj);
5440       return verifier.VerifyTable(ptr);
5441     }
5442     case OpParameter_Pool3D: {
5443       auto ptr = reinterpret_cast<const Pool3D *>(obj);
5444       return verifier.VerifyTable(ptr);
5445     }
5446     case OpParameter_Convolution3D: {
5447       auto ptr = reinterpret_cast<const Convolution3D *>(obj);
5448       return verifier.VerifyTable(ptr);
5449     }
5450     case OpParameter_ELU: {
5451       auto ptr = reinterpret_cast<const ELU *>(obj);
5452       return verifier.VerifyTable(ptr);
5453     }
5454     case OpParameter_DetectionPostProcessParam: {
5455       auto ptr = reinterpret_cast<const DetectionPostProcessParam *>(obj);
5456       return verifier.VerifyTable(ptr);
5457     }
5458     case OpParameter_OneHotParam: {
5459       auto ptr = reinterpret_cast<const OneHotParam *>(obj);
5460       return verifier.VerifyTable(ptr);
5461     }
5462     case OpParameter_PadParam: {
5463       auto ptr = reinterpret_cast<const PadParam *>(obj);
5464       return verifier.VerifyTable(ptr);
5465     }
5466     case OpParameter_WhileParam: {
5467       auto ptr = reinterpret_cast<const WhileParam *>(obj);
5468       return verifier.VerifyTable(ptr);
5469     }
5470     case OpParameter_IfParam: {
5471       auto ptr = reinterpret_cast<const IfParam *>(obj);
5472       return verifier.VerifyTable(ptr);
5473     }
5474     case OpParameter_RandomUniform: {
5475       auto ptr = reinterpret_cast<const RandomUniform *>(obj);
5476       return verifier.VerifyTable(ptr);
5477     }
5478     case OpParameter_LayerNorm: {
5479       auto ptr = reinterpret_cast<const LayerNorm *>(obj);
5480       return verifier.VerifyTable(ptr);
5481     }
5482     case OpParameter_TensorArray: {
5483       auto ptr = reinterpret_cast<const TensorArray *>(obj);
5484       return verifier.VerifyTable(ptr);
5485     }
5486     case OpParameter_LSTMBlockCell: {
5487       auto ptr = reinterpret_cast<const LSTMBlockCell *>(obj);
5488       return verifier.VerifyTable(ptr);
5489     }
5490     case OpParameter_GridSample: {
5491       auto ptr = reinterpret_cast<const GridSample *>(obj);
5492       return verifier.VerifyTable(ptr);
5493     }
5494     case OpParameter_LoopParam: {
5495       auto ptr = reinterpret_cast<const LoopParam *>(obj);
5496       return verifier.VerifyTable(ptr);
5497     }
5498     default: return false;
5499   }
5500 }
5501 
5502 inline bool VerifyOpParameterVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types) {
5503   if (!values || !types) return !values && !types;
5504   if (values->size() != types->size()) return false;
5505   for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
5506     if (!VerifyOpParameter(
5507         verifier,  values->Get(i), types->GetEnum<OpParameter>(i))) {
5508       return false;
5509     }
5510   }
5511   return true;
5512 }
5513 
5514 inline void *OpParameterUnion::UnPack(const void *obj, OpParameter type, const flatbuffers::resolver_function_t *resolver) {
5515   switch (type) {
5516     case OpParameter_QuantizedAdd: {
5517       auto ptr = reinterpret_cast<const QuantizedAdd *>(obj);
5518       return ptr->UnPack(resolver);
5519     }
5520     case OpParameter_ArgMax: {
5521       auto ptr = reinterpret_cast<const ArgMax *>(obj);
5522       return ptr->UnPack(resolver);
5523     }
5524     case OpParameter_AsString: {
5525       auto ptr = reinterpret_cast<const AsString *>(obj);
5526       return ptr->UnPack(resolver);
5527     }
5528     case OpParameter_Axis: {
5529       auto ptr = reinterpret_cast<const Axis *>(obj);
5530       return ptr->UnPack(resolver);
5531     }
5532     case OpParameter_BatchNorm: {
5533       auto ptr = reinterpret_cast<const BatchNorm *>(obj);
5534       return ptr->UnPack(resolver);
5535     }
5536     case OpParameter_BinaryOp: {
5537       auto ptr = reinterpret_cast<const BinaryOp *>(obj);
5538       return ptr->UnPack(resolver);
5539     }
5540     case OpParameter_Blob: {
5541       auto ptr = reinterpret_cast<const Blob *>(obj);
5542       return ptr->UnPack(resolver);
5543     }
5544     case OpParameter_CastParam: {
5545       auto ptr = reinterpret_cast<const CastParam *>(obj);
5546       return ptr->UnPack(resolver);
5547     }
5548     case OpParameter_Convolution2D: {
5549       auto ptr = reinterpret_cast<const Convolution2D *>(obj);
5550       return ptr->UnPack(resolver);
5551     }
5552     case OpParameter_Crop: {
5553       auto ptr = reinterpret_cast<const Crop *>(obj);
5554       return ptr->UnPack(resolver);
5555     }
5556     case OpParameter_CropAndResize: {
5557       auto ptr = reinterpret_cast<const CropAndResize *>(obj);
5558       return ptr->UnPack(resolver);
5559     }
5560     case OpParameter_Dequantize: {
5561       auto ptr = reinterpret_cast<const Dequantize *>(obj);
5562       return ptr->UnPack(resolver);
5563     }
5564     case OpParameter_DetectionOutput: {
5565       auto ptr = reinterpret_cast<const DetectionOutput *>(obj);
5566       return ptr->UnPack(resolver);
5567     }
5568     case OpParameter_Eltwise: {
5569       auto ptr = reinterpret_cast<const Eltwise *>(obj);
5570       return ptr->UnPack(resolver);
5571     }
5572     case OpParameter_ExpandDims: {
5573       auto ptr = reinterpret_cast<const ExpandDims *>(obj);
5574       return ptr->UnPack(resolver);
5575     }
5576     case OpParameter_Fill: {
5577       auto ptr = reinterpret_cast<const Fill *>(obj);
5578       return ptr->UnPack(resolver);
5579     }
5580     case OpParameter_Flatten: {
5581       auto ptr = reinterpret_cast<const Flatten *>(obj);
5582       return ptr->UnPack(resolver);
5583     }
5584     case OpParameter_Gather: {
5585       auto ptr = reinterpret_cast<const Gather *>(obj);
5586       return ptr->UnPack(resolver);
5587     }
5588     case OpParameter_GatherV2: {
5589       auto ptr = reinterpret_cast<const GatherV2 *>(obj);
5590       return ptr->UnPack(resolver);
5591     }
5592     case OpParameter_InnerProduct: {
5593       auto ptr = reinterpret_cast<const InnerProduct *>(obj);
5594       return ptr->UnPack(resolver);
5595     }
5596     case OpParameter_Input: {
5597       auto ptr = reinterpret_cast<const Input *>(obj);
5598       return ptr->UnPack(resolver);
5599     }
5600     case OpParameter_Interp: {
5601       auto ptr = reinterpret_cast<const Interp *>(obj);
5602       return ptr->UnPack(resolver);
5603     }
5604     case OpParameter_LRN: {
5605       auto ptr = reinterpret_cast<const LRN *>(obj);
5606       return ptr->UnPack(resolver);
5607     }
5608     case OpParameter_LSTM: {
5609       auto ptr = reinterpret_cast<const LSTM *>(obj);
5610       return ptr->UnPack(resolver);
5611     }
5612     case OpParameter_MatMul: {
5613       auto ptr = reinterpret_cast<const MatMul *>(obj);
5614       return ptr->UnPack(resolver);
5615     }
5616     case OpParameter_NonMaxSuppressionV2: {
5617       auto ptr = reinterpret_cast<const NonMaxSuppressionV2 *>(obj);
5618       return ptr->UnPack(resolver);
5619     }
5620     case OpParameter_Normalize: {
5621       auto ptr = reinterpret_cast<const Normalize *>(obj);
5622       return ptr->UnPack(resolver);
5623     }
5624     case OpParameter_PackParam: {
5625       auto ptr = reinterpret_cast<const PackParam *>(obj);
5626       return ptr->UnPack(resolver);
5627     }
5628     case OpParameter_Permute: {
5629       auto ptr = reinterpret_cast<const Permute *>(obj);
5630       return ptr->UnPack(resolver);
5631     }
5632     case OpParameter_Plugin: {
5633       auto ptr = reinterpret_cast<const Plugin *>(obj);
5634       return ptr->UnPack(resolver);
5635     }
5636     case OpParameter_Pool: {
5637       auto ptr = reinterpret_cast<const Pool *>(obj);
5638       return ptr->UnPack(resolver);
5639     }
5640     case OpParameter_PRelu: {
5641       auto ptr = reinterpret_cast<const PRelu *>(obj);
5642       return ptr->UnPack(resolver);
5643     }
5644     case OpParameter_PriorBox: {
5645       auto ptr = reinterpret_cast<const PriorBox *>(obj);
5646       return ptr->UnPack(resolver);
5647     }
5648     case OpParameter_Proposal: {
5649       auto ptr = reinterpret_cast<const Proposal *>(obj);
5650       return ptr->UnPack(resolver);
5651     }
5652     case OpParameter_QuantizedAvgPool: {
5653       auto ptr = reinterpret_cast<const QuantizedAvgPool *>(obj);
5654       return ptr->UnPack(resolver);
5655     }
5656     case OpParameter_QuantizedBiasAdd: {
5657       auto ptr = reinterpret_cast<const QuantizedBiasAdd *>(obj);
5658       return ptr->UnPack(resolver);
5659     }
5660     case OpParameter_QuantizedConcat: {
5661       auto ptr = reinterpret_cast<const QuantizedConcat *>(obj);
5662       return ptr->UnPack(resolver);
5663     }
5664     case OpParameter_QuantizedLogistic: {
5665       auto ptr = reinterpret_cast<const QuantizedLogistic *>(obj);
5666       return ptr->UnPack(resolver);
5667     }
5668     case OpParameter_QuantizedMatMul: {
5669       auto ptr = reinterpret_cast<const QuantizedMatMul *>(obj);
5670       return ptr->UnPack(resolver);
5671     }
5672     case OpParameter_QuantizedMaxPool: {
5673       auto ptr = reinterpret_cast<const QuantizedMaxPool *>(obj);
5674       return ptr->UnPack(resolver);
5675     }
5676     case OpParameter_QuantizedRelu: {
5677       auto ptr = reinterpret_cast<const QuantizedRelu *>(obj);
5678       return ptr->UnPack(resolver);
5679     }
5680     case OpParameter_QuantizedRelu6: {
5681       auto ptr = reinterpret_cast<const QuantizedRelu6 *>(obj);
5682       return ptr->UnPack(resolver);
5683     }
5684     case OpParameter_QuantizedReshape: {
5685       auto ptr = reinterpret_cast<const QuantizedReshape *>(obj);
5686       return ptr->UnPack(resolver);
5687     }
5688     case OpParameter_QuantizedSoftmax: {
5689       auto ptr = reinterpret_cast<const QuantizedSoftmax *>(obj);
5690       return ptr->UnPack(resolver);
5691     }
5692     case OpParameter_QuantizeMaxMin: {
5693       auto ptr = reinterpret_cast<const QuantizeMaxMin *>(obj);
5694       return ptr->UnPack(resolver);
5695     }
5696     case OpParameter_QuantizeV2: {
5697       auto ptr = reinterpret_cast<const QuantizeV2 *>(obj);
5698       return ptr->UnPack(resolver);
5699     }
5700     case OpParameter_Range: {
5701       auto ptr = reinterpret_cast<const Range *>(obj);
5702       return ptr->UnPack(resolver);
5703     }
5704     case OpParameter_Rank: {
5705       auto ptr = reinterpret_cast<const Rank *>(obj);
5706       return ptr->UnPack(resolver);
5707     }
5708     case OpParameter_ReduceJoin: {
5709       auto ptr = reinterpret_cast<const ReduceJoin *>(obj);
5710       return ptr->UnPack(resolver);
5711     }
5712     case OpParameter_ReductionParam: {
5713       auto ptr = reinterpret_cast<const ReductionParam *>(obj);
5714       return ptr->UnPack(resolver);
5715     }
5716     case OpParameter_Relu: {
5717       auto ptr = reinterpret_cast<const Relu *>(obj);
5718       return ptr->UnPack(resolver);
5719     }
5720     case OpParameter_Relu6: {
5721       auto ptr = reinterpret_cast<const Relu6 *>(obj);
5722       return ptr->UnPack(resolver);
5723     }
5724     case OpParameter_RequantizationRange: {
5725       auto ptr = reinterpret_cast<const RequantizationRange *>(obj);
5726       return ptr->UnPack(resolver);
5727     }
5728     case OpParameter_Requantize: {
5729       auto ptr = reinterpret_cast<const Requantize *>(obj);
5730       return ptr->UnPack(resolver);
5731     }
5732     case OpParameter_Reshape: {
5733       auto ptr = reinterpret_cast<const Reshape *>(obj);
5734       return ptr->UnPack(resolver);
5735     }
5736     case OpParameter_Resize: {
5737       auto ptr = reinterpret_cast<const Resize *>(obj);
5738       return ptr->UnPack(resolver);
5739     }
5740     case OpParameter_RoiPooling: {
5741       auto ptr = reinterpret_cast<const RoiPooling *>(obj);
5742       return ptr->UnPack(resolver);
5743     }
5744     case OpParameter_Scale: {
5745       auto ptr = reinterpret_cast<const Scale *>(obj);
5746       return ptr->UnPack(resolver);
5747     }
5748     case OpParameter_Selu: {
5749       auto ptr = reinterpret_cast<const Selu *>(obj);
5750       return ptr->UnPack(resolver);
5751     }
5752     case OpParameter_Size: {
5753       auto ptr = reinterpret_cast<const Size *>(obj);
5754       return ptr->UnPack(resolver);
5755     }
5756     case OpParameter_Slice: {
5757       auto ptr = reinterpret_cast<const Slice *>(obj);
5758       return ptr->UnPack(resolver);
5759     }
5760     case OpParameter_SliceTf: {
5761       auto ptr = reinterpret_cast<const SliceTf *>(obj);
5762       return ptr->UnPack(resolver);
5763     }
5764     case OpParameter_SpaceBatch: {
5765       auto ptr = reinterpret_cast<const SpaceBatch *>(obj);
5766       return ptr->UnPack(resolver);
5767     }
5768     case OpParameter_SqueezeParam: {
5769       auto ptr = reinterpret_cast<const SqueezeParam *>(obj);
5770       return ptr->UnPack(resolver);
5771     }
5772     case OpParameter_StridedSliceParam: {
5773       auto ptr = reinterpret_cast<const StridedSliceParam *>(obj);
5774       return ptr->UnPack(resolver);
5775     }
5776     case OpParameter_TensorConvertInfo: {
5777       auto ptr = reinterpret_cast<const TensorConvertInfo *>(obj);
5778       return ptr->UnPack(resolver);
5779     }
5780     case OpParameter_TfQuantizedConv2D: {
5781       auto ptr = reinterpret_cast<const TfQuantizedConv2D *>(obj);
5782       return ptr->UnPack(resolver);
5783     }
5784     case OpParameter_TopKV2: {
5785       auto ptr = reinterpret_cast<const TopKV2 *>(obj);
5786       return ptr->UnPack(resolver);
5787     }
5788     case OpParameter_Transpose: {
5789       auto ptr = reinterpret_cast<const Transpose *>(obj);
5790       return ptr->UnPack(resolver);
5791     }
5792     case OpParameter_UnaryOp: {
5793       auto ptr = reinterpret_cast<const UnaryOp *>(obj);
5794       return ptr->UnPack(resolver);
5795     }
5796     case OpParameter_MomentsParam: {
5797       auto ptr = reinterpret_cast<const MomentsParam *>(obj);
5798       return ptr->UnPack(resolver);
5799     }
5800     case OpParameter_RNNParam: {
5801       auto ptr = reinterpret_cast<const RNNParam *>(obj);
5802       return ptr->UnPack(resolver);
5803     }
5804     case OpParameter_BatchMatMulParam: {
5805       auto ptr = reinterpret_cast<const BatchMatMulParam *>(obj);
5806       return ptr->UnPack(resolver);
5807     }
5808     case OpParameter_QuantizedFloatParam: {
5809       auto ptr = reinterpret_cast<const QuantizedFloatParam *>(obj);
5810       return ptr->UnPack(resolver);
5811     }
5812     case OpParameter_DepthSpaceParam: {
5813       auto ptr = reinterpret_cast<const DepthSpaceParam *>(obj);
5814       return ptr->UnPack(resolver);
5815     }
5816     case OpParameter_EltwiseInt8: {
5817       auto ptr = reinterpret_cast<const EltwiseInt8 *>(obj);
5818       return ptr->UnPack(resolver);
5819     }
5820     case OpParameter_ReverseSequenceParam: {
5821       auto ptr = reinterpret_cast<const ReverseSequenceParam *>(obj);
5822       return ptr->UnPack(resolver);
5823     }
5824     case OpParameter_Extra: {
5825       auto ptr = reinterpret_cast<const Extra *>(obj);
5826       return ptr->UnPack(resolver);
5827     }
5828     case OpParameter_Pool3D: {
5829       auto ptr = reinterpret_cast<const Pool3D *>(obj);
5830       return ptr->UnPack(resolver);
5831     }
5832     case OpParameter_Convolution3D: {
5833       auto ptr = reinterpret_cast<const Convolution3D *>(obj);
5834       return ptr->UnPack(resolver);
5835     }
5836     case OpParameter_ELU: {
5837       auto ptr = reinterpret_cast<const ELU *>(obj);
5838       return ptr->UnPack(resolver);
5839     }
5840     case OpParameter_DetectionPostProcessParam: {
5841       auto ptr = reinterpret_cast<const DetectionPostProcessParam *>(obj);
5842       return ptr->UnPack(resolver);
5843     }
5844     case OpParameter_OneHotParam: {
5845       auto ptr = reinterpret_cast<const OneHotParam *>(obj);
5846       return ptr->UnPack(resolver);
5847     }
5848     case OpParameter_PadParam: {
5849       auto ptr = reinterpret_cast<const PadParam *>(obj);
5850       return ptr->UnPack(resolver);
5851     }
5852     case OpParameter_WhileParam: {
5853       auto ptr = reinterpret_cast<const WhileParam *>(obj);
5854       return ptr->UnPack(resolver);
5855     }
5856     case OpParameter_IfParam: {
5857       auto ptr = reinterpret_cast<const IfParam *>(obj);
5858       return ptr->UnPack(resolver);
5859     }
5860     case OpParameter_RandomUniform: {
5861       auto ptr = reinterpret_cast<const RandomUniform *>(obj);
5862       return ptr->UnPack(resolver);
5863     }
5864     case OpParameter_LayerNorm: {
5865       auto ptr = reinterpret_cast<const LayerNorm *>(obj);
5866       return ptr->UnPack(resolver);
5867     }
5868     case OpParameter_TensorArray: {
5869       auto ptr = reinterpret_cast<const TensorArray *>(obj);
5870       return ptr->UnPack(resolver);
5871     }
5872     case OpParameter_LSTMBlockCell: {
5873       auto ptr = reinterpret_cast<const LSTMBlockCell *>(obj);
5874       return ptr->UnPack(resolver);
5875     }
5876     case OpParameter_GridSample: {
5877       auto ptr = reinterpret_cast<const GridSample *>(obj);
5878       return ptr->UnPack(resolver);
5879     }
5880     case OpParameter_LoopParam: {
5881       auto ptr = reinterpret_cast<const LoopParam *>(obj);
5882       return ptr->UnPack(resolver);
5883     }
5884     default: return nullptr;
5885   }
5886 }
5887 
5888 inline flatbuffers::Offset<void> OpParameterUnion::Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher) const {
5889   switch (type) {
5890     case OpParameter_QuantizedAdd: {
5891       auto ptr = reinterpret_cast<const QuantizedAddT *>(value);
5892       return CreateQuantizedAdd(_fbb, ptr, _rehasher).Union();
5893     }
5894     case OpParameter_ArgMax: {
5895       auto ptr = reinterpret_cast<const ArgMaxT *>(value);
5896       return CreateArgMax(_fbb, ptr, _rehasher).Union();
5897     }
5898     case OpParameter_AsString: {
5899       auto ptr = reinterpret_cast<const AsStringT *>(value);
5900       return CreateAsString(_fbb, ptr, _rehasher).Union();
5901     }
5902     case OpParameter_Axis: {
5903       auto ptr = reinterpret_cast<const AxisT *>(value);
5904       return CreateAxis(_fbb, ptr, _rehasher).Union();
5905     }
5906     case OpParameter_BatchNorm: {
5907       auto ptr = reinterpret_cast<const BatchNormT *>(value);
5908       return CreateBatchNorm(_fbb, ptr, _rehasher).Union();
5909     }
5910     case OpParameter_BinaryOp: {
5911       auto ptr = reinterpret_cast<const BinaryOpT *>(value);
5912       return CreateBinaryOp(_fbb, ptr, _rehasher).Union();
5913     }
5914     case OpParameter_Blob: {
5915       auto ptr = reinterpret_cast<const BlobT *>(value);
5916       return CreateBlob(_fbb, ptr, _rehasher).Union();
5917     }
5918     case OpParameter_CastParam: {
5919       auto ptr = reinterpret_cast<const CastParamT *>(value);
5920       return CreateCastParam(_fbb, ptr, _rehasher).Union();
5921     }
5922     case OpParameter_Convolution2D: {
5923       auto ptr = reinterpret_cast<const Convolution2DT *>(value);
5924       return CreateConvolution2D(_fbb, ptr, _rehasher).Union();
5925     }
5926     case OpParameter_Crop: {
5927       auto ptr = reinterpret_cast<const CropT *>(value);
5928       return CreateCrop(_fbb, ptr, _rehasher).Union();
5929     }
5930     case OpParameter_CropAndResize: {
5931       auto ptr = reinterpret_cast<const CropAndResizeT *>(value);
5932       return CreateCropAndResize(_fbb, ptr, _rehasher).Union();
5933     }
5934     case OpParameter_Dequantize: {
5935       auto ptr = reinterpret_cast<const DequantizeT *>(value);
5936       return CreateDequantize(_fbb, ptr, _rehasher).Union();
5937     }
5938     case OpParameter_DetectionOutput: {
5939       auto ptr = reinterpret_cast<const DetectionOutputT *>(value);
5940       return CreateDetectionOutput(_fbb, ptr, _rehasher).Union();
5941     }
5942     case OpParameter_Eltwise: {
5943       auto ptr = reinterpret_cast<const EltwiseT *>(value);
5944       return CreateEltwise(_fbb, ptr, _rehasher).Union();
5945     }
5946     case OpParameter_ExpandDims: {
5947       auto ptr = reinterpret_cast<const ExpandDimsT *>(value);
5948       return CreateExpandDims(_fbb, ptr, _rehasher).Union();
5949     }
5950     case OpParameter_Fill: {
5951       auto ptr = reinterpret_cast<const FillT *>(value);
5952       return CreateFill(_fbb, ptr, _rehasher).Union();
5953     }
5954     case OpParameter_Flatten: {
5955       auto ptr = reinterpret_cast<const FlattenT *>(value);
5956       return CreateFlatten(_fbb, ptr, _rehasher).Union();
5957     }
5958     case OpParameter_Gather: {
5959       auto ptr = reinterpret_cast<const GatherT *>(value);
5960       return CreateGather(_fbb, ptr, _rehasher).Union();
5961     }
5962     case OpParameter_GatherV2: {
5963       auto ptr = reinterpret_cast<const GatherV2T *>(value);
5964       return CreateGatherV2(_fbb, ptr, _rehasher).Union();
5965     }
5966     case OpParameter_InnerProduct: {
5967       auto ptr = reinterpret_cast<const InnerProductT *>(value);
5968       return CreateInnerProduct(_fbb, ptr, _rehasher).Union();
5969     }
5970     case OpParameter_Input: {
5971       auto ptr = reinterpret_cast<const InputT *>(value);
5972       return CreateInput(_fbb, ptr, _rehasher).Union();
5973     }
5974     case OpParameter_Interp: {
5975       auto ptr = reinterpret_cast<const InterpT *>(value);
5976       return CreateInterp(_fbb, ptr, _rehasher).Union();
5977     }
5978     case OpParameter_LRN: {
5979       auto ptr = reinterpret_cast<const LRNT *>(value);
5980       return CreateLRN(_fbb, ptr, _rehasher).Union();
5981     }
5982     case OpParameter_LSTM: {
5983       auto ptr = reinterpret_cast<const LSTMT *>(value);
5984       return CreateLSTM(_fbb, ptr, _rehasher).Union();
5985     }
5986     case OpParameter_MatMul: {
5987       auto ptr = reinterpret_cast<const MatMulT *>(value);
5988       return CreateMatMul(_fbb, ptr, _rehasher).Union();
5989     }
5990     case OpParameter_NonMaxSuppressionV2: {
5991       auto ptr = reinterpret_cast<const NonMaxSuppressionV2T *>(value);
5992       return CreateNonMaxSuppressionV2(_fbb, ptr, _rehasher).Union();
5993     }
5994     case OpParameter_Normalize: {
5995       auto ptr = reinterpret_cast<const NormalizeT *>(value);
5996       return CreateNormalize(_fbb, ptr, _rehasher).Union();
5997     }
5998     case OpParameter_PackParam: {
5999       auto ptr = reinterpret_cast<const PackParamT *>(value);
6000       return CreatePackParam(_fbb, ptr, _rehasher).Union();
6001     }
6002     case OpParameter_Permute: {
6003       auto ptr = reinterpret_cast<const PermuteT *>(value);
6004       return CreatePermute(_fbb, ptr, _rehasher).Union();
6005     }
6006     case OpParameter_Plugin: {
6007       auto ptr = reinterpret_cast<const PluginT *>(value);
6008       return CreatePlugin(_fbb, ptr, _rehasher).Union();
6009     }
6010     case OpParameter_Pool: {
6011       auto ptr = reinterpret_cast<const PoolT *>(value);
6012       return CreatePool(_fbb, ptr, _rehasher).Union();
6013     }
6014     case OpParameter_PRelu: {
6015       auto ptr = reinterpret_cast<const PReluT *>(value);
6016       return CreatePRelu(_fbb, ptr, _rehasher).Union();
6017     }
6018     case OpParameter_PriorBox: {
6019       auto ptr = reinterpret_cast<const PriorBoxT *>(value);
6020       return CreatePriorBox(_fbb, ptr, _rehasher).Union();
6021     }
6022     case OpParameter_Proposal: {
6023       auto ptr = reinterpret_cast<const ProposalT *>(value);
6024       return CreateProposal(_fbb, ptr, _rehasher).Union();
6025     }
6026     case OpParameter_QuantizedAvgPool: {
6027       auto ptr = reinterpret_cast<const QuantizedAvgPoolT *>(value);
6028       return CreateQuantizedAvgPool(_fbb, ptr, _rehasher).Union();
6029     }
6030     case OpParameter_QuantizedBiasAdd: {
6031       auto ptr = reinterpret_cast<const QuantizedBiasAddT *>(value);
6032       return CreateQuantizedBiasAdd(_fbb, ptr, _rehasher).Union();
6033     }
6034     case OpParameter_QuantizedConcat: {
6035       auto ptr = reinterpret_cast<const QuantizedConcatT *>(value);
6036       return CreateQuantizedConcat(_fbb, ptr, _rehasher).Union();
6037     }
6038     case OpParameter_QuantizedLogistic: {
6039       auto ptr = reinterpret_cast<const QuantizedLogisticT *>(value);
6040       return CreateQuantizedLogistic(_fbb, ptr, _rehasher).Union();
6041     }
6042     case OpParameter_QuantizedMatMul: {
6043       auto ptr = reinterpret_cast<const QuantizedMatMulT *>(value);
6044       return CreateQuantizedMatMul(_fbb, ptr, _rehasher).Union();
6045     }
6046     case OpParameter_QuantizedMaxPool: {
6047       auto ptr = reinterpret_cast<const QuantizedMaxPoolT *>(value);
6048       return CreateQuantizedMaxPool(_fbb, ptr, _rehasher).Union();
6049     }
6050     case OpParameter_QuantizedRelu: {
6051       auto ptr = reinterpret_cast<const QuantizedReluT *>(value);
6052       return CreateQuantizedRelu(_fbb, ptr, _rehasher).Union();
6053     }
6054     case OpParameter_QuantizedRelu6: {
6055       auto ptr = reinterpret_cast<const QuantizedRelu6T *>(value);
6056       return CreateQuantizedRelu6(_fbb, ptr, _rehasher).Union();
6057     }
6058     case OpParameter_QuantizedReshape: {
6059       auto ptr = reinterpret_cast<const QuantizedReshapeT *>(value);
6060       return CreateQuantizedReshape(_fbb, ptr, _rehasher).Union();
6061     }
6062     case OpParameter_QuantizedSoftmax: {
6063       auto ptr = reinterpret_cast<const QuantizedSoftmaxT *>(value);
6064       return CreateQuantizedSoftmax(_fbb, ptr, _rehasher).Union();
6065     }
6066     case OpParameter_QuantizeMaxMin: {
6067       auto ptr = reinterpret_cast<const QuantizeMaxMinT *>(value);
6068       return CreateQuantizeMaxMin(_fbb, ptr, _rehasher).Union();
6069     }
6070     case OpParameter_QuantizeV2: {
6071       auto ptr = reinterpret_cast<const QuantizeV2T *>(value);
6072       return CreateQuantizeV2(_fbb, ptr, _rehasher).Union();
6073     }
6074     case OpParameter_Range: {
6075       auto ptr = reinterpret_cast<const RangeT *>(value);
6076       return CreateRange(_fbb, ptr, _rehasher).Union();
6077     }
6078     case OpParameter_Rank: {
6079       auto ptr = reinterpret_cast<const RankT *>(value);
6080       return CreateRank(_fbb, ptr, _rehasher).Union();
6081     }
6082     case OpParameter_ReduceJoin: {
6083       auto ptr = reinterpret_cast<const ReduceJoinT *>(value);
6084       return CreateReduceJoin(_fbb, ptr, _rehasher).Union();
6085     }
6086     case OpParameter_ReductionParam: {
6087       auto ptr = reinterpret_cast<const ReductionParamT *>(value);
6088       return CreateReductionParam(_fbb, ptr, _rehasher).Union();
6089     }
6090     case OpParameter_Relu: {
6091       auto ptr = reinterpret_cast<const ReluT *>(value);
6092       return CreateRelu(_fbb, ptr, _rehasher).Union();
6093     }
6094     case OpParameter_Relu6: {
6095       auto ptr = reinterpret_cast<const Relu6T *>(value);
6096       return CreateRelu6(_fbb, ptr, _rehasher).Union();
6097     }
6098     case OpParameter_RequantizationRange: {
6099       auto ptr = reinterpret_cast<const RequantizationRangeT *>(value);
6100       return CreateRequantizationRange(_fbb, ptr, _rehasher).Union();
6101     }
6102     case OpParameter_Requantize: {
6103       auto ptr = reinterpret_cast<const RequantizeT *>(value);
6104       return CreateRequantize(_fbb, ptr, _rehasher).Union();
6105     }
6106     case OpParameter_Reshape: {
6107       auto ptr = reinterpret_cast<const ReshapeT *>(value);
6108       return CreateReshape(_fbb, ptr, _rehasher).Union();
6109     }
6110     case OpParameter_Resize: {
6111       auto ptr = reinterpret_cast<const ResizeT *>(value);
6112       return CreateResize(_fbb, ptr, _rehasher).Union();
6113     }
6114     case OpParameter_RoiPooling: {
6115       auto ptr = reinterpret_cast<const RoiPoolingT *>(value);
6116       return CreateRoiPooling(_fbb, ptr, _rehasher).Union();
6117     }
6118     case OpParameter_Scale: {
6119       auto ptr = reinterpret_cast<const ScaleT *>(value);
6120       return CreateScale(_fbb, ptr, _rehasher).Union();
6121     }
6122     case OpParameter_Selu: {
6123       auto ptr = reinterpret_cast<const SeluT *>(value);
6124       return CreateSelu(_fbb, ptr, _rehasher).Union();
6125     }
6126     case OpParameter_Size: {
6127       auto ptr = reinterpret_cast<const SizeT *>(value);
6128       return CreateSize(_fbb, ptr, _rehasher).Union();
6129     }
6130     case OpParameter_Slice: {
6131       auto ptr = reinterpret_cast<const SliceT *>(value);
6132       return CreateSlice(_fbb, ptr, _rehasher).Union();
6133     }
6134     case OpParameter_SliceTf: {
6135       auto ptr = reinterpret_cast<const SliceTfT *>(value);
6136       return CreateSliceTf(_fbb, ptr, _rehasher).Union();
6137     }
6138     case OpParameter_SpaceBatch: {
6139       auto ptr = reinterpret_cast<const SpaceBatchT *>(value);
6140       return CreateSpaceBatch(_fbb, ptr, _rehasher).Union();
6141     }
6142     case OpParameter_SqueezeParam: {
6143       auto ptr = reinterpret_cast<const SqueezeParamT *>(value);
6144       return CreateSqueezeParam(_fbb, ptr, _rehasher).Union();
6145     }
6146     case OpParameter_StridedSliceParam: {
6147       auto ptr = reinterpret_cast<const StridedSliceParamT *>(value);
6148       return CreateStridedSliceParam(_fbb, ptr, _rehasher).Union();
6149     }
6150     case OpParameter_TensorConvertInfo: {
6151       auto ptr = reinterpret_cast<const TensorConvertInfoT *>(value);
6152       return CreateTensorConvertInfo(_fbb, ptr, _rehasher).Union();
6153     }
6154     case OpParameter_TfQuantizedConv2D: {
6155       auto ptr = reinterpret_cast<const TfQuantizedConv2DT *>(value);
6156       return CreateTfQuantizedConv2D(_fbb, ptr, _rehasher).Union();
6157     }
6158     case OpParameter_TopKV2: {
6159       auto ptr = reinterpret_cast<const TopKV2T *>(value);
6160       return CreateTopKV2(_fbb, ptr, _rehasher).Union();
6161     }
6162     case OpParameter_Transpose: {
6163       auto ptr = reinterpret_cast<const TransposeT *>(value);
6164       return CreateTranspose(_fbb, ptr, _rehasher).Union();
6165     }
6166     case OpParameter_UnaryOp: {
6167       auto ptr = reinterpret_cast<const UnaryOpT *>(value);
6168       return CreateUnaryOp(_fbb, ptr, _rehasher).Union();
6169     }
6170     case OpParameter_MomentsParam: {
6171       auto ptr = reinterpret_cast<const MomentsParamT *>(value);
6172       return CreateMomentsParam(_fbb, ptr, _rehasher).Union();
6173     }
6174     case OpParameter_RNNParam: {
6175       auto ptr = reinterpret_cast<const RNNParamT *>(value);
6176       return CreateRNNParam(_fbb, ptr, _rehasher).Union();
6177     }
6178     case OpParameter_BatchMatMulParam: {
6179       auto ptr = reinterpret_cast<const BatchMatMulParamT *>(value);
6180       return CreateBatchMatMulParam(_fbb, ptr, _rehasher).Union();
6181     }
6182     case OpParameter_QuantizedFloatParam: {
6183       auto ptr = reinterpret_cast<const QuantizedFloatParamT *>(value);
6184       return CreateQuantizedFloatParam(_fbb, ptr, _rehasher).Union();
6185     }
6186     case OpParameter_DepthSpaceParam: {
6187       auto ptr = reinterpret_cast<const DepthSpaceParamT *>(value);
6188       return CreateDepthSpaceParam(_fbb, ptr, _rehasher).Union();
6189     }
6190     case OpParameter_EltwiseInt8: {
6191       auto ptr = reinterpret_cast<const EltwiseInt8T *>(value);
6192       return CreateEltwiseInt8(_fbb, ptr, _rehasher).Union();
6193     }
6194     case OpParameter_ReverseSequenceParam: {
6195       auto ptr = reinterpret_cast<const ReverseSequenceParamT *>(value);
6196       return CreateReverseSequenceParam(_fbb, ptr, _rehasher).Union();
6197     }
6198     case OpParameter_Extra: {
6199       auto ptr = reinterpret_cast<const ExtraT *>(value);
6200       return CreateExtra(_fbb, ptr, _rehasher).Union();
6201     }
6202     case OpParameter_Pool3D: {
6203       auto ptr = reinterpret_cast<const Pool3DT *>(value);
6204       return CreatePool3D(_fbb, ptr, _rehasher).Union();
6205     }
6206     case OpParameter_Convolution3D: {
6207       auto ptr = reinterpret_cast<const Convolution3DT *>(value);
6208       return CreateConvolution3D(_fbb, ptr, _rehasher).Union();
6209     }
6210     case OpParameter_ELU: {
6211       auto ptr = reinterpret_cast<const ELUT *>(value);
6212       return CreateELU(_fbb, ptr, _rehasher).Union();
6213     }
6214     case OpParameter_DetectionPostProcessParam: {
6215       auto ptr = reinterpret_cast<const DetectionPostProcessParamT *>(value);
6216       return CreateDetectionPostProcessParam(_fbb, ptr, _rehasher).Union();
6217     }
6218     case OpParameter_OneHotParam: {
6219       auto ptr = reinterpret_cast<const OneHotParamT *>(value);
6220       return CreateOneHotParam(_fbb, ptr, _rehasher).Union();
6221     }
6222     case OpParameter_PadParam: {
6223       auto ptr = reinterpret_cast<const PadParamT *>(value);
6224       return CreatePadParam(_fbb, ptr, _rehasher).Union();
6225     }
6226     case OpParameter_WhileParam: {
6227       auto ptr = reinterpret_cast<const WhileParamT *>(value);
6228       return CreateWhileParam(_fbb, ptr, _rehasher).Union();
6229     }
6230     case OpParameter_IfParam: {
6231       auto ptr = reinterpret_cast<const IfParamT *>(value);
6232       return CreateIfParam(_fbb, ptr, _rehasher).Union();
6233     }
6234     case OpParameter_RandomUniform: {
6235       auto ptr = reinterpret_cast<const RandomUniformT *>(value);
6236       return CreateRandomUniform(_fbb, ptr, _rehasher).Union();
6237     }
6238     case OpParameter_LayerNorm: {
6239       auto ptr = reinterpret_cast<const LayerNormT *>(value);
6240       return CreateLayerNorm(_fbb, ptr, _rehasher).Union();
6241     }
6242     case OpParameter_TensorArray: {
6243       auto ptr = reinterpret_cast<const TensorArrayT *>(value);
6244       return CreateTensorArray(_fbb, ptr, _rehasher).Union();
6245     }
6246     case OpParameter_LSTMBlockCell: {
6247       auto ptr = reinterpret_cast<const LSTMBlockCellT *>(value);
6248       return CreateLSTMBlockCell(_fbb, ptr, _rehasher).Union();
6249     }
6250     case OpParameter_GridSample: {
6251       auto ptr = reinterpret_cast<const GridSampleT *>(value);
6252       return CreateGridSample(_fbb, ptr, _rehasher).Union();
6253     }
6254     case OpParameter_LoopParam: {
6255       auto ptr = reinterpret_cast<const LoopParamT *>(value);
6256       return CreateLoopParam(_fbb, ptr, _rehasher).Union();
6257     }
6258     default: return 0;
6259   }
6260 }
6261 
6262 inline OpParameterUnion::OpParameterUnion(const OpParameterUnion &u) FLATBUFFERS_NOEXCEPT : type(u.type), value(nullptr) {
6263   switch (type) {
6264     case OpParameter_QuantizedAdd: {
6265       FLATBUFFERS_ASSERT(false);  // QuantizedAddT not copyable.
6266       break;
6267     }
6268     case OpParameter_ArgMax: {
6269       value = new ArgMaxT(*reinterpret_cast<ArgMaxT *>(u.value));
6270       break;
6271     }
6272     case OpParameter_AsString: {
6273       value = new AsStringT(*reinterpret_cast<AsStringT *>(u.value));
6274       break;
6275     }
6276     case OpParameter_Axis: {
6277       value = new AxisT(*reinterpret_cast<AxisT *>(u.value));
6278       break;
6279     }
6280     case OpParameter_BatchNorm: {
6281       value = new BatchNormT(*reinterpret_cast<BatchNormT *>(u.value));
6282       break;
6283     }
6284     case OpParameter_BinaryOp: {
6285       value = new BinaryOpT(*reinterpret_cast<BinaryOpT *>(u.value));
6286       break;
6287     }
6288     case OpParameter_Blob: {
6289       value = new BlobT(*reinterpret_cast<BlobT *>(u.value));
6290       break;
6291     }
6292     case OpParameter_CastParam: {
6293       value = new CastParamT(*reinterpret_cast<CastParamT *>(u.value));
6294       break;
6295     }
6296     case OpParameter_Convolution2D: {
6297       FLATBUFFERS_ASSERT(false);  // Convolution2DT not copyable.
6298       break;
6299     }
6300     case OpParameter_Crop: {
6301       value = new CropT(*reinterpret_cast<CropT *>(u.value));
6302       break;
6303     }
6304     case OpParameter_CropAndResize: {
6305       value = new CropAndResizeT(*reinterpret_cast<CropAndResizeT *>(u.value));
6306       break;
6307     }
6308     case OpParameter_Dequantize: {
6309       FLATBUFFERS_ASSERT(false);  // DequantizeT not copyable.
6310       break;
6311     }
6312     case OpParameter_DetectionOutput: {
6313       value = new DetectionOutputT(*reinterpret_cast<DetectionOutputT *>(u.value));
6314       break;
6315     }
6316     case OpParameter_Eltwise: {
6317       value = new EltwiseT(*reinterpret_cast<EltwiseT *>(u.value));
6318       break;
6319     }
6320     case OpParameter_ExpandDims: {
6321       value = new ExpandDimsT(*reinterpret_cast<ExpandDimsT *>(u.value));
6322       break;
6323     }
6324     case OpParameter_Fill: {
6325       value = new FillT(*reinterpret_cast<FillT *>(u.value));
6326       break;
6327     }
6328     case OpParameter_Flatten: {
6329       value = new FlattenT(*reinterpret_cast<FlattenT *>(u.value));
6330       break;
6331     }
6332     case OpParameter_Gather: {
6333       value = new GatherT(*reinterpret_cast<GatherT *>(u.value));
6334       break;
6335     }
6336     case OpParameter_GatherV2: {
6337       value = new GatherV2T(*reinterpret_cast<GatherV2T *>(u.value));
6338       break;
6339     }
6340     case OpParameter_InnerProduct: {
6341       FLATBUFFERS_ASSERT(false);  // InnerProductT not copyable.
6342       break;
6343     }
6344     case OpParameter_Input: {
6345       value = new InputT(*reinterpret_cast<InputT *>(u.value));
6346       break;
6347     }
6348     case OpParameter_Interp: {
6349       value = new InterpT(*reinterpret_cast<InterpT *>(u.value));
6350       break;
6351     }
6352     case OpParameter_LRN: {
6353       value = new LRNT(*reinterpret_cast<LRNT *>(u.value));
6354       break;
6355     }
6356     case OpParameter_LSTM: {
6357       FLATBUFFERS_ASSERT(false);  // LSTMT not copyable.
6358       break;
6359     }
6360     case OpParameter_MatMul: {
6361       value = new MatMulT(*reinterpret_cast<MatMulT *>(u.value));
6362       break;
6363     }
6364     case OpParameter_NonMaxSuppressionV2: {
6365       value = new NonMaxSuppressionV2T(*reinterpret_cast<NonMaxSuppressionV2T *>(u.value));
6366       break;
6367     }
6368     case OpParameter_Normalize: {
6369       value = new NormalizeT(*reinterpret_cast<NormalizeT *>(u.value));
6370       break;
6371     }
6372     case OpParameter_PackParam: {
6373       value = new PackParamT(*reinterpret_cast<PackParamT *>(u.value));
6374       break;
6375     }
6376     case OpParameter_Permute: {
6377       value = new PermuteT(*reinterpret_cast<PermuteT *>(u.value));
6378       break;
6379     }
6380     case OpParameter_Plugin: {
6381       FLATBUFFERS_ASSERT(false);  // PluginT not copyable.
6382       break;
6383     }
6384     case OpParameter_Pool: {
6385       value = new PoolT(*reinterpret_cast<PoolT *>(u.value));
6386       break;
6387     }
6388     case OpParameter_PRelu: {
6389       value = new PReluT(*reinterpret_cast<PReluT *>(u.value));
6390       break;
6391     }
6392     case OpParameter_PriorBox: {
6393       value = new PriorBoxT(*reinterpret_cast<PriorBoxT *>(u.value));
6394       break;
6395     }
6396     case OpParameter_Proposal: {
6397       FLATBUFFERS_ASSERT(false);  // ProposalT not copyable.
6398       break;
6399     }
6400     case OpParameter_QuantizedAvgPool: {
6401       value = new QuantizedAvgPoolT(*reinterpret_cast<QuantizedAvgPoolT *>(u.value));
6402       break;
6403     }
6404     case OpParameter_QuantizedBiasAdd: {
6405       value = new QuantizedBiasAddT(*reinterpret_cast<QuantizedBiasAddT *>(u.value));
6406       break;
6407     }
6408     case OpParameter_QuantizedConcat: {
6409       FLATBUFFERS_ASSERT(false);  // QuantizedConcatT not copyable.
6410       break;
6411     }
6412     case OpParameter_QuantizedLogistic: {
6413       FLATBUFFERS_ASSERT(false);  // QuantizedLogisticT not copyable.
6414       break;
6415     }
6416     case OpParameter_QuantizedMatMul: {
6417       value = new QuantizedMatMulT(*reinterpret_cast<QuantizedMatMulT *>(u.value));
6418       break;
6419     }
6420     case OpParameter_QuantizedMaxPool: {
6421       value = new QuantizedMaxPoolT(*reinterpret_cast<QuantizedMaxPoolT *>(u.value));
6422       break;
6423     }
6424     case OpParameter_QuantizedRelu: {
6425       value = new QuantizedReluT(*reinterpret_cast<QuantizedReluT *>(u.value));
6426       break;
6427     }
6428     case OpParameter_QuantizedRelu6: {
6429       value = new QuantizedRelu6T(*reinterpret_cast<QuantizedRelu6T *>(u.value));
6430       break;
6431     }
6432     case OpParameter_QuantizedReshape: {
6433       value = new QuantizedReshapeT(*reinterpret_cast<QuantizedReshapeT *>(u.value));
6434       break;
6435     }
6436     case OpParameter_QuantizedSoftmax: {
6437       value = new QuantizedSoftmaxT(*reinterpret_cast<QuantizedSoftmaxT *>(u.value));
6438       break;
6439     }
6440     case OpParameter_QuantizeMaxMin: {
6441       value = new QuantizeMaxMinT(*reinterpret_cast<QuantizeMaxMinT *>(u.value));
6442       break;
6443     }
6444     case OpParameter_QuantizeV2: {
6445       value = new QuantizeV2T(*reinterpret_cast<QuantizeV2T *>(u.value));
6446       break;
6447     }
6448     case OpParameter_Range: {
6449       value = new RangeT(*reinterpret_cast<RangeT *>(u.value));
6450       break;
6451     }
6452     case OpParameter_Rank: {
6453       value = new RankT(*reinterpret_cast<RankT *>(u.value));
6454       break;
6455     }
6456     case OpParameter_ReduceJoin: {
6457       value = new ReduceJoinT(*reinterpret_cast<ReduceJoinT *>(u.value));
6458       break;
6459     }
6460     case OpParameter_ReductionParam: {
6461       value = new ReductionParamT(*reinterpret_cast<ReductionParamT *>(u.value));
6462       break;
6463     }
6464     case OpParameter_Relu: {
6465       value = new ReluT(*reinterpret_cast<ReluT *>(u.value));
6466       break;
6467     }
6468     case OpParameter_Relu6: {
6469       value = new Relu6T(*reinterpret_cast<Relu6T *>(u.value));
6470       break;
6471     }
6472     case OpParameter_RequantizationRange: {
6473       value = new RequantizationRangeT(*reinterpret_cast<RequantizationRangeT *>(u.value));
6474       break;
6475     }
6476     case OpParameter_Requantize: {
6477       value = new RequantizeT(*reinterpret_cast<RequantizeT *>(u.value));
6478       break;
6479     }
6480     case OpParameter_Reshape: {
6481       value = new ReshapeT(*reinterpret_cast<ReshapeT *>(u.value));
6482       break;
6483     }
6484     case OpParameter_Resize: {
6485       value = new ResizeT(*reinterpret_cast<ResizeT *>(u.value));
6486       break;
6487     }
6488     case OpParameter_RoiPooling: {
6489       value = new RoiPoolingT(*reinterpret_cast<RoiPoolingT *>(u.value));
6490       break;
6491     }
6492     case OpParameter_Scale: {
6493       value = new ScaleT(*reinterpret_cast<ScaleT *>(u.value));
6494       break;
6495     }
6496     case OpParameter_Selu: {
6497       value = new SeluT(*reinterpret_cast<SeluT *>(u.value));
6498       break;
6499     }
6500     case OpParameter_Size: {
6501       value = new SizeT(*reinterpret_cast<SizeT *>(u.value));
6502       break;
6503     }
6504     case OpParameter_Slice: {
6505       value = new SliceT(*reinterpret_cast<SliceT *>(u.value));
6506       break;
6507     }
6508     case OpParameter_SliceTf: {
6509       value = new SliceTfT(*reinterpret_cast<SliceTfT *>(u.value));
6510       break;
6511     }
6512     case OpParameter_SpaceBatch: {
6513       FLATBUFFERS_ASSERT(false);  // SpaceBatchT not copyable.
6514       break;
6515     }
6516     case OpParameter_SqueezeParam: {
6517       value = new SqueezeParamT(*reinterpret_cast<SqueezeParamT *>(u.value));
6518       break;
6519     }
6520     case OpParameter_StridedSliceParam: {
6521       value = new StridedSliceParamT(*reinterpret_cast<StridedSliceParamT *>(u.value));
6522       break;
6523     }
6524     case OpParameter_TensorConvertInfo: {
6525       value = new TensorConvertInfoT(*reinterpret_cast<TensorConvertInfoT *>(u.value));
6526       break;
6527     }
6528     case OpParameter_TfQuantizedConv2D: {
6529       FLATBUFFERS_ASSERT(false);  // TfQuantizedConv2DT not copyable.
6530       break;
6531     }
6532     case OpParameter_TopKV2: {
6533       value = new TopKV2T(*reinterpret_cast<TopKV2T *>(u.value));
6534       break;
6535     }
6536     case OpParameter_Transpose: {
6537       value = new TransposeT(*reinterpret_cast<TransposeT *>(u.value));
6538       break;
6539     }
6540     case OpParameter_UnaryOp: {
6541       value = new UnaryOpT(*reinterpret_cast<UnaryOpT *>(u.value));
6542       break;
6543     }
6544     case OpParameter_MomentsParam: {
6545       value = new MomentsParamT(*reinterpret_cast<MomentsParamT *>(u.value));
6546       break;
6547     }
6548     case OpParameter_RNNParam: {
6549       FLATBUFFERS_ASSERT(false);  // RNNParamT not copyable.
6550       break;
6551     }
6552     case OpParameter_BatchMatMulParam: {
6553       value = new BatchMatMulParamT(*reinterpret_cast<BatchMatMulParamT *>(u.value));
6554       break;
6555     }
6556     case OpParameter_QuantizedFloatParam: {
6557       value = new QuantizedFloatParamT(*reinterpret_cast<QuantizedFloatParamT *>(u.value));
6558       break;
6559     }
6560     case OpParameter_DepthSpaceParam: {
6561       value = new DepthSpaceParamT(*reinterpret_cast<DepthSpaceParamT *>(u.value));
6562       break;
6563     }
6564     case OpParameter_EltwiseInt8: {
6565       FLATBUFFERS_ASSERT(false);  // EltwiseInt8T not copyable.
6566       break;
6567     }
6568     case OpParameter_ReverseSequenceParam: {
6569       value = new ReverseSequenceParamT(*reinterpret_cast<ReverseSequenceParamT *>(u.value));
6570       break;
6571     }
6572     case OpParameter_Extra: {
6573       FLATBUFFERS_ASSERT(false);  // ExtraT not copyable.
6574       break;
6575     }
6576     case OpParameter_Pool3D: {
6577       value = new Pool3DT(*reinterpret_cast<Pool3DT *>(u.value));
6578       break;
6579     }
6580     case OpParameter_Convolution3D: {
6581       FLATBUFFERS_ASSERT(false);  // Convolution3DT not copyable.
6582       break;
6583     }
6584     case OpParameter_ELU: {
6585       value = new ELUT(*reinterpret_cast<ELUT *>(u.value));
6586       break;
6587     }
6588     case OpParameter_DetectionPostProcessParam: {
6589       value = new DetectionPostProcessParamT(*reinterpret_cast<DetectionPostProcessParamT *>(u.value));
6590       break;
6591     }
6592     case OpParameter_OneHotParam: {
6593       value = new OneHotParamT(*reinterpret_cast<OneHotParamT *>(u.value));
6594       break;
6595     }
6596     case OpParameter_PadParam: {
6597       value = new PadParamT(*reinterpret_cast<PadParamT *>(u.value));
6598       break;
6599     }
6600     case OpParameter_WhileParam: {
6601       FLATBUFFERS_ASSERT(false);  // WhileParamT not copyable.
6602       break;
6603     }
6604     case OpParameter_IfParam: {
6605       FLATBUFFERS_ASSERT(false);  // IfParamT not copyable.
6606       break;
6607     }
6608     case OpParameter_RandomUniform: {
6609       value = new RandomUniformT(*reinterpret_cast<RandomUniformT *>(u.value));
6610       break;
6611     }
6612     case OpParameter_LayerNorm: {
6613       value = new LayerNormT(*reinterpret_cast<LayerNormT *>(u.value));
6614       break;
6615     }
6616     case OpParameter_TensorArray: {
6617       value = new TensorArrayT(*reinterpret_cast<TensorArrayT *>(u.value));
6618       break;
6619     }
6620     case OpParameter_LSTMBlockCell: {
6621       value = new LSTMBlockCellT(*reinterpret_cast<LSTMBlockCellT *>(u.value));
6622       break;
6623     }
6624     case OpParameter_GridSample: {
6625       value = new GridSampleT(*reinterpret_cast<GridSampleT *>(u.value));
6626       break;
6627     }
6628     case OpParameter_LoopParam: {
6629       FLATBUFFERS_ASSERT(false);  // LoopParamT not copyable.
6630       break;
6631     }
6632     default:
6633       break;
6634   }
6635 }
6636 
6637 inline void OpParameterUnion::Reset() {
6638   switch (type) {
6639     case OpParameter_QuantizedAdd: {
6640       auto ptr = reinterpret_cast<QuantizedAddT *>(value);
6641       delete ptr;
6642       break;
6643     }
6644     case OpParameter_ArgMax: {
6645       auto ptr = reinterpret_cast<ArgMaxT *>(value);
6646       delete ptr;
6647       break;
6648     }
6649     case OpParameter_AsString: {
6650       auto ptr = reinterpret_cast<AsStringT *>(value);
6651       delete ptr;
6652       break;
6653     }
6654     case OpParameter_Axis: {
6655       auto ptr = reinterpret_cast<AxisT *>(value);
6656       delete ptr;
6657       break;
6658     }
6659     case OpParameter_BatchNorm: {
6660       auto ptr = reinterpret_cast<BatchNormT *>(value);
6661       delete ptr;
6662       break;
6663     }
6664     case OpParameter_BinaryOp: {
6665       auto ptr = reinterpret_cast<BinaryOpT *>(value);
6666       delete ptr;
6667       break;
6668     }
6669     case OpParameter_Blob: {
6670       auto ptr = reinterpret_cast<BlobT *>(value);
6671       delete ptr;
6672       break;
6673     }
6674     case OpParameter_CastParam: {
6675       auto ptr = reinterpret_cast<CastParamT *>(value);
6676       delete ptr;
6677       break;
6678     }
6679     case OpParameter_Convolution2D: {
6680       auto ptr = reinterpret_cast<Convolution2DT *>(value);
6681       delete ptr;
6682       break;
6683     }
6684     case OpParameter_Crop: {
6685       auto ptr = reinterpret_cast<CropT *>(value);
6686       delete ptr;
6687       break;
6688     }
6689     case OpParameter_CropAndResize: {
6690       auto ptr = reinterpret_cast<CropAndResizeT *>(value);
6691       delete ptr;
6692       break;
6693     }
6694     case OpParameter_Dequantize: {
6695       auto ptr = reinterpret_cast<DequantizeT *>(value);
6696       delete ptr;
6697       break;
6698     }
6699     case OpParameter_DetectionOutput: {
6700       auto ptr = reinterpret_cast<DetectionOutputT *>(value);
6701       delete ptr;
6702       break;
6703     }
6704     case OpParameter_Eltwise: {
6705       auto ptr = reinterpret_cast<EltwiseT *>(value);
6706       delete ptr;
6707       break;
6708     }
6709     case OpParameter_ExpandDims: {
6710       auto ptr = reinterpret_cast<ExpandDimsT *>(value);
6711       delete ptr;
6712       break;
6713     }
6714     case OpParameter_Fill: {
6715       auto ptr = reinterpret_cast<FillT *>(value);
6716       delete ptr;
6717       break;
6718     }
6719     case OpParameter_Flatten: {
6720       auto ptr = reinterpret_cast<FlattenT *>(value);
6721       delete ptr;
6722       break;
6723     }
6724     case OpParameter_Gather: {
6725       auto ptr = reinterpret_cast<GatherT *>(value);
6726       delete ptr;
6727       break;
6728     }
6729     case OpParameter_GatherV2: {
6730       auto ptr = reinterpret_cast<GatherV2T *>(value);
6731       delete ptr;
6732       break;
6733     }
6734     case OpParameter_InnerProduct: {
6735       auto ptr = reinterpret_cast<InnerProductT *>(value);
6736       delete ptr;
6737       break;
6738     }
6739     case OpParameter_Input: {
6740       auto ptr = reinterpret_cast<InputT *>(value);
6741       delete ptr;
6742       break;
6743     }
6744     case OpParameter_Interp: {
6745       auto ptr = reinterpret_cast<InterpT *>(value);
6746       delete ptr;
6747       break;
6748     }
6749     case OpParameter_LRN: {
6750       auto ptr = reinterpret_cast<LRNT *>(value);
6751       delete ptr;
6752       break;
6753     }
6754     case OpParameter_LSTM: {
6755       auto ptr = reinterpret_cast<LSTMT *>(value);
6756       delete ptr;
6757       break;
6758     }
6759     case OpParameter_MatMul: {
6760       auto ptr = reinterpret_cast<MatMulT *>(value);
6761       delete ptr;
6762       break;
6763     }
6764     case OpParameter_NonMaxSuppressionV2: {
6765       auto ptr = reinterpret_cast<NonMaxSuppressionV2T *>(value);
6766       delete ptr;
6767       break;
6768     }
6769     case OpParameter_Normalize: {
6770       auto ptr = reinterpret_cast<NormalizeT *>(value);
6771       delete ptr;
6772       break;
6773     }
6774     case OpParameter_PackParam: {
6775       auto ptr = reinterpret_cast<PackParamT *>(value);
6776       delete ptr;
6777       break;
6778     }
6779     case OpParameter_Permute: {
6780       auto ptr = reinterpret_cast<PermuteT *>(value);
6781       delete ptr;
6782       break;
6783     }
6784     case OpParameter_Plugin: {
6785       auto ptr = reinterpret_cast<PluginT *>(value);
6786       delete ptr;
6787       break;
6788     }
6789     case OpParameter_Pool: {
6790       auto ptr = reinterpret_cast<PoolT *>(value);
6791       delete ptr;
6792       break;
6793     }
6794     case OpParameter_PRelu: {
6795       auto ptr = reinterpret_cast<PReluT *>(value);
6796       delete ptr;
6797       break;
6798     }
6799     case OpParameter_PriorBox: {
6800       auto ptr = reinterpret_cast<PriorBoxT *>(value);
6801       delete ptr;
6802       break;
6803     }
6804     case OpParameter_Proposal: {
6805       auto ptr = reinterpret_cast<ProposalT *>(value);
6806       delete ptr;
6807       break;
6808     }
6809     case OpParameter_QuantizedAvgPool: {
6810       auto ptr = reinterpret_cast<QuantizedAvgPoolT *>(value);
6811       delete ptr;
6812       break;
6813     }
6814     case OpParameter_QuantizedBiasAdd: {
6815       auto ptr = reinterpret_cast<QuantizedBiasAddT *>(value);
6816       delete ptr;
6817       break;
6818     }
6819     case OpParameter_QuantizedConcat: {
6820       auto ptr = reinterpret_cast<QuantizedConcatT *>(value);
6821       delete ptr;
6822       break;
6823     }
6824     case OpParameter_QuantizedLogistic: {
6825       auto ptr = reinterpret_cast<QuantizedLogisticT *>(value);
6826       delete ptr;
6827       break;
6828     }
6829     case OpParameter_QuantizedMatMul: {
6830       auto ptr = reinterpret_cast<QuantizedMatMulT *>(value);
6831       delete ptr;
6832       break;
6833     }
6834     case OpParameter_QuantizedMaxPool: {
6835       auto ptr = reinterpret_cast<QuantizedMaxPoolT *>(value);
6836       delete ptr;
6837       break;
6838     }
6839     case OpParameter_QuantizedRelu: {
6840       auto ptr = reinterpret_cast<QuantizedReluT *>(value);
6841       delete ptr;
6842       break;
6843     }
6844     case OpParameter_QuantizedRelu6: {
6845       auto ptr = reinterpret_cast<QuantizedRelu6T *>(value);
6846       delete ptr;
6847       break;
6848     }
6849     case OpParameter_QuantizedReshape: {
6850       auto ptr = reinterpret_cast<QuantizedReshapeT *>(value);
6851       delete ptr;
6852       break;
6853     }
6854     case OpParameter_QuantizedSoftmax: {
6855       auto ptr = reinterpret_cast<QuantizedSoftmaxT *>(value);
6856       delete ptr;
6857       break;
6858     }
6859     case OpParameter_QuantizeMaxMin: {
6860       auto ptr = reinterpret_cast<QuantizeMaxMinT *>(value);
6861       delete ptr;
6862       break;
6863     }
6864     case OpParameter_QuantizeV2: {
6865       auto ptr = reinterpret_cast<QuantizeV2T *>(value);
6866       delete ptr;
6867       break;
6868     }
6869     case OpParameter_Range: {
6870       auto ptr = reinterpret_cast<RangeT *>(value);
6871       delete ptr;
6872       break;
6873     }
6874     case OpParameter_Rank: {
6875       auto ptr = reinterpret_cast<RankT *>(value);
6876       delete ptr;
6877       break;
6878     }
6879     case OpParameter_ReduceJoin: {
6880       auto ptr = reinterpret_cast<ReduceJoinT *>(value);
6881       delete ptr;
6882       break;
6883     }
6884     case OpParameter_ReductionParam: {
6885       auto ptr = reinterpret_cast<ReductionParamT *>(value);
6886       delete ptr;
6887       break;
6888     }
6889     case OpParameter_Relu: {
6890       auto ptr = reinterpret_cast<ReluT *>(value);
6891       delete ptr;
6892       break;
6893     }
6894     case OpParameter_Relu6: {
6895       auto ptr = reinterpret_cast<Relu6T *>(value);
6896       delete ptr;
6897       break;
6898     }
6899     case OpParameter_RequantizationRange: {
6900       auto ptr = reinterpret_cast<RequantizationRangeT *>(value);
6901       delete ptr;
6902       break;
6903     }
6904     case OpParameter_Requantize: {
6905       auto ptr = reinterpret_cast<RequantizeT *>(value);
6906       delete ptr;
6907       break;
6908     }
6909     case OpParameter_Reshape: {
6910       auto ptr = reinterpret_cast<ReshapeT *>(value);
6911       delete ptr;
6912       break;
6913     }
6914     case OpParameter_Resize: {
6915       auto ptr = reinterpret_cast<ResizeT *>(value);
6916       delete ptr;
6917       break;
6918     }
6919     case OpParameter_RoiPooling: {
6920       auto ptr = reinterpret_cast<RoiPoolingT *>(value);
6921       delete ptr;
6922       break;
6923     }
6924     case OpParameter_Scale: {
6925       auto ptr = reinterpret_cast<ScaleT *>(value);
6926       delete ptr;
6927       break;
6928     }
6929     case OpParameter_Selu: {
6930       auto ptr = reinterpret_cast<SeluT *>(value);
6931       delete ptr;
6932       break;
6933     }
6934     case OpParameter_Size: {
6935       auto ptr = reinterpret_cast<SizeT *>(value);
6936       delete ptr;
6937       break;
6938     }
6939     case OpParameter_Slice: {
6940       auto ptr = reinterpret_cast<SliceT *>(value);
6941       delete ptr;
6942       break;
6943     }
6944     case OpParameter_SliceTf: {
6945       auto ptr = reinterpret_cast<SliceTfT *>(value);
6946       delete ptr;
6947       break;
6948     }
6949     case OpParameter_SpaceBatch: {
6950       auto ptr = reinterpret_cast<SpaceBatchT *>(value);
6951       delete ptr;
6952       break;
6953     }
6954     case OpParameter_SqueezeParam: {
6955       auto ptr = reinterpret_cast<SqueezeParamT *>(value);
6956       delete ptr;
6957       break;
6958     }
6959     case OpParameter_StridedSliceParam: {
6960       auto ptr = reinterpret_cast<StridedSliceParamT *>(value);
6961       delete ptr;
6962       break;
6963     }
6964     case OpParameter_TensorConvertInfo: {
6965       auto ptr = reinterpret_cast<TensorConvertInfoT *>(value);
6966       delete ptr;
6967       break;
6968     }
6969     case OpParameter_TfQuantizedConv2D: {
6970       auto ptr = reinterpret_cast<TfQuantizedConv2DT *>(value);
6971       delete ptr;
6972       break;
6973     }
6974     case OpParameter_TopKV2: {
6975       auto ptr = reinterpret_cast<TopKV2T *>(value);
6976       delete ptr;
6977       break;
6978     }
6979     case OpParameter_Transpose: {
6980       auto ptr = reinterpret_cast<TransposeT *>(value);
6981       delete ptr;
6982       break;
6983     }
6984     case OpParameter_UnaryOp: {
6985       auto ptr = reinterpret_cast<UnaryOpT *>(value);
6986       delete ptr;
6987       break;
6988     }
6989     case OpParameter_MomentsParam: {
6990       auto ptr = reinterpret_cast<MomentsParamT *>(value);
6991       delete ptr;
6992       break;
6993     }
6994     case OpParameter_RNNParam: {
6995       auto ptr = reinterpret_cast<RNNParamT *>(value);
6996       delete ptr;
6997       break;
6998     }
6999     case OpParameter_BatchMatMulParam: {
7000       auto ptr = reinterpret_cast<BatchMatMulParamT *>(value);
7001       delete ptr;
7002       break;
7003     }
7004     case OpParameter_QuantizedFloatParam: {
7005       auto ptr = reinterpret_cast<QuantizedFloatParamT *>(value);
7006       delete ptr;
7007       break;
7008     }
7009     case OpParameter_DepthSpaceParam: {
7010       auto ptr = reinterpret_cast<DepthSpaceParamT *>(value);
7011       delete ptr;
7012       break;
7013     }
7014     case OpParameter_EltwiseInt8: {
7015       auto ptr = reinterpret_cast<EltwiseInt8T *>(value);
7016       delete ptr;
7017       break;
7018     }
7019     case OpParameter_ReverseSequenceParam: {
7020       auto ptr = reinterpret_cast<ReverseSequenceParamT *>(value);
7021       delete ptr;
7022       break;
7023     }
7024     case OpParameter_Extra: {
7025       auto ptr = reinterpret_cast<ExtraT *>(value);
7026       delete ptr;
7027       break;
7028     }
7029     case OpParameter_Pool3D: {
7030       auto ptr = reinterpret_cast<Pool3DT *>(value);
7031       delete ptr;
7032       break;
7033     }
7034     case OpParameter_Convolution3D: {
7035       auto ptr = reinterpret_cast<Convolution3DT *>(value);
7036       delete ptr;
7037       break;
7038     }
7039     case OpParameter_ELU: {
7040       auto ptr = reinterpret_cast<ELUT *>(value);
7041       delete ptr;
7042       break;
7043     }
7044     case OpParameter_DetectionPostProcessParam: {
7045       auto ptr = reinterpret_cast<DetectionPostProcessParamT *>(value);
7046       delete ptr;
7047       break;
7048     }
7049     case OpParameter_OneHotParam: {
7050       auto ptr = reinterpret_cast<OneHotParamT *>(value);
7051       delete ptr;
7052       break;
7053     }
7054     case OpParameter_PadParam: {
7055       auto ptr = reinterpret_cast<PadParamT *>(value);
7056       delete ptr;
7057       break;
7058     }
7059     case OpParameter_WhileParam: {
7060       auto ptr = reinterpret_cast<WhileParamT *>(value);
7061       delete ptr;
7062       break;
7063     }
7064     case OpParameter_IfParam: {
7065       auto ptr = reinterpret_cast<IfParamT *>(value);
7066       delete ptr;
7067       break;
7068     }
7069     case OpParameter_RandomUniform: {
7070       auto ptr = reinterpret_cast<RandomUniformT *>(value);
7071       delete ptr;
7072       break;
7073     }
7074     case OpParameter_LayerNorm: {
7075       auto ptr = reinterpret_cast<LayerNormT *>(value);
7076       delete ptr;
7077       break;
7078     }
7079     case OpParameter_TensorArray: {
7080       auto ptr = reinterpret_cast<TensorArrayT *>(value);
7081       delete ptr;
7082       break;
7083     }
7084     case OpParameter_LSTMBlockCell: {
7085       auto ptr = reinterpret_cast<LSTMBlockCellT *>(value);
7086       delete ptr;
7087       break;
7088     }
7089     case OpParameter_GridSample: {
7090       auto ptr = reinterpret_cast<GridSampleT *>(value);
7091       delete ptr;
7092       break;
7093     }
7094     case OpParameter_LoopParam: {
7095       auto ptr = reinterpret_cast<LoopParamT *>(value);
7096       delete ptr;
7097       break;
7098     }
7099     default: break;
7100   }
7101   value = nullptr;
7102   type = OpParameter_NONE;
7103 }
7104 
7105 inline const flatbuffers::TypeTable *OpTypeTypeTable() {
7106   static const flatbuffers::TypeCode type_codes[] = {
7107     { flatbuffers::ET_INT, 0, 0 },
7108     { flatbuffers::ET_INT, 0, 0 },
7109     { flatbuffers::ET_INT, 0, 0 },
7110     { flatbuffers::ET_INT, 0, 0 },
7111     { flatbuffers::ET_INT, 0, 0 },
7112     { flatbuffers::ET_INT, 0, 0 },
7113     { flatbuffers::ET_INT, 0, 0 },
7114     { flatbuffers::ET_INT, 0, 0 },
7115     { flatbuffers::ET_INT, 0, 0 },
7116     { flatbuffers::ET_INT, 0, 0 },
7117     { flatbuffers::ET_INT, 0, 0 },
7118     { flatbuffers::ET_INT, 0, 0 },
7119     { flatbuffers::ET_INT, 0, 0 },
7120     { flatbuffers::ET_INT, 0, 0 },
7121     { flatbuffers::ET_INT, 0, 0 },
7122     { flatbuffers::ET_INT, 0, 0 },
7123     { flatbuffers::ET_INT, 0, 0 },
7124     { flatbuffers::ET_INT, 0, 0 },
7125     { flatbuffers::ET_INT, 0, 0 },
7126     { flatbuffers::ET_INT, 0, 0 },
7127     { flatbuffers::ET_INT, 0, 0 },
7128     { flatbuffers::ET_INT, 0, 0 },
7129     { flatbuffers::ET_INT, 0, 0 },
7130     { flatbuffers::ET_INT, 0, 0 },
7131     { flatbuffers::ET_INT, 0, 0 },
7132     { flatbuffers::ET_INT, 0, 0 },
7133     { flatbuffers::ET_INT, 0, 0 },
7134     { flatbuffers::ET_INT, 0, 0 },
7135     { flatbuffers::ET_INT, 0, 0 },
7136     { flatbuffers::ET_INT, 0, 0 },
7137     { flatbuffers::ET_INT, 0, 0 },
7138     { flatbuffers::ET_INT, 0, 0 },
7139     { flatbuffers::ET_INT, 0, 0 },
7140     { flatbuffers::ET_INT, 0, 0 },
7141     { flatbuffers::ET_INT, 0, 0 },
7142     { flatbuffers::ET_INT, 0, 0 },
7143     { flatbuffers::ET_INT, 0, 0 },
7144     { flatbuffers::ET_INT, 0, 0 },
7145     { flatbuffers::ET_INT, 0, 0 },
7146     { flatbuffers::ET_INT, 0, 0 },
7147     { flatbuffers::ET_INT, 0, 0 },
7148     { flatbuffers::ET_INT, 0, 0 },
7149     { flatbuffers::ET_INT, 0, 0 },
7150     { flatbuffers::ET_INT, 0, 0 },
7151     { flatbuffers::ET_INT, 0, 0 },
7152     { flatbuffers::ET_INT, 0, 0 },
7153     { flatbuffers::ET_INT, 0, 0 },
7154     { flatbuffers::ET_INT, 0, 0 },
7155     { flatbuffers::ET_INT, 0, 0 },
7156     { flatbuffers::ET_INT, 0, 0 },
7157     { flatbuffers::ET_INT, 0, 0 },
7158     { flatbuffers::ET_INT, 0, 0 },
7159     { flatbuffers::ET_INT, 0, 0 },
7160     { flatbuffers::ET_INT, 0, 0 },
7161     { flatbuffers::ET_INT, 0, 0 },
7162     { flatbuffers::ET_INT, 0, 0 },
7163     { flatbuffers::ET_INT, 0, 0 },
7164     { flatbuffers::ET_INT, 0, 0 },
7165     { flatbuffers::ET_INT, 0, 0 },
7166     { flatbuffers::ET_INT, 0, 0 },
7167     { flatbuffers::ET_INT, 0, 0 },
7168     { flatbuffers::ET_INT, 0, 0 },
7169     { flatbuffers::ET_INT, 0, 0 },
7170     { flatbuffers::ET_INT, 0, 0 },
7171     { flatbuffers::ET_INT, 0, 0 },
7172     { flatbuffers::ET_INT, 0, 0 },
7173     { flatbuffers::ET_INT, 0, 0 },
7174     { flatbuffers::ET_INT, 0, 0 },
7175     { flatbuffers::ET_INT, 0, 0 },
7176     { flatbuffers::ET_INT, 0, 0 },
7177     { flatbuffers::ET_INT, 0, 0 },
7178     { flatbuffers::ET_INT, 0, 0 },
7179     { flatbuffers::ET_INT, 0, 0 },
7180     { flatbuffers::ET_INT, 0, 0 },
7181     { flatbuffers::ET_INT, 0, 0 },
7182     { flatbuffers::ET_INT, 0, 0 },
7183     { flatbuffers::ET_INT, 0, 0 },
7184     { flatbuffers::ET_INT, 0, 0 },
7185     { flatbuffers::ET_INT, 0, 0 },
7186     { flatbuffers::ET_INT, 0, 0 },
7187     { flatbuffers::ET_INT, 0, 0 },
7188     { flatbuffers::ET_INT, 0, 0 },
7189     { flatbuffers::ET_INT, 0, 0 },
7190     { flatbuffers::ET_INT, 0, 0 },
7191     { flatbuffers::ET_INT, 0, 0 },
7192     { flatbuffers::ET_INT, 0, 0 },
7193     { flatbuffers::ET_INT, 0, 0 },
7194     { flatbuffers::ET_INT, 0, 0 },
7195     { flatbuffers::ET_INT, 0, 0 },
7196     { flatbuffers::ET_INT, 0, 0 },
7197     { flatbuffers::ET_INT, 0, 0 },
7198     { flatbuffers::ET_INT, 0, 0 },
7199     { flatbuffers::ET_INT, 0, 0 },
7200     { flatbuffers::ET_INT, 0, 0 },
7201     { flatbuffers::ET_INT, 0, 0 },
7202     { flatbuffers::ET_INT, 0, 0 },
7203     { flatbuffers::ET_INT, 0, 0 },
7204     { flatbuffers::ET_INT, 0, 0 },
7205     { flatbuffers::ET_INT, 0, 0 },
7206     { flatbuffers::ET_INT, 0, 0 },
7207     { flatbuffers::ET_INT, 0, 0 },
7208     { flatbuffers::ET_INT, 0, 0 },
7209     { flatbuffers::ET_INT, 0, 0 },
7210     { flatbuffers::ET_INT, 0, 0 },
7211     { flatbuffers::ET_INT, 0, 0 },
7212     { flatbuffers::ET_INT, 0, 0 },
7213     { flatbuffers::ET_INT, 0, 0 },
7214     { flatbuffers::ET_INT, 0, 0 },
7215     { flatbuffers::ET_INT, 0, 0 },
7216     { flatbuffers::ET_INT, 0, 0 },
7217     { flatbuffers::ET_INT, 0, 0 },
7218     { flatbuffers::ET_INT, 0, 0 },
7219     { flatbuffers::ET_INT, 0, 0 },
7220     { flatbuffers::ET_INT, 0, 0 },
7221     { flatbuffers::ET_INT, 0, 0 },
7222     { flatbuffers::ET_INT, 0, 0 },
7223     { flatbuffers::ET_INT, 0, 0 },
7224     { flatbuffers::ET_INT, 0, 0 },
7225     { flatbuffers::ET_INT, 0, 0 },
7226     { flatbuffers::ET_INT, 0, 0 },
7227     { flatbuffers::ET_INT, 0, 0 },
7228     { flatbuffers::ET_INT, 0, 0 },
7229     { flatbuffers::ET_INT, 0, 0 },
7230     { flatbuffers::ET_INT, 0, 0 },
7231     { flatbuffers::ET_INT, 0, 0 },
7232     { flatbuffers::ET_INT, 0, 0 },
7233     { flatbuffers::ET_INT, 0, 0 },
7234     { flatbuffers::ET_INT, 0, 0 },
7235     { flatbuffers::ET_INT, 0, 0 },
7236     { flatbuffers::ET_INT, 0, 0 },
7237     { flatbuffers::ET_INT, 0, 0 },
7238     { flatbuffers::ET_INT, 0, 0 },
7239     { flatbuffers::ET_INT, 0, 0 },
7240     { flatbuffers::ET_INT, 0, 0 },
7241     { flatbuffers::ET_INT, 0, 0 },
7242     { flatbuffers::ET_INT, 0, 0 },
7243     { flatbuffers::ET_INT, 0, 0 },
7244     { flatbuffers::ET_INT, 0, 0 },
7245     { flatbuffers::ET_INT, 0, 0 },
7246     { flatbuffers::ET_INT, 0, 0 },
7247     { flatbuffers::ET_INT, 0, 0 },
7248     { flatbuffers::ET_INT, 0, 0 },
7249     { flatbuffers::ET_INT, 0, 0 },
7250     { flatbuffers::ET_INT, 0, 0 },
7251     { flatbuffers::ET_INT, 0, 0 },
7252     { flatbuffers::ET_INT, 0, 0 },
7253     { flatbuffers::ET_INT, 0, 0 },
7254     { flatbuffers::ET_INT, 0, 0 },
7255     { flatbuffers::ET_INT, 0, 0 },
7256     { flatbuffers::ET_INT, 0, 0 },
7257     { flatbuffers::ET_INT, 0, 0 },
7258     { flatbuffers::ET_INT, 0, 0 },
7259     { flatbuffers::ET_INT, 0, 0 },
7260     { flatbuffers::ET_INT, 0, 0 },
7261     { flatbuffers::ET_INT, 0, 0 },
7262     { flatbuffers::ET_INT, 0, 0 },
7263     { flatbuffers::ET_INT, 0, 0 },
7264     { flatbuffers::ET_INT, 0, 0 },
7265     { flatbuffers::ET_INT, 0, 0 },
7266     { flatbuffers::ET_INT, 0, 0 },
7267     { flatbuffers::ET_INT, 0, 0 }
7268   };
7269   static const flatbuffers::TypeFunction type_refs[] = {
7270     OpTypeTypeTable
7271   };
7272   static const int64_t values[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 512, 513, 514, 515, 516, 517, 518, 600, 601, 603, 604 };
7273   static const char * const names[] = {
7274     "AbsVal",
7275     "QuantizedAdd",
7276     "ArgMax",
7277     "AsString",
7278     "InstanceNorm",
7279     "BatchToSpaceND",
7280     "Bias",
7281     "BinaryOp",
7282     "Bnll",
7283     "Cast",
7284     "Concat",
7285     "Const",
7286     "Convolution",
7287     "ConvolutionDepthwise",
7288     "Crop",
7289     "CropAndResize",
7290     "Cubic",
7291     "Deconvolution",
7292     "DeconvolutionDepthwise",
7293     "Dequantize",
7294     "DetectionOutput",
7295     "Dropout",
7296     "Eltwise",
7297     "ELU",
7298     "Embed",
7299     "Exp",
7300     "ExpandDims",
7301     "Fill",
7302     "Flatten",
7303     "FloorMod",
7304     "Gather",
7305     "GatherV2",
7306     "Im2Seq",
7307     "InnerProduct",
7308     "Input",
7309     "Interp",
7310     "Log",
7311     "LRN",
7312     "LSTM",
7313     "MatMul",
7314     "MVN",
7315     "NonMaxSuppression",
7316     "NonMaxSuppressionV2",
7317     "Normalize",
7318     "Pack",
7319     "Padding",
7320     "Permute",
7321     "Pooling",
7322     "Power",
7323     "PReLU",
7324     "PriorBox",
7325     "Proposal",
7326     "QuantizedAvgPool",
7327     "QuantizedBiasAdd",
7328     "QuantizedConcat",
7329     "QuantizedDepthwiseConv2D",
7330     "QuantizedLogistic",
7331     "QuantizedMatMul",
7332     "QuantizedMaxPool",
7333     "QuantizedRelu",
7334     "QuantizedRelu6",
7335     "QuantizedReshape",
7336     "QuantizedSoftmax",
7337     "QuantizeMaxMin",
7338     "QuantizeV2",
7339     "Range",
7340     "Rank",
7341     "ReduceJoin",
7342     "Reduction",
7343     "ReLU",
7344     "ReLU6",
7345     "RequantizationRange",
7346     "Requantize",
7347     "Reshape",
7348     "Resize",
7349     "RNN",
7350     "ROIPooling",
7351     "Scale",
7352     "Selu",
7353     "Seq2Out",
7354     "Shape",
7355     "Sigmoid",
7356     "Size",
7357     "Slice",
7358     "SliceTf",
7359     "Softmax",
7360     "SpaceToBatchND",
7361     "SpatialProduct",
7362     "Split",
7363     "SPP",
7364     "Squeeze",
7365     "StridedSlice",
7366     "StringJoin",
7367     "StringSplit",
7368     "StringToNumber",
7369     "TanH",
7370     "TfQuantizedConv2D",
7371     "Threshold",
7372     "Tile",
7373     "TopKV2",
7374     "Transpose",
7375     "UnaryOp",
7376     "Unpack",
7377     "Where",
7378     "Moments",
7379     "RNNSequenceGRU",
7380     "BatchMatMul",
7381     "Unsqueeze",
7382     "CosineSimilarity",
7383     "DepthToSpace",
7384     "SpaceToDepth",
7385     "ReverseSequence",
7386     "Pooling3D",
7387     "Convolution3D",
7388     "MatrixBandPart",
7389     "GatherND",
7390     "DetectionPostProcess",
7391     "UnravelIndex",
7392     "ScatterNd",
7393     "OneHot",
7394     "BroadcastTo",
7395     "Dilation2D",
7396     "Raster",
7397     "ConvertTensor",
7398     "ArgMin",
7399     "LinSpace",
7400     "RandomUniform",
7401     "TensorArray",
7402     "TensorArraySize",
7403     "TensorArrayRead",
7404     "TensorArrayWrite",
7405     "TensorArrayGather",
7406     "TensorArrayScatter",
7407     "TensorArraySplit",
7408     "TensorArrayConcat",
7409     "LSTMBlockCell",
7410     "Reverse",
7411     "Plugin",
7412     "Select",
7413     "ZerosLike",
7414     "Broastcast",
7415     "SetDiff1D",
7416     "ReluGrad",
7417     "Relu6Grad",
7418     "PoolGrad",
7419     "SoftmaxGrad",
7420     "Conv2DBackPropFilter",
7421     "TrainableParam",
7422     "BatchNorm",
7423     "ZeroGrad",
7424     "Extra",
7425     "ConvInt8",
7426     "Int8ToFloat",
7427     "DepthwiseConvInt8",
7428     "PoolInt8",
7429     "FloatToInt8",
7430     "EltwiseInt8",
7431     "While",
7432     "If",
7433     "LayerNorm",
7434     "GridSample"
7435   };
7436   static const flatbuffers::TypeTable tt = {
7437     flatbuffers::ST_ENUM, 161, type_codes, type_refs, values, names
7438   };
7439   return &tt;
7440 }
7441 
7442 inline const flatbuffers::TypeTable *OpParameterTypeTable() {
7443   static const flatbuffers::TypeCode type_codes[] = {
7444     { flatbuffers::ET_SEQUENCE, 0, -1 },
7445     { flatbuffers::ET_SEQUENCE, 0, 0 },
7446     { flatbuffers::ET_SEQUENCE, 0, 1 },
7447     { flatbuffers::ET_SEQUENCE, 0, 2 },
7448     { flatbuffers::ET_SEQUENCE, 0, 3 },
7449     { flatbuffers::ET_SEQUENCE, 0, 4 },
7450     { flatbuffers::ET_SEQUENCE, 0, 5 },
7451     { flatbuffers::ET_SEQUENCE, 0, 6 },
7452     { flatbuffers::ET_SEQUENCE, 0, 7 },
7453     { flatbuffers::ET_SEQUENCE, 0, 8 },
7454     { flatbuffers::ET_SEQUENCE, 0, 9 },
7455     { flatbuffers::ET_SEQUENCE, 0, 10 },
7456     { flatbuffers::ET_SEQUENCE, 0, 11 },
7457     { flatbuffers::ET_SEQUENCE, 0, 12 },
7458     { flatbuffers::ET_SEQUENCE, 0, 13 },
7459     { flatbuffers::ET_SEQUENCE, 0, 14 },
7460     { flatbuffers::ET_SEQUENCE, 0, 15 },
7461     { flatbuffers::ET_SEQUENCE, 0, 16 },
7462     { flatbuffers::ET_SEQUENCE, 0, 17 },
7463     { flatbuffers::ET_SEQUENCE, 0, 18 },
7464     { flatbuffers::ET_SEQUENCE, 0, 19 },
7465     { flatbuffers::ET_SEQUENCE, 0, 20 },
7466     { flatbuffers::ET_SEQUENCE, 0, 21 },
7467     { flatbuffers::ET_SEQUENCE, 0, 22 },
7468     { flatbuffers::ET_SEQUENCE, 0, 23 },
7469     { flatbuffers::ET_SEQUENCE, 0, 24 },
7470     { flatbuffers::ET_SEQUENCE, 0, 25 },
7471     { flatbuffers::ET_SEQUENCE, 0, 26 },
7472     { flatbuffers::ET_SEQUENCE, 0, 27 },
7473     { flatbuffers::ET_SEQUENCE, 0, 28 },
7474     { flatbuffers::ET_SEQUENCE, 0, 29 },
7475     { flatbuffers::ET_SEQUENCE, 0, 30 },
7476     { flatbuffers::ET_SEQUENCE, 0, 31 },
7477     { flatbuffers::ET_SEQUENCE, 0, 32 },
7478     { flatbuffers::ET_SEQUENCE, 0, 33 },
7479     { flatbuffers::ET_SEQUENCE, 0, 34 },
7480     { flatbuffers::ET_SEQUENCE, 0, 35 },
7481     { flatbuffers::ET_SEQUENCE, 0, 36 },
7482     { flatbuffers::ET_SEQUENCE, 0, 37 },
7483     { flatbuffers::ET_SEQUENCE, 0, 38 },
7484     { flatbuffers::ET_SEQUENCE, 0, 39 },
7485     { flatbuffers::ET_SEQUENCE, 0, 40 },
7486     { flatbuffers::ET_SEQUENCE, 0, 41 },
7487     { flatbuffers::ET_SEQUENCE, 0, 42 },
7488     { flatbuffers::ET_SEQUENCE, 0, 43 },
7489     { flatbuffers::ET_SEQUENCE, 0, 44 },
7490     { flatbuffers::ET_SEQUENCE, 0, 45 },
7491     { flatbuffers::ET_SEQUENCE, 0, 46 },
7492     { flatbuffers::ET_SEQUENCE, 0, 47 },
7493     { flatbuffers::ET_SEQUENCE, 0, 48 },
7494     { flatbuffers::ET_SEQUENCE, 0, 49 },
7495     { flatbuffers::ET_SEQUENCE, 0, 50 },
7496     { flatbuffers::ET_SEQUENCE, 0, 51 },
7497     { flatbuffers::ET_SEQUENCE, 0, 52 },
7498     { flatbuffers::ET_SEQUENCE, 0, 53 },
7499     { flatbuffers::ET_SEQUENCE, 0, 54 },
7500     { flatbuffers::ET_SEQUENCE, 0, 55 },
7501     { flatbuffers::ET_SEQUENCE, 0, 56 },
7502     { flatbuffers::ET_SEQUENCE, 0, 57 },
7503     { flatbuffers::ET_SEQUENCE, 0, 58 },
7504     { flatbuffers::ET_SEQUENCE, 0, 59 },
7505     { flatbuffers::ET_SEQUENCE, 0, 60 },
7506     { flatbuffers::ET_SEQUENCE, 0, 61 },
7507     { flatbuffers::ET_SEQUENCE, 0, 62 },
7508     { flatbuffers::ET_SEQUENCE, 0, 63 },
7509     { flatbuffers::ET_SEQUENCE, 0, 64 },
7510     { flatbuffers::ET_SEQUENCE, 0, 65 },
7511     { flatbuffers::ET_SEQUENCE, 0, 66 },
7512     { flatbuffers::ET_SEQUENCE, 0, 67 },
7513     { flatbuffers::ET_SEQUENCE, 0, 68 },
7514     { flatbuffers::ET_SEQUENCE, 0, 69 },
7515     { flatbuffers::ET_SEQUENCE, 0, 70 },
7516     { flatbuffers::ET_SEQUENCE, 0, 71 },
7517     { flatbuffers::ET_SEQUENCE, 0, 72 },
7518     { flatbuffers::ET_SEQUENCE, 0, 73 },
7519     { flatbuffers::ET_SEQUENCE, 0, 74 },
7520     { flatbuffers::ET_SEQUENCE, 0, 75 },
7521     { flatbuffers::ET_SEQUENCE, 0, 76 },
7522     { flatbuffers::ET_SEQUENCE, 0, 77 },
7523     { flatbuffers::ET_SEQUENCE, 0, 78 },
7524     { flatbuffers::ET_SEQUENCE, 0, 79 },
7525     { flatbuffers::ET_SEQUENCE, 0, 80 },
7526     { flatbuffers::ET_SEQUENCE, 0, 81 },
7527     { flatbuffers::ET_SEQUENCE, 0, 82 },
7528     { flatbuffers::ET_SEQUENCE, 0, 83 },
7529     { flatbuffers::ET_SEQUENCE, 0, 84 },
7530     { flatbuffers::ET_SEQUENCE, 0, 85 },
7531     { flatbuffers::ET_SEQUENCE, 0, 86 },
7532     { flatbuffers::ET_SEQUENCE, 0, 87 },
7533     { flatbuffers::ET_SEQUENCE, 0, 88 },
7534     { flatbuffers::ET_SEQUENCE, 0, 89 },
7535     { flatbuffers::ET_SEQUENCE, 0, 90 },
7536     { flatbuffers::ET_SEQUENCE, 0, 91 }
7537   };
7538   static const flatbuffers::TypeFunction type_refs[] = {
7539     QuantizedAddTypeTable,
7540     ArgMaxTypeTable,
7541     AsStringTypeTable,
7542     AxisTypeTable,
7543     BatchNormTypeTable,
7544     BinaryOpTypeTable,
7545     BlobTypeTable,
7546     CastParamTypeTable,
7547     Convolution2DTypeTable,
7548     CropTypeTable,
7549     CropAndResizeTypeTable,
7550     DequantizeTypeTable,
7551     DetectionOutputTypeTable,
7552     EltwiseTypeTable,
7553     ExpandDimsTypeTable,
7554     FillTypeTable,
7555     FlattenTypeTable,
7556     GatherTypeTable,
7557     GatherV2TypeTable,
7558     InnerProductTypeTable,
7559     InputTypeTable,
7560     InterpTypeTable,
7561     LRNTypeTable,
7562     LSTMTypeTable,
7563     MatMulTypeTable,
7564     NonMaxSuppressionV2TypeTable,
7565     NormalizeTypeTable,
7566     PackParamTypeTable,
7567     PermuteTypeTable,
7568     PluginTypeTable,
7569     PoolTypeTable,
7570     PReluTypeTable,
7571     PriorBoxTypeTable,
7572     ProposalTypeTable,
7573     QuantizedAvgPoolTypeTable,
7574     QuantizedBiasAddTypeTable,
7575     QuantizedConcatTypeTable,
7576     QuantizedLogisticTypeTable,
7577     QuantizedMatMulTypeTable,
7578     QuantizedMaxPoolTypeTable,
7579     QuantizedReluTypeTable,
7580     QuantizedRelu6TypeTable,
7581     QuantizedReshapeTypeTable,
7582     QuantizedSoftmaxTypeTable,
7583     QuantizeMaxMinTypeTable,
7584     QuantizeV2TypeTable,
7585     RangeTypeTable,
7586     RankTypeTable,
7587     ReduceJoinTypeTable,
7588     ReductionParamTypeTable,
7589     ReluTypeTable,
7590     Relu6TypeTable,
7591     RequantizationRangeTypeTable,
7592     RequantizeTypeTable,
7593     ReshapeTypeTable,
7594     ResizeTypeTable,
7595     RoiPoolingTypeTable,
7596     ScaleTypeTable,
7597     SeluTypeTable,
7598     SizeTypeTable,
7599     SliceTypeTable,
7600     SliceTfTypeTable,
7601     SpaceBatchTypeTable,
7602     SqueezeParamTypeTable,
7603     StridedSliceParamTypeTable,
7604     TensorConvertInfoTypeTable,
7605     TfQuantizedConv2DTypeTable,
7606     TopKV2TypeTable,
7607     TransposeTypeTable,
7608     UnaryOpTypeTable,
7609     MomentsParamTypeTable,
7610     RNNParamTypeTable,
7611     BatchMatMulParamTypeTable,
7612     QuantizedFloatParamTypeTable,
7613     DepthSpaceParamTypeTable,
7614     EltwiseInt8TypeTable,
7615     ReverseSequenceParamTypeTable,
7616     ExtraTypeTable,
7617     Pool3DTypeTable,
7618     Convolution3DTypeTable,
7619     ELUTypeTable,
7620     DetectionPostProcessParamTypeTable,
7621     OneHotParamTypeTable,
7622     PadParamTypeTable,
7623     WhileParamTypeTable,
7624     IfParamTypeTable,
7625     RandomUniformTypeTable,
7626     LayerNormTypeTable,
7627     TensorArrayTypeTable,
7628     LSTMBlockCellTypeTable,
7629     GridSampleTypeTable,
7630     LoopParamTypeTable
7631   };
7632   static const char * const names[] = {
7633     "NONE",
7634     "QuantizedAdd",
7635     "ArgMax",
7636     "AsString",
7637     "Axis",
7638     "BatchNorm",
7639     "BinaryOp",
7640     "Blob",
7641     "CastParam",
7642     "Convolution2D",
7643     "Crop",
7644     "CropAndResize",
7645     "Dequantize",
7646     "DetectionOutput",
7647     "Eltwise",
7648     "ExpandDims",
7649     "Fill",
7650     "Flatten",
7651     "Gather",
7652     "GatherV2",
7653     "InnerProduct",
7654     "Input",
7655     "Interp",
7656     "LRN",
7657     "LSTM",
7658     "MatMul",
7659     "NonMaxSuppressionV2",
7660     "Normalize",
7661     "PackParam",
7662     "Permute",
7663     "Plugin",
7664     "Pool",
7665     "PRelu",
7666     "PriorBox",
7667     "Proposal",
7668     "QuantizedAvgPool",
7669     "QuantizedBiasAdd",
7670     "QuantizedConcat",
7671     "QuantizedLogistic",
7672     "QuantizedMatMul",
7673     "QuantizedMaxPool",
7674     "QuantizedRelu",
7675     "QuantizedRelu6",
7676     "QuantizedReshape",
7677     "QuantizedSoftmax",
7678     "QuantizeMaxMin",
7679     "QuantizeV2",
7680     "Range",
7681     "Rank",
7682     "ReduceJoin",
7683     "ReductionParam",
7684     "Relu",
7685     "Relu6",
7686     "RequantizationRange",
7687     "Requantize",
7688     "Reshape",
7689     "Resize",
7690     "RoiPooling",
7691     "Scale",
7692     "Selu",
7693     "Size",
7694     "Slice",
7695     "SliceTf",
7696     "SpaceBatch",
7697     "SqueezeParam",
7698     "StridedSliceParam",
7699     "TensorConvertInfo",
7700     "TfQuantizedConv2D",
7701     "TopKV2",
7702     "Transpose",
7703     "UnaryOp",
7704     "MomentsParam",
7705     "RNNParam",
7706     "BatchMatMulParam",
7707     "QuantizedFloatParam",
7708     "DepthSpaceParam",
7709     "EltwiseInt8",
7710     "ReverseSequenceParam",
7711     "Extra",
7712     "Pool3D",
7713     "Convolution3D",
7714     "ELU",
7715     "DetectionPostProcessParam",
7716     "OneHotParam",
7717     "PadParam",
7718     "WhileParam",
7719     "IfParam",
7720     "RandomUniform",
7721     "LayerNorm",
7722     "TensorArray",
7723     "LSTMBlockCell",
7724     "GridSample",
7725     "LoopParam"
7726   };
7727   static const flatbuffers::TypeTable tt = {
7728     flatbuffers::ST_UNION, 93, type_codes, type_refs, nullptr, names
7729   };
7730   return &tt;
7731 }
7732 
7733 inline const flatbuffers::TypeTable *ForwardTypeTypeTable() {
7734   static const flatbuffers::TypeCode type_codes[] = {
7735     { flatbuffers::ET_CHAR, 0, 0 },
7736     { flatbuffers::ET_CHAR, 0, 0 },
7737     { flatbuffers::ET_CHAR, 0, 0 },
7738     { flatbuffers::ET_CHAR, 0, 0 },
7739     { flatbuffers::ET_CHAR, 0, 0 }
7740   };
7741   static const flatbuffers::TypeFunction type_refs[] = {
7742     ForwardTypeTypeTable
7743   };
7744   static const char * const names[] = {
7745     "CPU",
7746     "METAL",
7747     "OPENCL",
7748     "OPENGLES",
7749     "VULKAN"
7750   };
7751   static const flatbuffers::TypeTable tt = {
7752     flatbuffers::ST_ENUM, 5, type_codes, type_refs, nullptr, names
7753   };
7754   return &tt;
7755 }
7756 
7757 inline const flatbuffers::TypeTable *UsageTypeTable() {
7758   static const flatbuffers::TypeCode type_codes[] = {
7759     { flatbuffers::ET_CHAR, 0, 0 },
7760     { flatbuffers::ET_CHAR, 0, 0 },
7761     { flatbuffers::ET_CHAR, 0, 0 }
7762   };
7763   static const flatbuffers::TypeFunction type_refs[] = {
7764     UsageTypeTable
7765   };
7766   static const char * const names[] = {
7767     "INFERENCE",
7768     "TRAIN",
7769     "INFERENCE_STATIC"
7770   };
7771   static const flatbuffers::TypeTable tt = {
7772     flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, names
7773   };
7774   return &tt;
7775 }
7776 
7777 inline const flatbuffers::TypeTable *PluginTypeTable() {
7778   static const flatbuffers::TypeCode type_codes[] = {
7779     { flatbuffers::ET_STRING, 0, -1 },
7780     { flatbuffers::ET_SEQUENCE, 1, 0 }
7781   };
7782   static const flatbuffers::TypeFunction type_refs[] = {
7783     AttributeTypeTable
7784   };
7785   static const char * const names[] = {
7786     "type",
7787     "attr"
7788   };
7789   static const flatbuffers::TypeTable tt = {
7790     flatbuffers::ST_TABLE, 2, type_codes, type_refs, nullptr, names
7791   };
7792   return &tt;
7793 }
7794 
7795 inline const flatbuffers::TypeTable *ExtraTypeTable() {
7796   static const flatbuffers::TypeCode type_codes[] = {
7797     { flatbuffers::ET_STRING, 0, -1 },
7798     { flatbuffers::ET_STRING, 0, -1 },
7799     { flatbuffers::ET_CHAR, 1, -1 },
7800     { flatbuffers::ET_SEQUENCE, 1, 0 }
7801   };
7802   static const flatbuffers::TypeFunction type_refs[] = {
7803     AttributeTypeTable
7804   };
7805   static const char * const names[] = {
7806     "type",
7807     "engine",
7808     "info",
7809     "attr"
7810   };
7811   static const flatbuffers::TypeTable tt = {
7812     flatbuffers::ST_TABLE, 4, type_codes, type_refs, nullptr, names
7813   };
7814   return &tt;
7815 }
7816 
7817 inline const flatbuffers::TypeTable *StringVecTypeTable() {
7818   static const flatbuffers::TypeCode type_codes[] = {
7819     { flatbuffers::ET_STRING, 1, -1 }
7820   };
7821   static const char * const names[] = {
7822     "data"
7823   };
7824   static const flatbuffers::TypeTable tt = {
7825     flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
7826   };
7827   return &tt;
7828 }
7829 
7830 inline const flatbuffers::TypeTable *WhileParamTypeTable() {
7831   static const flatbuffers::TypeCode type_codes[] = {
7832     { flatbuffers::ET_STRING, 0, -1 },
7833     { flatbuffers::ET_STRING, 0, -1 },
7834     { flatbuffers::ET_SEQUENCE, 1, 0 },
7835     { flatbuffers::ET_STRING, 1, -1 },
7836     { flatbuffers::ET_SEQUENCE, 1, 0 }
7837   };
7838   static const flatbuffers::TypeFunction type_refs[] = {
7839     StringVecTypeTable
7840   };
7841   static const char * const names[] = {
7842     "cond_graph",
7843     "body_graph",
7844     "aliases_inputs",
7845     "aliases_outputs",
7846     "aliases_updates"
7847   };
7848   static const flatbuffers::TypeTable tt = {
7849     flatbuffers::ST_TABLE, 5, type_codes, type_refs, nullptr, names
7850   };
7851   return &tt;
7852 }
7853 
7854 inline const flatbuffers::TypeTable *IfParamTypeTable() {
7855   static const flatbuffers::TypeCode type_codes[] = {
7856     { flatbuffers::ET_STRING, 0, -1 },
7857     { flatbuffers::ET_STRING, 0, -1 },
7858     { flatbuffers::ET_SEQUENCE, 1, 0 },
7859     { flatbuffers::ET_SEQUENCE, 1, 0 }
7860   };
7861   static const flatbuffers::TypeFunction type_refs[] = {
7862     StringVecTypeTable
7863   };
7864   static const char * const names[] = {
7865     "then_graph",
7866     "else_graph",
7867     "aliases_inputs",
7868     "aliases_outputs"
7869   };
7870   static const flatbuffers::TypeTable tt = {
7871     flatbuffers::ST_TABLE, 4, type_codes, type_refs, nullptr, names
7872   };
7873   return &tt;
7874 }
7875 
7876 inline const flatbuffers::TypeTable *RegionCommandTypeTable() {
7877   static const flatbuffers::TypeCode type_codes[] = {
7878     { flatbuffers::ET_SEQUENCE, 0, 0 },
7879     { flatbuffers::ET_INT, 1, -1 },
7880     { flatbuffers::ET_INT, 1, -1 },
7881     { flatbuffers::ET_INT, 1, -1 },
7882     { flatbuffers::ET_SEQUENCE, 1, 1 },
7883     { flatbuffers::ET_INT, 0, -1 },
7884     { flatbuffers::ET_INT, 1, -1 }
7885   };
7886   static const flatbuffers::TypeFunction type_refs[] = {
7887     OpTypeTable,
7888     ViewTypeTable
7889   };
7890   static const char * const names[] = {
7891     "op",
7892     "steps",
7893     "size",
7894     "indexes",
7895     "view",
7896     "fuse",
7897     "iterIndexes"
7898   };
7899   static const flatbuffers::TypeTable tt = {
7900     flatbuffers::ST_TABLE, 7, type_codes, type_refs, nullptr, names
7901   };
7902   return &tt;
7903 }
7904 
7905 inline const flatbuffers::TypeTable *LoopParamTypeTable() {
7906   static const flatbuffers::TypeCode type_codes[] = {
7907     { flatbuffers::ET_INT, 0, -1 },
7908     { flatbuffers::ET_INT, 1, -1 },
7909     { flatbuffers::ET_INT, 1, -1 },
7910     { flatbuffers::ET_SEQUENCE, 1, 0 },
7911     { flatbuffers::ET_BOOL, 0, -1 },
7912     { flatbuffers::ET_INT, 0, -1 },
7913     { flatbuffers::ET_SEQUENCE, 1, 1 }
7914   };
7915   static const flatbuffers::TypeFunction type_refs[] = {
7916     TensorDescribeTypeTable,
7917     RegionCommandTypeTable
7918   };
7919   static const char * const names[] = {
7920     "tensorNumber",
7921     "outputIndexes",
7922     "inputIndexes",
7923     "midTensors",
7924     "parallel",
7925     "loopNumber",
7926     "commands"
7927   };
7928   static const flatbuffers::TypeTable tt = {
7929     flatbuffers::ST_TABLE, 7, type_codes, type_refs, nullptr, names
7930   };
7931   return &tt;
7932 }
7933 
7934 inline const flatbuffers::TypeTable *OpTypeTable() {
7935   static const flatbuffers::TypeCode type_codes[] = {
7936     { flatbuffers::ET_INT, 1, -1 },
7937     { flatbuffers::ET_UTYPE, 0, 0 },
7938     { flatbuffers::ET_SEQUENCE, 0, 0 },
7939     { flatbuffers::ET_STRING, 0, -1 },
7940     { flatbuffers::ET_INT, 1, -1 },
7941     { flatbuffers::ET_INT, 0, 1 },
7942     { flatbuffers::ET_CHAR, 0, 2 }
7943   };
7944   static const flatbuffers::TypeFunction type_refs[] = {
7945     OpParameterTypeTable,
7946     OpTypeTypeTable,
7947     MNN_DATA_FORMATTypeTable
7948   };
7949   static const char * const names[] = {
7950     "inputIndexes",
7951     "main_type",
7952     "main",
7953     "name",
7954     "outputIndexes",
7955     "type",
7956     "defaultDimentionFormat"
7957   };
7958   static const flatbuffers::TypeTable tt = {
7959     flatbuffers::ST_TABLE, 7, type_codes, type_refs, nullptr, names
7960   };
7961   return &tt;
7962 }
7963 
7964 inline const flatbuffers::TypeTable *ViewTypeTable() {
7965   static const flatbuffers::TypeCode type_codes[] = {
7966     { flatbuffers::ET_INT, 0, -1 },
7967     { flatbuffers::ET_INT, 1, -1 }
7968   };
7969   static const char * const names[] = {
7970     "offset",
7971     "stride"
7972   };
7973   static const flatbuffers::TypeTable tt = {
7974     flatbuffers::ST_TABLE, 2, type_codes, nullptr, nullptr, names
7975   };
7976   return &tt;
7977 }
7978 
7979 inline const flatbuffers::TypeTable *RegionTypeTable() {
7980   static const flatbuffers::TypeCode type_codes[] = {
7981     { flatbuffers::ET_SEQUENCE, 0, 0 },
7982     { flatbuffers::ET_SEQUENCE, 0, 0 },
7983     { flatbuffers::ET_INT, 1, -1 },
7984     { flatbuffers::ET_INT, 0, -1 }
7985   };
7986   static const flatbuffers::TypeFunction type_refs[] = {
7987     ViewTypeTable
7988   };
7989   static const char * const names[] = {
7990     "src",
7991     "dst",
7992     "size",
7993     "origin"
7994   };
7995   static const flatbuffers::TypeTable tt = {
7996     flatbuffers::ST_TABLE, 4, type_codes, type_refs, nullptr, names
7997   };
7998   return &tt;
7999 }
8000 
8001 inline const flatbuffers::TypeTable *TensorDescribeTypeTable() {
8002   static const flatbuffers::TypeCode type_codes[] = {
8003     { flatbuffers::ET_SEQUENCE, 0, 0 },
8004     { flatbuffers::ET_INT, 0, -1 },
8005     { flatbuffers::ET_STRING, 0, -1 },
8006     { flatbuffers::ET_SEQUENCE, 1, 1 },
8007     { flatbuffers::ET_SEQUENCE, 0, 2 }
8008   };
8009   static const flatbuffers::TypeFunction type_refs[] = {
8010     BlobTypeTable,
8011     RegionTypeTable,
8012     TensorQuantInfoTypeTable
8013   };
8014   static const char * const names[] = {
8015     "blob",
8016     "index",
8017     "name",
8018     "regions",
8019     "quantInfo"
8020   };
8021   static const flatbuffers::TypeTable tt = {
8022     flatbuffers::ST_TABLE, 5, type_codes, type_refs, nullptr, names
8023   };
8024   return &tt;
8025 }
8026 
8027 inline const flatbuffers::TypeTable *SubGraphProtoTypeTable() {
8028   static const flatbuffers::TypeCode type_codes[] = {
8029     { flatbuffers::ET_STRING, 0, -1 },
8030     { flatbuffers::ET_INT, 1, -1 },
8031     { flatbuffers::ET_INT, 1, -1 },
8032     { flatbuffers::ET_STRING, 1, -1 },
8033     { flatbuffers::ET_SEQUENCE, 1, 0 },
8034     { flatbuffers::ET_SEQUENCE, 1, 1 }
8035   };
8036   static const flatbuffers::TypeFunction type_refs[] = {
8037     OpTypeTable,
8038     TensorDescribeTypeTable
8039   };
8040   static const char * const names[] = {
8041     "name",
8042     "inputs",
8043     "outputs",
8044     "tensors",
8045     "nodes",
8046     "extraTensorDescribe"
8047   };
8048   static const flatbuffers::TypeTable tt = {
8049     flatbuffers::ST_TABLE, 6, type_codes, type_refs, nullptr, names
8050   };
8051   return &tt;
8052 }
8053 
8054 inline const flatbuffers::TypeTable *TensorQuantInfoTypeTable() {
8055   static const flatbuffers::TypeCode type_codes[] = {
8056     { flatbuffers::ET_FLOAT, 0, -1 },
8057     { flatbuffers::ET_FLOAT, 0, -1 },
8058     { flatbuffers::ET_FLOAT, 0, -1 },
8059     { flatbuffers::ET_FLOAT, 0, -1 },
8060     { flatbuffers::ET_INT, 0, 0 }
8061   };
8062   static const flatbuffers::TypeFunction type_refs[] = {
8063     DataTypeTypeTable
8064   };
8065   static const char * const names[] = {
8066     "scale",
8067     "zero",
8068     "min",
8069     "max",
8070     "type"
8071   };
8072   static const flatbuffers::TypeTable tt = {
8073     flatbuffers::ST_TABLE, 5, type_codes, type_refs, nullptr, names
8074   };
8075   return &tt;
8076 }
8077 
8078 inline const flatbuffers::TypeTable *NetTypeTable() {
8079   static const flatbuffers::TypeCode type_codes[] = {
8080     { flatbuffers::ET_STRING, 0, -1 },
8081     { flatbuffers::ET_SEQUENCE, 1, 0 },
8082     { flatbuffers::ET_SEQUENCE, 0, 1 },
8083     { flatbuffers::ET_SEQUENCE, 1, 2 },
8084     { flatbuffers::ET_STRING, 1, -1 },
8085     { flatbuffers::ET_CHAR, 0, 3 },
8086     { flatbuffers::ET_CHAR, 0, 4 },
8087     { flatbuffers::ET_STRING, 1, -1 },
8088     { flatbuffers::ET_INT, 0, -1 },
8089     { flatbuffers::ET_CHAR, 0, 5 },
8090     { flatbuffers::ET_SEQUENCE, 1, 6 }
8091   };
8092   static const flatbuffers::TypeFunction type_refs[] = {
8093     TensorDescribeTypeTable,
8094     GpuLibraryTypeTable,
8095     OpTypeTable,
8096     ForwardTypeTypeTable,
8097     NetSourceTypeTable,
8098     UsageTypeTable,
8099     SubGraphProtoTypeTable
8100   };
8101   static const char * const names[] = {
8102     "bizCode",
8103     "extraTensorDescribe",
8104     "gpulibrary",
8105     "oplists",
8106     "outputName",
8107     "preferForwardType",
8108     "sourceType",
8109     "tensorName",
8110     "tensorNumber",
8111     "usage",
8112     "subgraphs"
8113   };
8114   static const flatbuffers::TypeTable tt = {
8115     flatbuffers::ST_TABLE, 11, type_codes, type_refs, nullptr, names
8116   };
8117   return &tt;
8118 }
8119 
8120 inline const MNN::Net *GetNet(const void *buf) {
8121   return flatbuffers::GetRoot<MNN::Net>(buf);
8122 }
8123 
8124 inline const MNN::Net *GetSizePrefixedNet(const void *buf) {
8125   return flatbuffers::GetSizePrefixedRoot<MNN::Net>(buf);
8126 }
8127 
8128 inline bool VerifyNetBuffer(
8129     flatbuffers::Verifier &verifier) {
8130   return verifier.VerifyBuffer<MNN::Net>(nullptr);
8131 }
8132 
8133 inline bool VerifySizePrefixedNetBuffer(
8134     flatbuffers::Verifier &verifier) {
8135   return verifier.VerifySizePrefixedBuffer<MNN::Net>(nullptr);
8136 }
8137 
8138 inline void FinishNetBuffer(
8139     flatbuffers::FlatBufferBuilder &fbb,
8140     flatbuffers::Offset<MNN::Net> root) {
8141   fbb.Finish(root);
8142 }
8143 
8144 inline void FinishSizePrefixedNetBuffer(
8145     flatbuffers::FlatBufferBuilder &fbb,
8146     flatbuffers::Offset<MNN::Net> root) {
8147   fbb.FinishSizePrefixed(root);
8148 }
8149 
8150 inline std::unique_ptr<NetT> UnPackNet(
8151     const void *buf,
8152     const flatbuffers::resolver_function_t *res = nullptr) {
8153   return std::unique_ptr<NetT>(GetNet(buf)->UnPack(res));
8154 }
8155 
8156 }  // namespace MNN
8157 
8158 #endif  // FLATBUFFERS_GENERATED_MNN_MNN_H_
8159