From 3cfd3c236c93172397f50f4662763d060cb101db Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Mon, 22 Aug 2016 15:02:23 +0200 Subject: [PATCH 1/2] Support UnsortedList() in auto-generated sets. --- cmd/libs/go2idl/set-gen/generators/sets.go | 9 +++++++++ pkg/util/sets/byte.go | 9 +++++++++ pkg/util/sets/int.go | 9 +++++++++ pkg/util/sets/int64.go | 9 +++++++++ pkg/util/sets/string.go | 9 +++++++++ 5 files changed, 45 insertions(+) diff --git a/cmd/libs/go2idl/set-gen/generators/sets.go b/cmd/libs/go2idl/set-gen/generators/sets.go index d8ad284a527..e670c4c5365 100644 --- a/cmd/libs/go2idl/set-gen/generators/sets.go +++ b/cmd/libs/go2idl/set-gen/generators/sets.go @@ -337,6 +337,15 @@ func (s $.type|public$) List() []$.type|raw$ { return []$.type|raw$(res) } +// UnsortedList returns the slice with contents in random order. +func (s $.type|public$) UnsortedList() []$.type|raw$ { + res :=make([]$.type|raw$, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + // Returns a single element from the set. func (s $.type|public$) PopAny() ($.type|raw$, bool) { for key := range s { diff --git a/pkg/util/sets/byte.go b/pkg/util/sets/byte.go index 45f5d4f67ff..3d6d0dfe43b 100644 --- a/pkg/util/sets/byte.go +++ b/pkg/util/sets/byte.go @@ -174,6 +174,15 @@ func (s Byte) List() []byte { return []byte(res) } +// UnsortedList returns the slice with contents in random order. +func (s Byte) UnsortedList() []byte { + res := make([]byte, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + // Returns a single element from the set. func (s Byte) PopAny() (byte, bool) { for key := range s { diff --git a/pkg/util/sets/int.go b/pkg/util/sets/int.go index 4b8c331b539..6d32f84c789 100644 --- a/pkg/util/sets/int.go +++ b/pkg/util/sets/int.go @@ -174,6 +174,15 @@ func (s Int) List() []int { return []int(res) } +// UnsortedList returns the slice with contents in random order. +func (s Int) UnsortedList() []int { + res := make([]int, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + // Returns a single element from the set. func (s Int) PopAny() (int, bool) { for key := range s { diff --git a/pkg/util/sets/int64.go b/pkg/util/sets/int64.go index b6a97e70d86..1de18319b7e 100644 --- a/pkg/util/sets/int64.go +++ b/pkg/util/sets/int64.go @@ -174,6 +174,15 @@ func (s Int64) List() []int64 { return []int64(res) } +// UnsortedList returns the slice with contents in random order. +func (s Int64) UnsortedList() []int64 { + res := make([]int64, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + // Returns a single element from the set. func (s Int64) PopAny() (int64, bool) { for key := range s { diff --git a/pkg/util/sets/string.go b/pkg/util/sets/string.go index 2094b3205ea..da66eaf8e74 100644 --- a/pkg/util/sets/string.go +++ b/pkg/util/sets/string.go @@ -174,6 +174,15 @@ func (s String) List() []string { return []string(res) } +// UnsortedList returns the slice with contents in random order. +func (s String) UnsortedList() []string { + res := make([]string, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + // Returns a single element from the set. func (s String) PopAny() (string, bool) { for key := range s { From 28040559788534e0726f5b51227829afc24075e7 Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Mon, 22 Aug 2016 15:07:17 +0200 Subject: [PATCH 2/2] Avoid sorting List when unnecessary --- pkg/client/cache/thread_safe_store.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/client/cache/thread_safe_store.go b/pkg/client/cache/thread_safe_store.go index 9d88ce33df3..74fe03807f7 100644 --- a/pkg/client/cache/thread_safe_store.go +++ b/pkg/client/cache/thread_safe_store.go @@ -151,7 +151,7 @@ func (c *threadSafeMap) Index(indexName string, obj interface{}) ([]interface{}, returnKeySet := sets.String{} for _, indexKey := range indexKeys { set := index[indexKey] - for _, key := range set.List() { + for _, key := range set.UnsortedList() { returnKeySet.Insert(key) } }