File tree 1 file changed +31
-6
lines changed
1 file changed +31
-6
lines changed Original file line number Diff line number Diff line change
1
+ /*--------------------------------------------------------*\
2
+ | |
3
+ | hprose |
4
+ | |
5
+ | Official WebSite: https://hprose.com |
6
+ | |
7
+ | internal/convert/convert.go |
8
+ | |
9
+ | LastModified: Mar 18, 2022 |
10
+ | Author: Ma Bingyao <[email protected] > |
11
+ | |
12
+ \*________________________________________________________*/
13
+
1
14
package convert
2
15
3
16
import (
4
- "reflect"
5
17
"unsafe"
6
18
)
7
19
20
+ // stringHeader is a safe version of reflect.StringHeader used within this package.
21
+ type stringHeader struct {
22
+ Data unsafe.Pointer
23
+ Len int
24
+ }
25
+
26
+ // sliceHeader is a safe version of reflect.SliceHeader used within this package.
27
+ type sliceHeader struct {
28
+ Data unsafe.Pointer
29
+ Len int
30
+ Cap int
31
+ }
32
+
8
33
//go:nosplit
9
34
func ToUnsafeString (v []byte ) (s string ) {
10
- (* reflect . StringHeader )(unsafe .Pointer (& s )).Len = (* reflect . SliceHeader )(unsafe .Pointer (& v )).Len
11
- (* reflect . StringHeader )(unsafe .Pointer (& s )).Data = (* reflect . SliceHeader )(unsafe .Pointer (& v )).Data
35
+ (* stringHeader )(unsafe .Pointer (& s )).Len = (* sliceHeader )(unsafe .Pointer (& v )).Len
36
+ (* stringHeader )(unsafe .Pointer (& s )).Data = (* sliceHeader )(unsafe .Pointer (& v )).Data
12
37
return
13
38
}
14
39
15
40
//go:nosplit
16
41
func ToUnsafeBytes (s string ) (v []byte ) {
17
- (* reflect . SliceHeader )(unsafe .Pointer (& v )).Cap = (* reflect . StringHeader )(unsafe .Pointer (& s )).Len
18
- (* reflect . SliceHeader )(unsafe .Pointer (& v )).Len = (* reflect . StringHeader )(unsafe .Pointer (& s )).Len
19
- (* reflect . SliceHeader )(unsafe .Pointer (& v )).Data = (* reflect . StringHeader )(unsafe .Pointer (& s )).Data
42
+ (* sliceHeader )(unsafe .Pointer (& v )).Cap = (* stringHeader )(unsafe .Pointer (& s )).Len
43
+ (* sliceHeader )(unsafe .Pointer (& v )).Len = (* stringHeader )(unsafe .Pointer (& s )).Len
44
+ (* sliceHeader )(unsafe .Pointer (& v )).Data = (* stringHeader )(unsafe .Pointer (& s )).Data
20
45
return
21
46
}
You can’t perform that action at this time.
0 commit comments