private static void GenerateCloneMethod( CodeWriter codeWriter, CompilerOptions options, ITypeModel typeModel, Dictionary <Type, string> methodNameMap) { string typeName = typeModel.GetGlobalCompilableTypeName(); CodeGeneratedMethod method = typeModel.CreateCloneMethodBody(new CloneCodeGenContext("item", methodNameMap)); if (!typeModel.ClrType.IsValueType) { typeName += "?"; if (options.NullableWarnings == true) { codeWriter.AppendLine("[return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"item\")]"); } } codeWriter.AppendLine(method.GetMethodImplAttribute()); codeWriter.AppendLine($"public static {typeName} Clone({typeName} item)"); using (codeWriter.WithBlock()) { codeWriter.AppendLine(method.MethodBody); } }
internal static string CreateParseBody( ITypeModel itemTypeModel, string createFlatBufferVector, ParserCodeGenContext context) { FlatSharpInternal.Assert(!string.IsNullOrEmpty(context.TableFieldContextVariableName), "expecting table field context"); if (context.Options.GreedyDeserialize) { string body = $"({createFlatBufferVector}).FlatBufferVectorToList()"; if (!context.Options.GenerateMutableObjects) { body += ".AsReadOnly()"; } return($"return {body};"); } else if (context.Options.Lazy) { return($"return {createFlatBufferVector};"); } else { FlatSharpInternal.Assert(context.Options.Progressive, "expecting progressive"); return($"return new FlatBufferProgressiveVector<{itemTypeModel.GetGlobalCompilableTypeName()}, {context.InputBufferTypeName}>({createFlatBufferVector});"); } }
public static (string classDef, string className) CreateFlatBufferVectorOfUnionSubclass( ITypeModel typeModel, ParserCodeGenContext context) { string className = $"FlatBufferUnionVector_{Guid.NewGuid():n}"; context = context with { InputBufferTypeName = "TInputBuffer", InputBufferVariableName = "memory", IsOffsetByRef = true, TableFieldContextVariableName = "fieldContext", OffsetVariableName = "temp", }; string classDef = $@" public sealed class {className}<{context.InputBufferTypeName}> : FlatBufferVectorOfUnion<{typeModel.GetGlobalCompilableTypeName()}, {context.InputBufferTypeName}> where {context.InputBufferTypeName} : {nameof(IInputBuffer)} {{ public {className}( {context.InputBufferTypeName} memory, int discriminatorOffset, int offsetVectorOffset, {nameof(TableFieldContext)} fieldContext) : base(memory, discriminatorOffset, offsetVectorOffset, fieldContext) {{ }} protected override void ParseItem( {context.InputBufferTypeName} memory, int discriminatorOffset, int offsetOffset, {nameof(TableFieldContext)} {context.TableFieldContextVariableName}, out {typeModel.GetGlobalCompilableTypeName()} item) {{ var {context.OffsetVariableName} = (discriminatorOffset, offsetOffset); item = {context.GetParseInvocation(typeModel.ClrType)}; }} }} "; return(classDef, className); }