-
Notifications
You must be signed in to change notification settings - Fork 4
/
std_io.go
53 lines (50 loc) · 1.25 KB
/
std_io.go
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
package bbvm
import (
"context"
"fmt"
"github.com/wenerme/bbvm/bbasm"
"io"
)
func NewPrintToWriter(out io.Writer) StdBuilder {
return func(rt bbasm.Runtime, std *Std, ) *Std {
return &Std{
PrintLnInt: func(ctx context.Context, v int) {
_, _ = fmt.Fprintln(out, v)
},
PrintLnString: func(ctx context.Context, v StringHandler) {
_, _ = fmt.Fprintln(out, std.StringGet(ctx, v))
},
PrintInt: func(ctx context.Context, v int) {
_, _ = fmt.Fprint(out, v)
},
PrintString: func(ctx context.Context, v StringHandler) {
_, _ = fmt.Fprint(out, std.StringGet(ctx, v))
},
PrintFloat: func(ctx context.Context, v float32) {
_, _ = fmt.Fprintf(out, "%.6f", v)
},
PrintChar: func(ctx context.Context, v int) {
_, _ = fmt.Fprintf(out, "%c", v)
},
}
}
}
func NewInputFromReader(in io.Reader) StdBuilder {
return func(rt bbasm.Runtime, std *Std) *Std {
return &Std{
InputInt: func(ctx context.Context) (v int) {
_, _ = fmt.Scanf("%d", &v)
return v
},
InputFloat: func(ctx context.Context) (v float32) {
_, _ = fmt.Scanf("%f", &v)
return
},
InputString: func(ctx context.Context, dst StringHandler) {
v := ""
_, _ = fmt.Scanf("%s", &v)
std.StringSet(ctx, dst, v)
},
}
}
}