package reflect2

import (
	
	
)

type unsafeType struct {
	safeType
	rtype    unsafe.Pointer
	ptrRType unsafe.Pointer
}

func newUnsafeType( *frozenConfig,  reflect.Type) *unsafeType {
	return &unsafeType{
		safeType: safeType{
			Type: ,
			cfg:  ,
		},
		rtype:    unpackEFace().data,
		ptrRType: unpackEFace(reflect.PtrTo()).data,
	}
}

func ( *unsafeType) ( interface{},  interface{}) {
	 := unpackEFace()
	assertType("Type.Set argument 1", .ptrRType, .rtype)
	 := unpackEFace()
	assertType("Type.Set argument 2", .ptrRType, .rtype)
	.UnsafeSet(.data, .data)
}

func ( *unsafeType) ( unsafe.Pointer,  unsafe.Pointer) {
	typedmemmove(.rtype, , )
}

func ( *unsafeType) ( interface{}) bool {
	 := unpackEFace()
	assertType("Type.IsNil argument 1", .ptrRType, .rtype)
	return .UnsafeIsNil(.data)
}

func ( *unsafeType) ( unsafe.Pointer) bool {
	return  == nil
}

func ( *unsafeType) () unsafe.Pointer {
	return unsafe_New(.rtype)
}

func ( *unsafeType) () interface{} {
	return packEFace(.ptrRType, .UnsafeNew())
}

func ( *unsafeType) ( unsafe.Pointer) interface{} {
	return packEFace(.ptrRType, )
}

func ( *unsafeType) () uintptr {
	return uintptr(.rtype)
}

func ( *unsafeType) ( interface{}) interface{} {
	 := unpackEFace()
	assertType("Type.Indirect argument 1", .ptrRType, .rtype)
	return .UnsafeIndirect(.data)
}

func ( *unsafeType) ( unsafe.Pointer) interface{} {
	return packEFace(.rtype, )
}

func ( *unsafeType) () bool {
	return false
}

func assertType( string,  unsafe.Pointer,  unsafe.Pointer) {
	if  !=  {
		 := reflect.TypeOf(0)
		(*iface)(unsafe.Pointer(&)).data = 
		 := reflect.TypeOf(0)
		(*iface)(unsafe.Pointer(&)).data = 
		panic( + ": expect " + .String() + ", actual " + .String())
	}
}