private static ComposerMethodNames GetDefaultNames(int index) => new ComposerMethodNames { TryDeserializeSequence = MemberMethod.TryDeserializeState(index), TryDeserializeSpan = MemberMethod.TryDeserializeState(index), DeserializeSequence = MemberMethod.TryDeserializeState(index), DeserializeSpan = MemberMethod.TryDeserializeState(index), TrySerialize = MemberMethod.TrySerializeState(index), Serialize = MemberMethod.SerializeState(index), };
private IReadOnlyList <MethodSignature> GetMethodSignatures(IComponentProvider provider) { var boolSymbol = _symbols.GetSymbol <bool>(); var intSymbol = _symbols.GetSymbol <int>(); var memberType = _member.ReturnType !.Symbol; // Incoming Data type var discovery = new MethodArg(RefKind.In, provider.DiscoveryType, "parent"); var sourceType = new MethodArg(RefKind.In, _member.ContainingFullType.Symbol, "source"); // Buffers var readOnlySpan = new MethodArg(_symbols.GetSymbol(typeof(ReadOnlySpan <byte>)), "readOnlySpan"); var span = new MethodArg(_symbols.GetSymbol(typeof(Span <byte>)), "span"); var cursor = new MethodArg(RefKind.Ref, _symbols.GetSymbol(typeof(SequenceCursor <byte>)), "cursor"); // Return Data var readBytes = new MethodArg(RefKind.Out, intSymbol, "readBytes"); var writtenBytes = new MethodArg(RefKind.Out, intSymbol, "writtenBytes"); var result = new MethodArg(RefKind.Out, memberType, "result"); return(new MethodSignature[] { MethodSignatureBuilder.CreateConstructor(_typeName, (provider.DiscoveryType, "parser")), MethodSignatureBuilder.CreateConstructor(_typeName, (provider.DiscoveryType, "parser"), (RefKind.Out, boolSymbol, "isSuccess")), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TryDeserializeState(0)) .AddArgument(discovery, readOnlySpan, readBytes, result) .WithReturn <bool>(), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TryDeserializeState(0)) .AddArgument(discovery, cursor, result) .WithReturn <bool>(), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.DeserializeState(0)) .AddArgument(discovery, readOnlySpan, result) .WithReturn(memberType), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.DeserializeState(0)) .AddArgument(discovery, cursor) .WithReturn(memberType), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TrySerializeState(0)) .AddArgument(discovery, sourceType, span, writtenBytes) .WithReturn(boolSymbol), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.SerializeState(0)) .AddArgument(discovery, sourceType, span) .WithReturn(intSymbol), MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.GetLengthState(0)) .AddArgument(discovery, sourceType) .WithReturn(intSymbol) });
public override void TryDeserializeSpan(CodeNodeBuilder node, BufferArgs readOnlySpan, OutArgs <int> outReadBytes, OutArgs <object> outResult) => node.Return($"{MemberMethod.TryDeserializeState(0)}({parent}, {readOnlySpan}, out {outReadBytes}, out {outResult})");
public override void TryDeserializeSequence(CodeNodeBuilder node, BufferArgs refSequenceCursor, OutArgs <object> outResult) => node.Return($"{MemberMethod.TryDeserializeState(0)}({parent}, ref {refSequenceCursor}, out {outResult})");
public override void DeserializeSequence(CodeNodeBuilder node, BufferArgs refSequenceCursor) => node.AddPlain($"{MemberMethod.TryDeserializeState(0)}({parent}, ref {refSequenceCursor})");