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
-
AnyTextReaderStringReader
Constructores
new(str text)
#
Métodos
Miembros heredados (6)
Código fuente
StringReader en Antril, descompilado a partir de su Larva HIR.
// 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;
}
}
}