class · System.IO
StringReader
public class StringReader : TextReader
Text read from a str.
- Kind
- class
- Namespace
- System.IO
- Assembly
- System.Core
- Access
- public
- Source file
TextIO.ant
Inheritance
- Base classes
-
AnyTextReaderStringReader
Constructors
new(str text)
#
Methods
Inherited members (6)
Source
StringReader as Antril, decompiled from its 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;
}
}
}