summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/internal/map_key.go
diff options
context:
space:
mode:
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()
+}