Skip to content

Commit 245bf21

Browse files
committed
Update convert.go
1 parent b104c62 commit 245bf21

File tree

1 file changed

+31
-6
lines changed

1 file changed

+31
-6
lines changed

internal/convert/convert.go

+31-6
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,46 @@
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+
114
package convert
215

316
import (
4-
"reflect"
517
"unsafe"
618
)
719

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+
833
//go:nosplit
934
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
1237
return
1338
}
1439

1540
//go:nosplit
1641
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
2045
return
2146
}

0 commit comments

Comments
 (0)