summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/internal/map_key.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2021-08-25 15:34:33 +0200
committerLibravatar GitHub <noreply@github.com>2021-08-25 15:34:33 +0200
commit2dc9fc1626507bb54417fc4a1920b847cafb27a2 (patch)
tree4ddeac479b923db38090aac8bd9209f3646851c1 /vendor/github.com/uptrace/bun/internal/map_key.go
parentManually approves followers (#146) (diff)
downloadgotosocial-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.go67
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()
+}