private async Task <ISafeBytes> TransformCharToSafeBytesAsync(char c, Encoding encoding) { var bytes = _textService.GetBytes(c, encoding); var stream = new SafeMemoryStream(); await stream.WriteAsync(bytes, 0, bytes.Length) .ConfigureAwait(false); var safeBytes = _safeBytesFactory.Create(); await safeBytes.AppendManyAsync(stream).ConfigureAwait(false); return(safeBytes); }
/// <inheritdoc /> /// <inheritdoc cref="DisposableBase.ThrowIfDisposed"/> /// <exception cref="ArgumentNullException"> <paramref name="character" /> is <see langword="null" />. </exception> /// <exception cref="ArgumentOutOfRangeException"> <paramref name="character" /> is null or empty. </exception> public async Task InsertAsync(int position, ISafeBytes character, Encoding encoding = Encoding.Utf16LittleEndian) { ThrowIfDisposed(); if (position < 0 || position > Length) { throw new ArgumentOutOfRangeException(nameof(position)); } if (SafeBytes.IsNullOrEmpty(character)) { throw new ArgumentNullException(nameof(character)); } if (encoding != InnerEncoding) { character = await ConvertEncodingAsync(character, encoding, InnerEncoding) .ConfigureAwait(false); } _charBytesList.Insert(position, character); }
/// <inheritdoc /> /// <exception cref="ArgumentNullException"><paramref name="character" /> is <see langword="null" />. </exception> /// <exception cref="ArgumentOutOfRangeException">If position is less than zero or higher than the length. </exception> /// <inheritdoc cref="DisposableBase.ThrowIfDisposed"/> public Task AppendAsync(ISafeBytes character, Encoding encoding = Encoding.Utf16LittleEndian) { return(InsertAsync(Length, character, encoding)); }
private async Task <char> TransformSafeBytesToCharAsync(IReadOnlySafeBytes safeBytes, Encoding encoding) { var byteBuffer = await safeBytes.RevealDecryptedBytesAsync().ConfigureAwait(false); try { return(_textService.GetChars(byteBuffer, encoding).First()); } finally { Array.Clear(byteBuffer, 0, byteBuffer.Length); } }
private async Task <ISafeBytes> ConvertEncodingAsync(IReadOnlySafeBytes character, Encoding sourceEncoding, Encoding destinationEncoding) { var buffer = await character.RevealDecryptedBytesAsync().ConfigureAwait(false); try { buffer = _textService.Convert(sourceEncoding, destinationEncoding, buffer); var safeBytes = _safeBytesFactory.Create(); var stream = new SafeMemoryStream(buffer); await safeBytes.AppendManyAsync(stream) .ConfigureAwait(false); return(safeBytes); } finally { Array.Clear(buffer, 0, buffer.Length); } }