| File: InternalUtilities\LittleEndianReader.cs | Web Access |
| Project: src\roslyn\src\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj (Microsoft.CodeAnalysis) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using Roslyn.Utilities; using static System.Buffers.Binary.BinaryPrimitives; namespace Microsoft.CodeAnalysis { /// <summary> /// A Span-compatible version of <see cref="System.IO.BinaryReader"/>. /// </summary> internal ref struct LittleEndianReader { private ReadOnlySpan<byte> _span; public LittleEndianReader(ReadOnlySpan<byte> span) { _span = span; } internal uint ReadUInt32() { var result = ReadUInt32LittleEndian(_span); _span = _span.Slice(sizeof(uint)); return result; } internal byte ReadByte() { var result = _span[0]; _span = _span.Slice(sizeof(byte)); return result; } internal ushort ReadUInt16() { var result = ReadUInt16LittleEndian(_span); _span = _span.Slice(sizeof(ushort)); return result; } internal ReadOnlySpan<byte> ReadBytes(int byteCount) { var result = _span.Slice(0, byteCount); _span = _span.Slice(byteCount); return result; } internal int ReadInt32() { var result = ReadInt32LittleEndian(_span); _span = _span.Slice(sizeof(int)); return result; } internal byte[] ReadReversed(int byteCount) { var result = ReadBytes(byteCount).ToArray(); result.ReverseContents(); return result; } } }