blob: 0b5c3827cfc463c32e41d7515d2545b9e937f685 (
plain) (
blame)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
Import qbar/io/Reader.qbar;
Import qbar/lang/Maybe.qbar;
Import qbar/lang/System.qbar;
Namespace BufferedReader {
Incorporate Reader;
Struct BufferedReader extends Reader {
let new BufferedReader( reader ) = do {
this.init( reader );
if reader isa Reader {
this.reader <- reader;
} else {
this.reader <- new Reader( reader );
}
this.buffer <- [];
this.bufSize <- 4096;
this.bufCur <- 0;
this.dbg <- 1;
System.printStrLn( "START" );
this.readBuffer();
}
let read = do {
if this.bufCur == this.bufSize {
this.readBuffer();
this.bufCur <- 0;
}
yeild <- this.buffer#this.bufCur;
this.bufCur <- this.bufCur + 1;
return yeild;
}
let readBuffer = do {
System.printStrLn( "Reading Buffer " ++ this.dbg );
this.buffer <- this.readBytes( this.bufSize );
this.dbg <- this.dbg + 1;
}
let readLine = do {
str <- "" ++ "";
i <- 0;
while ( i <- this.read() ) != 10 {
if i == -1 {
return if str.length == 0 then Maybe.new Null()
else Maybe.new Maybe( str );
}
str +< i as Character;
}
return Maybe.new Maybe(str);
}
}
}
|