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  }