gmap updates

This commit is contained in:
John
2019-02-01 22:25:58 +08:00
parent 7b85c44444
commit 16bde5e9fc
10 changed files with 257 additions and 21 deletions

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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