From 16bde5e9fc2e05d9e4e39bd10fb085cba538932f Mon Sep 17 00:00:00 2001 From: John Date: Fri, 1 Feb 2019 22:25:58 +0800 Subject: [PATCH] gmap updates --- g/container/gmap/gmap.go | 20 +++++++++--- g/container/gmap/gmap_int_bool_map.go | 32 +++++++++++++++++-- g/container/gmap/gmap_int_int_map.go | 32 +++++++++++++++++-- g/container/gmap/gmap_int_interface_map.go | 32 +++++++++++++++++-- g/container/gmap/gmap_int_string_map.go | 32 +++++++++++++++++-- g/container/gmap/gmap_string_bool_map.go | 32 +++++++++++++++++-- g/container/gmap/gmap_string_int_map.go | 32 +++++++++++++++++-- g/container/gmap/gmap_string_interface_map.go | 32 +++++++++++++++++-- g/container/gmap/gmap_string_string_map.go | 32 +++++++++++++++++-- g/net/ghttp/ghttp_server_session.go | 2 +- 10 files changed, 257 insertions(+), 21 deletions(-) diff --git a/g/container/gmap/gmap.go b/g/container/gmap/gmap.go index 08406a6b0..575e7c3f2 100644 --- a/g/container/gmap/gmap.go +++ b/g/container/gmap/gmap.go @@ -21,8 +21,8 @@ type Map struct { m map[interface{}]interface{} } -func New(safe...bool) *Map { - return NewMap(safe...) +func New(unsafe...bool) *Map { + return NewMap(unsafe...) } func NewMap(unsafe...bool) *Map { @@ -32,6 +32,13 @@ func NewMap(unsafe...bool) *Map { } } +func NewFrom(m map[interface{}]interface{}, unsafe...bool) *Map { + return &Map{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + func NewFromArray(keys []interface{}, values []interface{}, unsafe...bool) *Map { m := make(map[interface{}]interface{}) l := len(values) @@ -59,8 +66,13 @@ func (gm *Map) Iterator(f func (k interface{}, v interface{}) bool) { } } -// 哈希表克隆 -func (gm *Map) Clone() map[interface{}]interface{} { +// 哈希表克隆. +func (gm *Map) Clone() *Map { + return NewFrom(gm.Map(), !gm.mu.IsSafe()) +} + +// 返回当前哈希表的数据Map. +func (gm *Map) Map() map[interface{}]interface{} { m := make(map[interface{}]interface{}) gm.mu.RLock() for k, v := range gm.m { diff --git a/g/container/gmap/gmap_int_bool_map.go b/g/container/gmap/gmap_int_bool_map.go index d90b4b240..94778e7e3 100644 --- a/g/container/gmap/gmap_int_bool_map.go +++ b/g/container/gmap/gmap_int_bool_map.go @@ -23,8 +23,36 @@ func NewIntBoolMap(unsafe...bool) *IntBoolMap { } } -// 哈希表克隆 -func (gm *IntBoolMap) Clone() map[int]bool { +func NewIntBoolMapFrom(m map[int]bool, unsafe...bool) *IntBoolMap { + return &IntBoolMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + +func NewIntBoolMapFromArray(keys []int, values []bool, unsafe...bool) *IntBoolMap { + m := make(map[int]bool) + l := len(values) + for i, k := range keys { + if i < l { + m[k] = values[i] + } else { + m[k] = false + } + } + return &IntBoolMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + +// 哈希表克隆. +func (gm *IntBoolMap) Clone() *IntBoolMap { + return NewIntBoolMapFrom(gm.Map(), !gm.mu.IsSafe()) +} + +// 返回当前哈希表的数据Map. +func (gm *IntBoolMap) Map() map[int]bool { m := make(map[int]bool) gm.mu.RLock() for k, v := range gm.m { diff --git a/g/container/gmap/gmap_int_int_map.go b/g/container/gmap/gmap_int_int_map.go index 0920db159..de71b2a09 100644 --- a/g/container/gmap/gmap_int_int_map.go +++ b/g/container/gmap/gmap_int_int_map.go @@ -23,6 +23,29 @@ func NewIntIntMap(unsafe...bool) *IntIntMap { } } +func NewIntIntMapFrom(m map[int]int, unsafe...bool) *IntIntMap { + return &IntIntMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + +func NewIntIntMapFromArray(keys []int, values []int, unsafe...bool) *IntIntMap { + m := make(map[int]int) + l := len(values) + for i, k := range keys { + if i < l { + m[k] = values[i] + } else { + m[k] = 0 + } + } + return &IntIntMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + // 给定回调函数对原始内容进行遍历,回调函数返回true表示继续遍历,否则停止遍历 func (gm *IntIntMap) Iterator(f func (k int, v int) bool) { gm.mu.RLock() @@ -34,8 +57,13 @@ func (gm *IntIntMap) Iterator(f func (k int, v int) bool) { } } -// 哈希表克隆 -func (gm *IntIntMap) Clone() map[int]int { +// 哈希表克隆. +func (gm *IntIntMap) Clone() *IntIntMap { + return NewIntIntMapFrom(gm.Map(), !gm.mu.IsSafe()) +} + +// 返回当前哈希表的数据Map. +func (gm *IntIntMap) Map() map[int]int { m := make(map[int]int) gm.mu.RLock() for k, v := range gm.m { diff --git a/g/container/gmap/gmap_int_interface_map.go b/g/container/gmap/gmap_int_interface_map.go index 47c7e20a1..a2da67013 100644 --- a/g/container/gmap/gmap_int_interface_map.go +++ b/g/container/gmap/gmap_int_interface_map.go @@ -24,6 +24,29 @@ func NewIntInterfaceMap(unsafe...bool) *IntInterfaceMap { } } +func NewIntInterfaceMapFrom(m map[int]interface{}, unsafe...bool) *IntInterfaceMap { + return &IntInterfaceMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + +func NewIntInterfaceMapFromArray(keys []int, values []interface{}, unsafe...bool) *IntInterfaceMap { + m := make(map[int]interface{}) + l := len(values) + for i, k := range keys { + if i < l { + m[k] = values[i] + } else { + m[k] = interface{}(nil) + } + } + return &IntInterfaceMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + // 给定回调函数对原始内容进行遍历,回调函数返回true表示继续遍历,否则停止遍历 func (gm *IntInterfaceMap) Iterator(f func (k int, v interface{}) bool) { gm.mu.RLock() @@ -35,8 +58,13 @@ func (gm *IntInterfaceMap) Iterator(f func (k int, v interface{}) bool) { } } -// 哈希表克隆 -func (gm *IntInterfaceMap) Clone() map[int]interface{} { +// 哈希表克隆. +func (gm *IntInterfaceMap) Clone() *IntInterfaceMap { + return NewIntInterfaceMapFrom(gm.Map(), !gm.mu.IsSafe()) +} + +// 返回当前哈希表的数据Map. +func (gm *IntInterfaceMap) Map() map[int]interface{} { m := make(map[int]interface{}) gm.mu.RLock() for k, v := range gm.m { diff --git a/g/container/gmap/gmap_int_string_map.go b/g/container/gmap/gmap_int_string_map.go index b11c326f8..737d56fdb 100644 --- a/g/container/gmap/gmap_int_string_map.go +++ b/g/container/gmap/gmap_int_string_map.go @@ -24,6 +24,29 @@ func NewIntStringMap(unsafe...bool) *IntStringMap { } } +func NewIntStringMapFrom(m map[int]string, unsafe...bool) *IntStringMap { + return &IntStringMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + +func NewIntStringMapFromArray(keys []int, values []string, unsafe...bool) *IntStringMap { + m := make(map[int]string) + l := len(values) + for i, k := range keys { + if i < l { + m[k] = values[i] + } else { + m[k] = "" + } + } + return &IntStringMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + // 给定回调函数对原始内容进行遍历,回调函数返回true表示继续遍历,否则停止遍历 func (gm *IntStringMap) Iterator(f func (k int, v string) bool) { gm.mu.RLock() @@ -35,8 +58,13 @@ func (gm *IntStringMap) Iterator(f func (k int, v string) bool) { } } -// 哈希表克隆 -func (gm *IntStringMap) Clone() map[int]string { +// 哈希表克隆. +func (gm *IntStringMap) Clone() *IntStringMap { + return NewIntStringMapFrom(gm.Map(), !gm.mu.IsSafe()) +} + +// 返回当前哈希表的数据Map. +func (gm *IntStringMap) Map() map[int]string { m := make(map[int]string) gm.mu.RLock() for k, v := range gm.m { diff --git a/g/container/gmap/gmap_string_bool_map.go b/g/container/gmap/gmap_string_bool_map.go index 4ea9f9aad..c421412d1 100644 --- a/g/container/gmap/gmap_string_bool_map.go +++ b/g/container/gmap/gmap_string_bool_map.go @@ -23,6 +23,29 @@ func NewStringBoolMap(unsafe...bool) *StringBoolMap { } } +func NewStringBoolMapFrom(m map[string]bool, unsafe...bool) *StringBoolMap { + return &StringBoolMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + +func NewStringBoolMapFromArray(keys []string, values []bool, unsafe...bool) *StringBoolMap { + m := make(map[string]bool) + l := len(values) + for i, k := range keys { + if i < l { + m[k] = values[i] + } else { + m[k] = false + } + } + return &StringBoolMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + // 给定回调函数对原始内容进行遍历,回调函数返回true表示继续遍历,否则停止遍历 func (gm *StringBoolMap) Iterator(f func (k string, v bool) bool) { gm.mu.RLock() @@ -34,8 +57,13 @@ func (gm *StringBoolMap) Iterator(f func (k string, v bool) bool) { } } -// 哈希表克隆 -func (gm *StringBoolMap) Clone() map[string]bool { +// 哈希表克隆. +func (gm *StringBoolMap) Clone() *StringBoolMap { + return NewStringBoolMapFrom(gm.Map(), !gm.mu.IsSafe()) +} + +// 返回当前哈希表的数据Map. +func (gm *StringBoolMap) Map() map[string]bool { m := make(map[string]bool) gm.mu.RLock() for k, v := range gm.m { diff --git a/g/container/gmap/gmap_string_int_map.go b/g/container/gmap/gmap_string_int_map.go index c82a937fd..71743085c 100644 --- a/g/container/gmap/gmap_string_int_map.go +++ b/g/container/gmap/gmap_string_int_map.go @@ -24,6 +24,29 @@ func NewStringIntMap(unsafe...bool) *StringIntMap { } } +func NewStringIntMapFrom(m map[string]int, unsafe...bool) *StringIntMap { + return &StringIntMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + +func NewStringIntMapFromArray(keys []string, values []int, unsafe...bool) *StringIntMap { + m := make(map[string]int) + l := len(values) + for i, k := range keys { + if i < l { + m[k] = values[i] + } else { + m[k] = 0 + } + } + return &StringIntMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + // 给定回调函数对原始内容进行遍历,回调函数返回true表示继续遍历,否则停止遍历 func (gm *StringIntMap) Iterator(f func (k string, v int) bool) { gm.mu.RLock() @@ -35,8 +58,13 @@ func (gm *StringIntMap) Iterator(f func (k string, v int) bool) { } } -// 哈希表克隆 -func (gm *StringIntMap) Clone() map[string]int { +// 哈希表克隆. +func (gm *StringIntMap) Clone() *StringIntMap { + return NewStringIntMapFrom(gm.Map(), !gm.mu.IsSafe()) +} + +// 返回当前哈希表的数据Map. +func (gm *StringIntMap) Map() map[string]int { m := make(map[string]int) gm.mu.RLock() for k, v := range gm.m { diff --git a/g/container/gmap/gmap_string_interface_map.go b/g/container/gmap/gmap_string_interface_map.go index 1bdb206c3..8f9bc438d 100644 --- a/g/container/gmap/gmap_string_interface_map.go +++ b/g/container/gmap/gmap_string_interface_map.go @@ -24,6 +24,29 @@ func NewStringInterfaceMap(unsafe...bool) *StringInterfaceMap { } } +func NewStringInterfaceMapFrom(m map[string]interface{}, unsafe...bool) *StringInterfaceMap { + return &StringInterfaceMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + +func NewStringInterfaceMapFromArray(keys []string, values []interface{}, unsafe...bool) *StringInterfaceMap { + m := make(map[string]interface{}) + l := len(values) + for i, k := range keys { + if i < l { + m[k] = values[i] + } else { + m[k] = interface{}(nil) + } + } + return &StringInterfaceMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + // 给定回调函数对原始内容进行遍历,回调函数返回true表示继续遍历,否则停止遍历 func (gm *StringInterfaceMap) Iterator(f func (k string, v interface{}) bool) { gm.mu.RLock() @@ -35,8 +58,13 @@ func (gm *StringInterfaceMap) Iterator(f func (k string, v interface{}) bool) { } } -// 哈希表克隆 -func (gm *StringInterfaceMap) Clone() map[string]interface{} { +// 哈希表克隆. +func (gm *StringInterfaceMap) Clone() *StringInterfaceMap { + return NewStringInterfaceMapFrom(gm.Map(), !gm.mu.IsSafe()) +} + +// 返回当前哈希表的数据Map. +func (gm *StringInterfaceMap) Map() map[string]interface{} { m := make(map[string]interface{}) gm.mu.RLock() for k, v := range gm.m { diff --git a/g/container/gmap/gmap_string_string_map.go b/g/container/gmap/gmap_string_string_map.go index 6709b5a9f..d663ec114 100644 --- a/g/container/gmap/gmap_string_string_map.go +++ b/g/container/gmap/gmap_string_string_map.go @@ -23,6 +23,29 @@ func NewStringStringMap(unsafe...bool) *StringStringMap { } } +func NewStringStringMapFrom(m map[string]string, unsafe...bool) *StringStringMap { + return &StringStringMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + +func NewStringStringMapFromArray(keys []string, values []string, unsafe...bool) *StringStringMap { + m := make(map[string]string) + l := len(values) + for i, k := range keys { + if i < l { + m[k] = values[i] + } else { + m[k] = "" + } + } + return &StringStringMap{ + m : m, + mu : rwmutex.New(unsafe...), + } +} + // 给定回调函数对原始内容进行遍历,回调函数返回true表示继续遍历,否则停止遍历 func (gm *StringStringMap) Iterator(f func (k string, v string) bool) { gm.mu.RLock() @@ -34,8 +57,13 @@ func (gm *StringStringMap) Iterator(f func (k string, v string) bool) { } } -// 哈希表克隆 -func (gm *StringStringMap) Clone() map[string]string { +// 哈希表克隆. +func (gm *StringStringMap) Clone() *StringStringMap { + return NewStringStringMapFrom(gm.Map(), !gm.mu.IsSafe()) +} + +// 返回当前哈希表的数据Map. +func (gm *StringStringMap) Map() map[string]string { m := make(map[string]string) gm.mu.RLock() for k, v := range gm.m { diff --git a/g/net/ghttp/ghttp_server_session.go b/g/net/ghttp/ghttp_server_session.go index a3c7e141b..9e89874fc 100644 --- a/g/net/ghttp/ghttp_server_session.go +++ b/g/net/ghttp/ghttp_server_session.go @@ -61,7 +61,7 @@ func (s *Session) Id() string { // 获取当前session所有数据 func (s *Session) Data() map[string]interface{} { s.init() - return s.data.Clone() + return s.data.Map() } // 设置session