github.com/3JoB/go-reflect@v1.0.1/bridge.go (about) 1 package reflect 2 3 import ( 4 "reflect" 5 "unsafe" 6 ) 7 8 func toRT(t Type) reflect.Type { 9 return type_toType(t) 10 } 11 12 func ToRT(t Type) reflect.Type { 13 return type_toType(t) 14 } 15 16 func toRTs(t []Type) []reflect.Type { 17 out := make([]reflect.Type, len(t)) 18 for idx, tt := range t { 19 out[idx] = toRT(tt) 20 } 21 return out 22 } 23 24 func toT(t reflect.Type) Type { 25 return (Type)(((*Value)(unsafe.Pointer(&t))).ptr) 26 } 27 28 func ToT(t reflect.Type) Type { 29 return toT(t) 30 } 31 32 func toRV(v Value) reflect.Value { 33 return *(*reflect.Value)(unsafe.Pointer(&v)) 34 } 35 36 func toRVs(v []Value) []reflect.Value { 37 out := make([]reflect.Value, len(v)) 38 for idx, vv := range v { 39 out[idx] = toRV(vv) 40 } 41 return out 42 } 43 44 func toV(v reflect.Value) Value { 45 return *(*Value)(unsafe.Pointer(&v)) 46 } 47 48 func ToV(v reflect.Value) Value { 49 return toV(v) 50 } 51 52 func toVs(v []reflect.Value) []Value { 53 out := make([]Value, len(v)) 54 for idx, vv := range v { 55 out[idx] = toV(vv) 56 } 57 return out 58 } 59 60 func toRSFs(v []StructField) []reflect.StructField { 61 out := make([]reflect.StructField, len(v)) 62 for idx, vv := range v { 63 out[idx] = toRSF(vv) 64 } 65 return out 66 } 67 68 func toRSF(v StructField) reflect.StructField { 69 return reflect.StructField{ 70 Name: v.Name, 71 PkgPath: v.PkgPath, 72 Type: ToReflectType(v.Type), 73 Tag: v.Tag, 74 Offset: v.Offset, 75 Index: v.Index, 76 Anonymous: v.Anonymous, 77 } 78 } 79 80 func ToRSF(v StructField) reflect.StructField { 81 return toRSF(v) 82 } 83 84 func toSF(v reflect.StructField) StructField { 85 return StructField{ 86 Name: v.Name, 87 PkgPath: v.PkgPath, 88 Type: ToType(v.Type), 89 Tag: v.Tag, 90 Offset: v.Offset, 91 Index: v.Index, 92 Anonymous: v.Anonymous, 93 } 94 } 95 96 func ToSF(v reflect.StructField) StructField { 97 return toSF(v) 98 } 99 100 func toM(v reflect.Method) Method { 101 return Method{ 102 Name: v.Name, 103 PkgPath: v.PkgPath, 104 Type: ToType(v.Type), 105 Func: toV(v.Func), 106 Index: v.Index, 107 } 108 } 109 110 func toRSC(v SelectCase) reflect.SelectCase { 111 return reflect.SelectCase{ 112 Dir: v.Dir, 113 Chan: toRV(v.Chan), 114 Send: toRV(v.Send), 115 } 116 } 117 118 func toRSCs(v []SelectCase) []reflect.SelectCase { 119 out := make([]reflect.SelectCase, len(v)) 120 for idx, vv := range v { 121 out[idx] = toRSC(vv) 122 } 123 return out 124 }