You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gotosocial/vendor/github.com/uptrace/bun/internal/map_key.go

68 lines
1.2 KiB
Go

package internal
import "reflect"
var ifaceType = reflect.TypeOf((*interface{})(nil)).Elem()
type MapKey struct {
iface interface{}
}
func NewMapKey(is []interface{}) MapKey {
return MapKey{
iface: newMapKey(is),
}
}
func newMapKey(is []interface{}) interface{} {
switch len(is) {
case 1:
ptr := new([1]interface{})
copy((*ptr)[:], is)
return *ptr
case 2:
ptr := new([2]interface{})
copy((*ptr)[:], is)
return *ptr
case 3:
ptr := new([3]interface{})
copy((*ptr)[:], is)
return *ptr
case 4:
ptr := new([4]interface{})
copy((*ptr)[:], is)
return *ptr
case 5:
ptr := new([5]interface{})
copy((*ptr)[:], is)
return *ptr
case 6:
ptr := new([6]interface{})
copy((*ptr)[:], is)
return *ptr
case 7:
ptr := new([7]interface{})
copy((*ptr)[:], is)
return *ptr
case 8:
ptr := new([8]interface{})
copy((*ptr)[:], is)
return *ptr
case 9:
ptr := new([9]interface{})
copy((*ptr)[:], is)
return *ptr
case 10:
ptr := new([10]interface{})
copy((*ptr)[:], is)
return *ptr
default:
}
at := reflect.New(reflect.ArrayOf(len(is), ifaceType)).Elem()
for i, v := range is {
*(at.Index(i).Addr().Interface().(*interface{})) = v
}
return at.Interface()
}