| File: System\Xml\BinHexEncoderAsync.cs | Web Access |
| Project: src\runtime\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj (System.Private.Xml) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Threading.Tasks; namespace System.Xml { internal static partial class BinHexEncoder { internal static Task EncodeAsync(byte[] buffer, int index, int count, XmlWriter writer) { ArgumentNullException.ThrowIfNull(buffer); if (index < 0 || (uint)count > buffer.Length - index) { throw new ArgumentOutOfRangeException(index < 0 ? nameof(index) : nameof(count)); } return Core(buffer, index, count, writer); static async Task Core(byte[] buffer, int index, int count, XmlWriter writer) { char[] chars = new char[(count * 2) < CharsChunkSize ? (count * 2) : CharsChunkSize]; int endIndex = index + count; while (index < endIndex) { int cnt = (count < CharsChunkSize / 2) ? count : CharsChunkSize / 2; HexConverter.EncodeToUtf16(buffer.AsSpan(index, cnt), chars); await writer.WriteRawAsync(chars, 0, cnt * 2).ConfigureAwait(false); index += cnt; count -= cnt; } } } } // class } // namespace