Microsoft.AspNet.Server.Kestrel.Infrastructure.MemoryPoolIterator2.GetString C# (CSharp) Method

GetString() public method

public GetString ( MemoryPoolIterator2 end ) : string
end MemoryPoolIterator2
return string
        public string GetString(MemoryPoolIterator2 end)
        {
            if (IsDefault || end.IsDefault)
            {
                return default(string);
            }
            if (end._block == _block)
            {
                return _utf8.GetString(_block.Array, _index, end._index - _index);
            }

            var decoder = _utf8.GetDecoder();

            var length = GetLength(end);
            var charLength = length * 2;
            var chars = new char[charLength];
            var charIndex = 0;

            var block = _block;
            var index = _index;
            var remaining = length;
            while (true)
            {
                int bytesUsed;
                int charsUsed;
                bool completed;
                var following = block.End - index;
                if (remaining <= following)
                {
                    decoder.Convert(
                        block.Array,
                        index,
                        remaining,
                        chars,
                        charIndex,
                        charLength - charIndex,
                        true,
                        out bytesUsed,
                        out charsUsed,
                        out completed);
                    return new string(chars, 0, charIndex + charsUsed);
                }
                else if (block.Next == null)
                {
                    decoder.Convert(
                        block.Array,
                        index,
                        following,
                        chars,
                        charIndex,
                        charLength - charIndex,
                        true,
                        out bytesUsed,
                        out charsUsed,
                        out completed);
                    return new string(chars, 0, charIndex + charsUsed);
                }
                else
                {
                    decoder.Convert(
                        block.Array,
                        index,
                        following,
                        chars,
                        charIndex,
                        charLength - charIndex,
                        false,
                        out bytesUsed,
                        out charsUsed,
                        out completed);
                    charIndex += charsUsed;
                    remaining -= following;
                    block = block.Next;
                    index = block.Start;
                }
            }
        }