This repository was archived by the owner on Apr 29, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreader.go
More file actions
84 lines (66 loc) · 1.32 KB
/
reader.go
File metadata and controls
84 lines (66 loc) · 1.32 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package oscar
import (
"io"
)
type Reader struct {
io.Reader
b []byte
i int
}
func MakeReader(ioReader io.Reader) Reader {
return Reader{Reader: ioReader}
}
func (r *Reader) Read(l int) {
debug("Reader#Read: l =", l)
r.b = make([]byte, l)
_, e := io.ReadFull(r.Reader, r.b)
if e != nil { panic(e) }
debug("Reader#Read: r.b =", r.b)
r.i = 0
}
func (r *Reader) Uint8() (v uint8) {
v = uint8(r.b[r.i])
r.i += 1
return
}
func (r *Reader) Uint16() (v uint16) {
v = uint16(r.b[r.i]) << 8 | uint16(r.b[r.i + 1])
r.i += 2
return
}
func (r *Reader) Uint32() (v uint32) {
v = uint32(r.b[r.i]) << 24 | uint32(r.b[r.i + 1]) << 16 |
uint32(r.b[r.i + 2]) << 8 | uint32(r.b[r.i + 3])
r.i += 4
return
}
func (r *Reader) Uint16le() (v uint16) {
v = uint16(r.b[r.i + 1]) << 8 | uint16(r.b[r.i])
r.i += 2
return
}
func (r *Reader) Uint32le() (v uint32) {
v = uint32(r.b[r.i + 3]) << 24 | uint32(r.b[r.i + 2]) << 16 |
uint32(r.b[r.i + 1]) << 8 | uint32(r.b[r.i])
r.i += 4
return
}
func (r *Reader) Skip(l int) {
r.i += l
}
func (r *Reader) RestLen() int {
return len(r.b) - r.i
}
func (r *Reader) HasRest() bool {
return r.i < len(r.b)
}
func (r *Reader) Bytes(l int) (v []byte) {
v = r.b[r.i : r.i + l]
r.i += l
return
}
func (r *Reader) String(l int) (v string) {
v = string(r.b[r.i : r.i + l])
r.i += l
return
}