gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

unsafe_ptr.go (1035B)


      1 package reflect2
      2 
      3 import (
      4 	"reflect"
      5 	"unsafe"
      6 )
      7 
      8 type UnsafePtrType struct {
      9 	unsafeType
     10 }
     11 
     12 func newUnsafePtrType(cfg *frozenConfig, type1 reflect.Type) *UnsafePtrType {
     13 	return &UnsafePtrType{
     14 		unsafeType: *newUnsafeType(cfg, type1),
     15 	}
     16 }
     17 
     18 func (type2 *UnsafePtrType) IsNil(obj interface{}) bool {
     19 	if obj == nil {
     20 		return true
     21 	}
     22 	objEFace := unpackEFace(obj)
     23 	assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype)
     24 	return type2.UnsafeIsNil(objEFace.data)
     25 }
     26 
     27 func (type2 *UnsafePtrType) UnsafeIsNil(ptr unsafe.Pointer) bool {
     28 	if ptr == nil {
     29 		return true
     30 	}
     31 	return *(*unsafe.Pointer)(ptr) == nil
     32 }
     33 
     34 func (type2 *UnsafePtrType) LikePtr() bool {
     35 	return true
     36 }
     37 
     38 func (type2 *UnsafePtrType) Indirect(obj interface{}) interface{} {
     39 	objEFace := unpackEFace(obj)
     40 	assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
     41 	return type2.UnsafeIndirect(objEFace.data)
     42 }
     43 
     44 func (type2 *UnsafePtrType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
     45 	return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr))
     46 }