Exemplo n.º 1
0
    public override CodeGeneratedMethod CreateParseMethodBody(ParserCodeGenContext context)
    {
        if (!context.Options.GreedyDeserialize)
        {
            throw new InvalidFlatBufferDefinitionException("Array vectors may only be used with Greedy serializers.");
        }

        var(classDef, className) = FlatBufferVectorHelpers.CreateFlatBufferVectorOfUnionSubclass(
            this.ItemTypeModel,
            context);

        FlatSharpInternal.Assert(!string.IsNullOrEmpty(context.TableFieldContextVariableName), "expecting table field context");

        string createFlatBufferVector =
            $@"new {className}<{context.InputBufferTypeName}>(
            {context.InputBufferVariableName}, 
            {context.OffsetVariableName}.offset0 + {context.InputBufferVariableName}.{nameof(InputBufferExtensions.ReadUOffset)}({context.OffsetVariableName}.offset0), 
            {context.OffsetVariableName}.offset1 + {context.InputBufferVariableName}.{nameof(InputBufferExtensions.ReadUOffset)}({context.OffsetVariableName}.offset1),
            {context.TableFieldContextVariableName})";

        string body = $"return ({createFlatBufferVector}).ToArray();";

        return(new CodeGeneratedMethod(body)
        {
            ClassDefinition = classDef
        });
    }
    public override CodeGeneratedMethod CreateParseMethodBody(ParserCodeGenContext context)
    {
        var(classDef, className) = FlatBufferVectorHelpers.CreateFlatBufferVectorOfUnionSubclass(
            this.ItemTypeModel,
            context);

        string createFlatBufferVector =
            $@"new {className}<{context.InputBufferTypeName}>(
                {context.InputBufferVariableName}, 
                {context.OffsetVariableName}.offset0 + {context.InputBufferVariableName}.{nameof(InputBufferExtensions.ReadUOffset)}({context.OffsetVariableName}.offset0), 
                {context.OffsetVariableName}.offset1 + {context.InputBufferVariableName}.{nameof(InputBufferExtensions.ReadUOffset)}({context.OffsetVariableName}.offset1),
                {context.TableFieldContextVariableName})";

        return(new CodeGeneratedMethod(ListVectorTypeModel.CreateParseBody(
                                           this.ItemTypeModel,
                                           createFlatBufferVector,
                                           context))
        {
            ClassDefinition = classDef
        });
    }