Exemplo n.º 1
0
        /// <summary>Encoded byte buffer into new string.</summary>
        /// <param name="source">Decoded buffer.</param>
        /// <param name="arrayPool">Potentially <see cref="ArrayPool{T}"/> to allocate array
        /// for intermediate results.</param>
        /// <returns>New encoded string.</returns>
        public string Encode(ReadOnlySpan <byte> source, ArrayPool <char> arrayPool)
        {
            var targetLength = EncodedLength(source);

            if (targetLength == 0)
            {
                return(string.Empty);
            }

            var pooled = arrayPool.TryRent(sizeof(char), targetLength);

            try
            {
                var target = pooled ?? new char[targetLength];
                var used   = EncodeImpl(source, target.AsSpan());
                return(new string(target, 0, used));
            }
            finally
            {
                arrayPool.TryReturn(pooled);
            }
        }