blob: acf366f70f36a9706c246e632f24c23dccb27a90 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
// -*- mode: java; -*-
// Scanner; a simple string parser.
struct Scan {
int !x; // Cursor
u8[~] buf; // Immutable byte array, must be set in 2nd constructor
new Scan = { u8[~] b ->
buf = b;
};
// Skip whitespace
val skip = { ->
while( x < buf# && buf[x] <= ' ' )
x++;
return self;
};
// True if find required character, and skip it; else False.
val match = { u8 c ->
skip();
if( buf[x] != c ) return false;
x++;
return true;
};
// Parse a simple number
val number = { ->
skip();
bool neg = match('-');
i64 n = 0;
while( '0' <= buf[x] & buf[x] <= '9' )
n = n*10 + (buf[x++] - '0');
return neg ? -n : n;
};
};
|