package reflect2

import (
	
	
)

type UnsafeStructField struct {
	reflect.StructField
	structType *UnsafeStructType
	rtype      unsafe.Pointer
	ptrRType   unsafe.Pointer
}

func newUnsafeStructField( *UnsafeStructType,  reflect.StructField) *UnsafeStructField {
	return &UnsafeStructField{
		StructField: ,
		rtype:       unpackEFace(.Type).data,
		ptrRType:    unpackEFace(reflect.PtrTo(.Type)).data,
		structType:  ,
	}
}

func ( *UnsafeStructField) () uintptr {
	return .StructField.Offset
}

func ( *UnsafeStructField) () string {
	return .StructField.Name
}

func ( *UnsafeStructField) () string {
	return .StructField.PkgPath
}

func ( *UnsafeStructField) () Type {
	return .structType.cfg.Type2(.StructField.Type)
}

func ( *UnsafeStructField) () reflect.StructTag {
	return .StructField.Tag
}

func ( *UnsafeStructField) () []int {
	return .StructField.Index
}

func ( *UnsafeStructField) () bool {
	return .StructField.Anonymous
}

func ( *UnsafeStructField) ( interface{},  interface{}) {
	 := unpackEFace()
	assertType("StructField.SetIndex argument 1", .structType.ptrRType, .rtype)
	 := unpackEFace()
	assertType("StructField.SetIndex argument 2", .ptrRType, .rtype)
	.UnsafeSet(.data, .data)
}

func ( *UnsafeStructField) ( unsafe.Pointer,  unsafe.Pointer) {
	 := add(, .StructField.Offset, "same as non-reflect &v.field")
	typedmemmove(.rtype, , )
}

func ( *UnsafeStructField) ( interface{}) interface{} {
	 := unpackEFace()
	assertType("StructField.GetIndex argument 1", .structType.ptrRType, .rtype)
	 := .UnsafeGet(.data)
	return packEFace(.ptrRType, )
}

func ( *UnsafeStructField) ( unsafe.Pointer) unsafe.Pointer {
	return add(, .StructField.Offset, "same as non-reflect &v.field")
}