/
dataTypes.go
97 lines (83 loc) · 1.72 KB
/
dataTypes.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package main
import (
"bytes"
"encoding/binary"
"fmt"
"unicode/utf8"
)
func readVarInt(data []byte, offset int) (int, int) {
var result int = 0
var numRead uint = 0
var read int = 0
var value int = 0
for {
read = int(data[offset])
value = read & 127
result |= value << (7 * numRead)
numRead++
offset++
if numRead > 5 {
panic("Malformed varint")
}
if (read & 128) == 0 {
return result, offset
}
}
}
func writeVarInt(value int) ([]byte, int) {
var result = make([]byte, 5)
var size int = 0
for {
temp := byte(value & 127)
value = value >> 7
if value != 0 {
temp |= 128
}
result[size] = temp
size++
if value == 0 {
return result[:size], size
}
}
}
func readString(data []byte, offset int) (string, int) {
size, offset := readVarInt(data, offset)
output := ""
for i := 0; i < size; i++ {
bruh := data[offset:]
r, size := utf8.DecodeRune(bruh)
output += string(r)
offset += size
}
return output, offset
}
func writeString(value string) ([]byte, int) {
result, _ := writeVarInt(len(value))
result = append(result, []byte(value)...)
return result, len(result)
}
func readByteArray(data []byte, offset int) ([]byte, int) {
size, offset := readVarInt(data, offset)
output := make([]byte, size)
for i := 0; i < size; i++ {
output[i] = data[offset]
offset++
}
return output, offset
}
func float64ToByte(f float64) []byte {
var buf bytes.Buffer
err := binary.Write(&buf, binary.BigEndian, f)
if err != nil {
fmt.Println("binary.Write failed:", err)
}
return buf.Bytes()
}
func float32ToByte(f float32) []byte {
var buf bytes.Buffer
err := binary.Write(&buf, binary.BigEndian, f)
if err != nil {
fmt.Println("binary.Write failed:", err)
}
return buf.Bytes()
}