github.com/zerosnake0/jzon@v0.0.9-0.20230801092939-1b135cb83f7f/is_empty.go (about)

     1  package jzon
     2  
     3  import (
     4  	"reflect"
     5  	"strconv"
     6  	"unsafe"
     7  )
     8  
     9  type isEmptyFunc func(ptr unsafe.Pointer) bool
    10  
    11  var (
    12  	isEmptyFunctions = [numKinds]isEmptyFunc{}
    13  )
    14  
    15  func init() {
    16  	isEmptyFunctions[reflect.Bool] = (*boolEncoder)(nil).IsEmpty
    17  	if strconv.IntSize == 32 {
    18  		isEmptyFunctions[reflect.Int] = (*int32Encoder)(nil).IsEmpty
    19  		isEmptyFunctions[reflect.Uint] = (*uint32Encoder)(nil).IsEmpty
    20  	} else {
    21  		isEmptyFunctions[reflect.Int] = (*int64Encoder)(nil).IsEmpty
    22  		isEmptyFunctions[reflect.Uint] = (*uint64Encoder)(nil).IsEmpty
    23  	}
    24  	isEmptyFunctions[reflect.Int8] = (*int8Encoder)(nil).IsEmpty
    25  	isEmptyFunctions[reflect.Int16] = (*int16Encoder)(nil).IsEmpty
    26  	isEmptyFunctions[reflect.Int32] = (*int32Encoder)(nil).IsEmpty
    27  	isEmptyFunctions[reflect.Int64] = (*int64Encoder)(nil).IsEmpty
    28  	isEmptyFunctions[reflect.Uint8] = (*uint8Encoder)(nil).IsEmpty
    29  	isEmptyFunctions[reflect.Uint16] = (*uint16Encoder)(nil).IsEmpty
    30  	isEmptyFunctions[reflect.Uint32] = (*uint32Encoder)(nil).IsEmpty
    31  	isEmptyFunctions[reflect.Uint64] = (*uint64Encoder)(nil).IsEmpty
    32  	if unsafe.Sizeof(uintptr(0)) == 4 {
    33  		isEmptyFunctions[reflect.Uintptr] = (*uint32Encoder)(nil).IsEmpty
    34  	} else {
    35  		isEmptyFunctions[reflect.Uintptr] = (*uint64Encoder)(nil).IsEmpty
    36  	}
    37  	isEmptyFunctions[reflect.Float32] = (*float32Encoder)(nil).IsEmpty
    38  	isEmptyFunctions[reflect.Float64] = (*float64Encoder)(nil).IsEmpty
    39  	isEmptyFunctions[reflect.Array] = (*arrayEncoder)(nil).IsEmpty
    40  	isEmptyFunctions[reflect.Map] = (*directMapEncoder)(nil).IsEmpty
    41  	isEmptyFunctions[reflect.Slice] = (*sliceEncoder)(nil).IsEmpty
    42  	isEmptyFunctions[reflect.Struct] = (*structEncoder)(nil).IsEmpty
    43  	// Interface
    44  	// Ptr
    45  }