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  //}