class · System.IO

StringReader

public class StringReader : TextReader

Text read from a str.

Tipo
class
Espacio de nombres
System.IO
Ensamblado
System.Core
Acceso
public
Archivo fuente
TextIO.ant

Herencia

Clases base
Any TextReader StringReader

Constructores

new(str text)
#

Métodos

override Peek() : i32
#

override

override Read() : i32
#

override

override ReadLine() : str?
#

override

override ReadToEnd() : str
#

override

Miembros privados e internos (3)

u8[] units
#

private

i32 at
#

private

Decode(bool take) : i32
#

private

Miembros heredados (6)

Código fuente

StringReader en Antril, descompilado a partir de su Larva HIR.

System.IO.StringReader.ant
// System.IO.StringReader — System.Core (decompiled from Larva HIR)

import System.Text;

into namespace System.IO
{
	/// Text read from a str.
	public class StringReader : TextReader
	{
		u8[] units;
		i32 at;

		Decode(bool take) : i32
		{
			if (at >= units.Length)
				return -1;
			i32 b = (i32)units[at];
			if (b < 128)
			{
				if (take)
					at++;
				return b;
			}
			i32 extra = b >= 240 ? 3 : b >= 224 ? 2 : 1;
			if (at + extra >= units.Length)
				extra = units.Length - at - 1;
			i32 point = b & (extra == 1 ? 31 : extra == 2 ? 15 : 7);
			loop (i32 k = 1..=extra)
				point = point << 6 | (i32)units[at + k] & 63;
			if (take)
				at += extra + 1;
			return point;
		}

		public:
			new(str text)
			{
				units = text.Units();
			}

			override Peek() : i32 => Decode(false);

			override Read() : i32 => Decode(true);

			override ReadLine() : str?
			{
				if (at >= units.Length)
					return null;
				i32 i = at;
				loop (i < units.Length && units[i] != 10)
					i++;
				i32 count = i > at && units[i - 1] == 13 ? i - at - 1 : i - at;
				str line = Encoding.UTF8.GetString(units, at, count);
				at = i < units.Length ? i + 1 : i;
				return line;
			}

			override ReadToEnd() : str
			{
				str rest = Encoding.UTF8.GetString(units, at, units.Length - at);
				at = units.Length;
				return rest;
			}
	}
}
Esc