-
Notifications
You must be signed in to change notification settings - Fork 12
/
new_basetype.go
125 lines (104 loc) · 2.98 KB
/
new_basetype.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Copyright [2020-2023] [guonaihong]
package pcopy
import (
"reflect"
"unsafe"
)
func newUint(dst interface{}) interface{} {
d := *(*uint)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newUint8(dst interface{}) interface{} {
d := *(*uint8)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newUint16(dst interface{}) interface{} {
d := *(*uint16)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newUint32(dst interface{}) interface{} {
d := *(*uint32)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newUint64(dst interface{}) interface{} {
d := *(*uint64)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newInt(dst interface{}) interface{} {
d := *(*int)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newInt8(dst interface{}) interface{} {
d := *(*int8)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newInt16(dst interface{}) interface{} {
d := *(*int16)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newInt32(dst interface{}) interface{} {
d := *(*int32)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newInt64(dst interface{}) interface{} {
d := *(*int64)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
// func newString(dst interface{}) interface{} {
// d := *(*string)((*emptyInterface)(unsafe.Pointer(&dst)).word)
// return d
// }
func newString(dst interface{}) interface{} {
d := *(*string)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newFloat32(dst interface{}) interface{} {
d := *(*float32)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newFloat64(dst interface{}) interface{} {
d := *(*float64)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newBool(dst interface{}) interface{} {
d := *(*bool)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newComplex64(dst interface{}) interface{} {
d := *(*complex64)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newComplex128(dst interface{}) interface{} {
d := *(*complex128)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func newUintptr(dst interface{}) interface{} {
d := *(*uintptr)((*emptyInterface)(unsafe.Pointer(&dst)).word)
return d
}
func getNewBaseType(k reflect.Kind, dst interface{}) interface{} {
newBaseType, ok := newBaseTypeTable[k]
if ok {
return newBaseType(dst)
}
return nil
}
var newBaseTypeTable = map[reflect.Kind]newBaseTypeFunc{
reflect.Int: newInt,
reflect.Int8: newInt8,
reflect.Int16: newInt16,
reflect.Int32: newInt32,
reflect.Int64: newInt64,
reflect.Uint: newUint,
reflect.Uint8: newUint8,
reflect.Uint16: newUint16,
reflect.Uint32: newUint32,
reflect.Uint64: newUint64,
reflect.String: newString,
reflect.Float32: newFloat32,
reflect.Float64: newFloat64,
reflect.Bool: newBool,
reflect.Complex64: newComplex64,
reflect.Complex128: newComplex128,
reflect.Uintptr: newUintptr,
}