1 
2 using System.Threading.Tasks;
3 
4 namespace System.Xml {
5     internal static partial class BinHexEncoder {
6 
EncodeAsync( byte[] buffer, int index, int count, XmlWriter writer )7         internal static async Task EncodeAsync( byte[] buffer, int index, int count, XmlWriter writer ) {
8             if ( buffer == null ) {
9                 throw new ArgumentNullException( "buffer" );
10             }
11             if ( index < 0 ) {
12                 throw new ArgumentOutOfRangeException( "index" );
13             }
14             if ( count < 0 ) {
15                 throw new ArgumentOutOfRangeException( "count" );
16             }
17             if ( count > buffer.Length - index ) {
18                 throw new ArgumentOutOfRangeException( "count" );
19             }
20 
21             char[] chars = new char[ ( count * 2 ) < CharsChunkSize ? ( count * 2 ) : CharsChunkSize ];
22             int endIndex = index + count;
23             while ( index < endIndex ) {
24                 int cnt = ( count < CharsChunkSize/2 ) ? count : CharsChunkSize/2;
25                 int charCount = Encode( buffer, index, cnt, chars );
26                 await writer.WriteRawAsync( chars, 0, charCount ).ConfigureAwait(false);
27                 index += cnt;
28                 count -= cnt;
29             }
30         }
31 
32     } // class
33 } // namespace
34