From 0d4500d6e625a758b6f35cb4ba8764ea6dc6b7a4 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 7 Feb 2018 17:55:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B6=E5=8F=91=E5=AE=89=E5=85=A8map?= =?UTF-8?q?=E6=96=B0=E5=A2=9EIterator=E9=81=8D=E5=8E=86=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/container/gmap/int_bool_map.go | 9 +++++++++ g/container/gmap/int_int_map.go | 9 +++++++++ g/container/gmap/int_interface_map.go | 9 +++++++++ g/container/gmap/int_string_map.go | 9 +++++++++ g/container/gmap/interface_interface_map.go | 9 +++++++++ g/container/gmap/string_bool_map.go | 9 +++++++++ g/container/gmap/string_int_map.go | 9 +++++++++ g/container/gmap/string_interface_map.go | 9 +++++++++ g/container/gmap/string_string_map.go | 9 +++++++++ g/container/gmap/uint_interface_map.go | 8 ++++++++ 10 files changed, 89 insertions(+) diff --git a/g/container/gmap/int_bool_map.go b/g/container/gmap/int_bool_map.go index a5c2bb526..1ebdce090 100644 --- a/g/container/gmap/int_bool_map.go +++ b/g/container/gmap/int_bool_map.go @@ -33,6 +33,15 @@ func (this *IntBoolMap) Clone() *map[int]bool { return &m } +// 给定回调函数对原始内容进行遍历 +func (this *IntBoolMap) Iterator(f func (k int, v bool)) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 设置键值对 func (this *IntBoolMap) Set(key int, val bool) { this.mu.Lock() diff --git a/g/container/gmap/int_int_map.go b/g/container/gmap/int_int_map.go index de2bdde08..08d297535 100644 --- a/g/container/gmap/int_int_map.go +++ b/g/container/gmap/int_int_map.go @@ -22,6 +22,15 @@ func NewIntIntMap() *IntIntMap { } } +// 给定回调函数对原始内容进行遍历 +func (this *IntIntMap) Iterator(f func (k int, v int)) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 哈希表克隆 func (this *IntIntMap) Clone() *map[int]int { m := make(map[int]int) diff --git a/g/container/gmap/int_interface_map.go b/g/container/gmap/int_interface_map.go index 694f0fe41..300f47cfd 100644 --- a/g/container/gmap/int_interface_map.go +++ b/g/container/gmap/int_interface_map.go @@ -23,6 +23,15 @@ func NewIntInterfaceMap() *IntInterfaceMap { } } +// 给定回调函数对原始内容进行遍历 +func (this *IntInterfaceMap) Iterator(f func (k int, v interface{})) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 哈希表克隆 func (this *IntInterfaceMap) Clone() *map[int]interface{} { m := make(map[int]interface{}) diff --git a/g/container/gmap/int_string_map.go b/g/container/gmap/int_string_map.go index 7b544bc3a..a66db91d9 100644 --- a/g/container/gmap/int_string_map.go +++ b/g/container/gmap/int_string_map.go @@ -22,6 +22,15 @@ func NewIntStringMap() *IntStringMap { } } +// 给定回调函数对原始内容进行遍历 +func (this *IntStringMap) Iterator(f func (k int, v string)) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 哈希表克隆 func (this *IntStringMap) Clone() *map[int]string { m := make(map[int]string) diff --git a/g/container/gmap/interface_interface_map.go b/g/container/gmap/interface_interface_map.go index 2d97d21e2..5d1993922 100644 --- a/g/container/gmap/interface_interface_map.go +++ b/g/container/gmap/interface_interface_map.go @@ -23,6 +23,15 @@ func NewInterfaceInterfaceMap() *InterfaceInterfaceMap { } } +// 给定回调函数对原始内容进行遍历 +func (this *InterfaceInterfaceMap) Iterator(f func (k interface{}, v interface{})) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 哈希表克隆 func (this *InterfaceInterfaceMap) Clone() *map[interface{}]interface{} { m := make(map[interface{}]interface{}) diff --git a/g/container/gmap/string_bool_map.go b/g/container/gmap/string_bool_map.go index 3623cc798..ffc91881c 100644 --- a/g/container/gmap/string_bool_map.go +++ b/g/container/gmap/string_bool_map.go @@ -22,6 +22,15 @@ func NewStringBoolMap() *StringBoolMap { } } +// 给定回调函数对原始内容进行遍历 +func (this *StringBoolMap) Iterator(f func (k string, v bool)) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 哈希表克隆 func (this *StringBoolMap) Clone() *map[string]bool { m := make(map[string]bool) diff --git a/g/container/gmap/string_int_map.go b/g/container/gmap/string_int_map.go index 9dd20f224..a31fe4ca2 100644 --- a/g/container/gmap/string_int_map.go +++ b/g/container/gmap/string_int_map.go @@ -22,6 +22,15 @@ func NewStringIntMap() *StringIntMap { } } +// 给定回调函数对原始内容进行遍历 +func (this *StringIntMap) Iterator(f func (k string, v int)) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 哈希表克隆 func (this *StringIntMap) Clone() *map[string]int { m := make(map[string]int) diff --git a/g/container/gmap/string_interface_map.go b/g/container/gmap/string_interface_map.go index 6b45a3938..ca182b8b1 100644 --- a/g/container/gmap/string_interface_map.go +++ b/g/container/gmap/string_interface_map.go @@ -23,6 +23,15 @@ func NewStringInterfaceMap() *StringInterfaceMap { } } +// 给定回调函数对原始内容进行遍历 +func (this *StringInterfaceMap) Iterator(f func (k string, v interface{})) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 哈希表克隆 func (this *StringInterfaceMap) Clone() *map[string]interface{} { m := make(map[string]interface{}) diff --git a/g/container/gmap/string_string_map.go b/g/container/gmap/string_string_map.go index 3a1f68d6e..d6796e432 100644 --- a/g/container/gmap/string_string_map.go +++ b/g/container/gmap/string_string_map.go @@ -22,6 +22,15 @@ func NewStringStringMap() *StringStringMap { } } +// 给定回调函数对原始内容进行遍历 +func (this *StringStringMap) Iterator(f func (k string, v string)) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 哈希表克隆 func (this *StringStringMap) Clone() *map[string]string { m := make(map[string]string) diff --git a/g/container/gmap/uint_interface_map.go b/g/container/gmap/uint_interface_map.go index 9586be69c..549ea8683 100644 --- a/g/container/gmap/uint_interface_map.go +++ b/g/container/gmap/uint_interface_map.go @@ -23,6 +23,14 @@ func NewUintInterfaceMap() *UintInterfaceMap { } } +func (this *UintInterfaceMap) Iterator(f func (k uint, v interface{})) { + this.mu.RLock() + for k, v := range this.m { + f(k, v) + } + this.mu.RUnlock() +} + // 哈希表克隆 func (this *UintInterfaceMap) Clone() *map[uint]interface{} { m := make(map[uint]interface{})