示例#1
0
        private unsafe static bool TryConvert <T>(IntPtr intPtr,
                                                  UIntPtr length,
                                                  TryReadItem <T> factory,
                                                  [MaybeNullWhen(false)] out T value)
        {
            if (intPtr != IntPtr.Zero)
            {
                var span   = new ReadOnlySpan <byte>((byte *)intPtr, (int)length);
                var reader = new BufferReader <byte>(span);
                return(factory(ref reader, out value));
            }

            value = default !;
示例#2
0
        public static bool TryReadHexToken <T>(this JsonReader reader, TryReadItem <T> factory, [MaybeNullWhen(false)] out T value)
        {
            if (reader.TokenType == JsonToken.String)
            {
                var hex = (string)reader.Value;

                using var memoryOwner = MemoryPool <byte> .Shared.Rent(hex.Length >> 1);

                if (hex.TryConvertHexString(memoryOwner.Memory.Span, out var bytesWritten))
                {
                    var bufferReader = new BufferReader <byte>(memoryOwner.Memory.Span.Slice(0, hex.Length >> 1));
                    if (factory(ref bufferReader, out value))
                    {
                        return(true);
                    }
                }
            }

            value = default !;