forked from Sandertv/gophertunnel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
reader_little_endian.go
80 lines (70 loc) · 1.94 KB
/
reader_little_endian.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
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
//go:build !armbe && !arm64be && !ppc64 && !mips && !mips64 && !mips64p32 && !ppc && !sparc && !sparc64 && !s390 && !s390x
package protocol
import (
"encoding/binary"
"unsafe"
)
// Uint16 reads a little endian uint16 from the underlying buffer.
func (r *Reader) Uint16(x *uint16) {
b := make([]byte, 2)
if _, err := r.r.Read(b); err != nil {
r.panic(err)
}
*x = *(*uint16)(unsafe.Pointer(&b[0]))
}
// Int16 reads a little endian int16 from the underlying buffer.
func (r *Reader) Int16(x *int16) {
b := make([]byte, 2)
if _, err := r.r.Read(b); err != nil {
r.panic(err)
}
*x = *(*int16)(unsafe.Pointer(&b[0]))
}
// Uint32 reads a little endian uint32 from the underlying buffer.
func (r *Reader) Uint32(x *uint32) {
b := make([]byte, 4)
if _, err := r.r.Read(b); err != nil {
r.panic(err)
}
*x = *(*uint32)(unsafe.Pointer(&b[0]))
}
// Int32 reads a little endian int32 from the underlying buffer.
func (r *Reader) Int32(x *int32) {
b := make([]byte, 4)
if _, err := r.r.Read(b); err != nil {
r.panic(err)
}
*x = *(*int32)(unsafe.Pointer(&b[0]))
}
// BEInt32 reads a big endian int32 from the underlying buffer.
func (r *Reader) BEInt32(x *int32) {
b := make([]byte, 4)
if _, err := r.r.Read(b); err != nil {
r.panic(err)
}
*x = int32(binary.BigEndian.Uint32(b))
}
// Uint64 reads a little endian uint64 from the underlying buffer.
func (r *Reader) Uint64(x *uint64) {
b := make([]byte, 8)
if _, err := r.r.Read(b); err != nil {
r.panic(err)
}
*x = *(*uint64)(unsafe.Pointer(&b[0]))
}
// Int64 reads a little endian int64 from the underlying buffer.
func (r *Reader) Int64(x *int64) {
b := make([]byte, 8)
if _, err := r.r.Read(b); err != nil {
r.panic(err)
}
*x = *(*int64)(unsafe.Pointer(&b[0]))
}
// Float32 reads a little endian float32 from the underlying buffer.
func (r *Reader) Float32(x *float32) {
b := make([]byte, 4)
if _, err := r.r.Read(b); err != nil {
r.panic(err)
}
*x = *(*float32)(unsafe.Pointer(&b[0]))
}