forked from alecthomas/go_serialization_benchmarks
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmus.go
104 lines (99 loc) · 2.32 KB
/
mus.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
98
99
100
101
102
103
104
package goserbench
import (
"github.com/mus-format/mus-go/ord"
"github.com/mus-format/mus-go/raw"
"github.com/mus-format/mus-go/unsafe"
"github.com/mus-format/mus-go/varint"
)
func MarshalMUS(v MUSA) (buf []byte) {
n := ord.SizeString(v.Name)
n += raw.SizeInt64(v.BirthDay)
n += ord.SizeString(v.Phone)
n += varint.SizeInt32(v.Siblings)
n += ord.SizeBool(v.Spouse)
n += raw.SizeFloat64(v.Money)
buf = make([]byte, n)
n = ord.MarshalString(v.Name, buf)
n += raw.MarshalInt64(v.BirthDay, buf[n:])
n += ord.MarshalString(v.Phone, buf[n:])
n += varint.MarshalInt32(v.Siblings, buf[n:])
n += ord.MarshalBool(v.Spouse, buf[n:])
raw.MarshalFloat64(v.Money, buf[n:])
return
}
func UnmarshalMUS(bs []byte) (v MUSA, n int, err error) {
v.Name, n, err = ord.UnmarshalString(bs)
if err != nil {
return
}
var n1 int
v.BirthDay, n1, err = raw.UnmarshalInt64(bs[n:])
n += n1
if err != nil {
return
}
v.Phone, n1, err = ord.UnmarshalString(bs[n:])
n += n1
if err != nil {
return
}
v.Siblings, n1, err = varint.UnmarshalInt32(bs[n:])
n += n1
if err != nil {
return
}
v.Spouse, n1, err = ord.UnmarshalBool(bs[n:])
n += n1
if err != nil {
return
}
v.Money, n1, err = raw.UnmarshalFloat64(bs[n:])
n += n1
return
}
func MarshalMUSUnsafe(v MUSA) (buf []byte) {
n := unsafe.SizeString(v.Name)
n += unsafe.SizeInt64(v.BirthDay)
n += unsafe.SizeString(v.Phone)
n += unsafe.SizeInt32(v.Siblings)
n += unsafe.SizeBool(v.Spouse)
n += unsafe.SizeFloat64(v.Money)
buf = make([]byte, n)
n = unsafe.MarshalString(v.Name, buf)
n += unsafe.MarshalInt64(v.BirthDay, buf[n:])
n += unsafe.MarshalString(v.Phone, buf[n:])
n += unsafe.MarshalInt32(v.Siblings, buf[n:])
n += unsafe.MarshalBool(v.Spouse, buf[n:])
unsafe.MarshalFloat64(v.Money, buf[n:])
return
}
func UnmarshalMUSUnsafe(bs []byte) (v MUSA, n int, err error) {
v.Name, n, err = unsafe.UnmarshalString(bs)
if err != nil {
return
}
var n1 int
v.BirthDay, n1, err = unsafe.UnmarshalInt64(bs[n:])
n += n1
if err != nil {
return
}
v.Phone, n1, err = unsafe.UnmarshalString(bs[n:])
n += n1
if err != nil {
return
}
v.Siblings, n1, err = unsafe.UnmarshalInt32(bs[n:])
n += n1
if err != nil {
return
}
v.Spouse, n1, err = unsafe.UnmarshalBool(bs[n:])
n += n1
if err != nil {
return
}
v.Money, n1, err = unsafe.UnmarshalFloat64(bs[n:])
n += n1
return
}