diff options
author | 2021-08-25 15:34:33 +0200 | |
---|---|---|
committer | 2021-08-25 15:34:33 +0200 | |
commit | 2dc9fc1626507bb54417fc4a1920b847cafb27a2 (patch) | |
tree | 4ddeac479b923db38090aac8bd9209f3646851c1 /vendor/github.com/uptrace/bun/internal/map_key.go | |
parent | Manually approves followers (#146) (diff) | |
download | gotosocial-2dc9fc1626507bb54417fc4a1920b847cafb27a2.tar.xz |
Pg to bun (#148)
* start moving to bun
* changing more stuff
* more
* and yet more
* tests passing
* seems stable now
* more big changes
* small fix
* little fixes
Diffstat (limited to 'vendor/github.com/uptrace/bun/internal/map_key.go')
-rw-r--r-- | vendor/github.com/uptrace/bun/internal/map_key.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/vendor/github.com/uptrace/bun/internal/map_key.go b/vendor/github.com/uptrace/bun/internal/map_key.go new file mode 100644 index 000000000..bb5fcca8c --- /dev/null +++ b/vendor/github.com/uptrace/bun/internal/map_key.go @@ -0,0 +1,67 @@ +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() +} |