gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/schemax/unsafe-get.go (about) 1 package schemax 2 3 // 4 //import ( 5 // "reflect" 6 // "unsafe" 7 //) 8 // 9 //func (decl *ClassDecl) UnsafeSetByField(st unsafe.Pointer, name string, val interface{}) (r interface{}) { 10 // field, has := decl.GetField(name) 11 // if has == false { 12 // return nil 13 // } 14 // decl.UnsafeSet(st, field.Unsafe, val) 15 // return 16 //} 17 //func (decl *ClassDecl) UnsafeSet(st unsafe.Pointer, info UnsafeInfo, val interface{}) (r interface{}) { 18 // unsafeval := unsafe.Pointer(uintptr(st) + info.Offset) 19 // switch info.Kind { 20 // case reflect.Map: 21 // prop := (*map[string]interface{})(unsafeval) 22 // if val == nil { 23 // *prop = nil 24 // } else { 25 // *prop = val.(map[string]interface{}) 26 // } 27 // case reflect.Slice: 28 // fallthrough 29 // case reflect.Array: 30 // prop := (*[]interface{})(unsafeval) 31 // if val == nil { 32 // *prop = nil 33 // } else { 34 // *prop = val.([]interface{}) 35 // } 36 // case reflect.Bool: 37 // prop := (*bool)(unsafeval) 38 // *prop = val.(bool) 39 // case reflect.String: 40 // prop := (*string)(unsafeval) 41 // *prop = val.(string) 42 // case reflect.Int: 43 // prop := (*int)(unsafeval) 44 // *prop = val.(int) 45 // case reflect.Int8: 46 // prop := (*int8)(unsafeval) 47 // *prop = val.(int8) 48 // case reflect.Int16: 49 // prop := (*int16)(unsafeval) 50 // *prop = val.(int16) 51 // case reflect.Int32: 52 // prop := (*int32)(unsafeval) 53 // *prop = val.(int32) 54 // case reflect.Int64: 55 // prop := (*int64)(unsafeval) 56 // *prop = val.(int64) 57 // case reflect.Uint: 58 // prop := (*uint)(unsafeval) 59 // *prop = val.(uint) 60 // case reflect.Uint8: 61 // prop := (*uint8)(unsafeval) 62 // *prop = val.(uint8) 63 // case reflect.Uint16: 64 // prop := (*uint16)(unsafeval) 65 // *prop = val.(uint16) 66 // case reflect.Uint32: 67 // prop := (*uint32)(unsafeval) 68 // *prop = val.(uint32) 69 // case reflect.Uint64: 70 // prop := (*uint64)(unsafeval) 71 // *prop = val.(uint64) 72 // case reflect.Float32: 73 // prop := (*float32)(unsafeval) 74 // *prop = val.(float32) 75 // case reflect.Float64: 76 // prop := (*float64)(unsafeval) 77 // *prop = val.(float64) 78 // } 79 // 80 // return 81 //} 82 // 83 //func (decl *ClassDecl) UnsafeGetByField(st unsafe.Pointer, name string) (r interface{}) { 84 // field, has := decl.GetField(name) 85 // if has == false { 86 // return nil 87 // } 88 // decl.UnsafeGet(st, field.Unsafe) 89 // return 90 //} 91 // 92 //func (decl *ClassDecl) UnsafeIsNil(st unsafe.Pointer) bool { 93 // st = unsafe.Pointer(uintptr(*(*uint)(st))) 94 // return unsafe.Sizeof(st) == 0 95 //} 96 // 97 //func (decl *ClassDecl) UnsafeGetPointer(st unsafe.Pointer, info UnsafeInfo) (r unsafe.Pointer) { 98 // return unsafe.Pointer(uintptr(st) + info.Offset) 99 //} 100 // 101 //func (decl *ClassDecl) UnsafeGet(st unsafe.Pointer, info UnsafeInfo) (r interface{}) { 102 // unsafeval := unsafe.Pointer(uintptr(st) + info.Offset) 103 // switch info.Kind { 104 // case reflect.Map: 105 // val := (*interface{})(unsafeval) 106 // r = *val 107 // case reflect.Slice: 108 // fallthrough 109 // case reflect.Array: 110 // val := (*interface{})(unsafeval) 111 // r = *val 112 // case reflect.Bool: 113 // val := (*bool)(unsafeval) 114 // r = *val 115 // case reflect.String: 116 // val := (*string)(unsafeval) 117 // r = *val 118 // case reflect.Int: 119 // val := (*int)(unsafeval) 120 // r = *val 121 // case reflect.Int8: 122 // val := (*int8)(unsafeval) 123 // r = *val 124 // case reflect.Int16: 125 // val := (*int16)(unsafeval) 126 // r = *val 127 // case reflect.Int32: 128 // val := (*int32)(unsafeval) 129 // r = *val 130 // case reflect.Int64: 131 // val := (*int64)(unsafeval) 132 // r = *val 133 // case reflect.Uint: 134 // val := (*uint)(unsafeval) 135 // r = *val 136 // case reflect.Uint8: 137 // val := (*uint8)(unsafeval) 138 // r = *val 139 // case reflect.Uint16: 140 // val := (*uint16)(unsafeval) 141 // r = *val 142 // case reflect.Uint32: 143 // val := (*uint32)(unsafeval) 144 // r = *val 145 // case reflect.Uint64: 146 // val := (*uint64)(unsafeval) 147 // r = *val 148 // case reflect.Float32: 149 // val := (*float32)(unsafeval) 150 // r = *val 151 // case reflect.Float64: 152 // val := (*float64)(unsafeval) 153 // r = *val 154 // } 155 // 156 // return 157 //}