dtu_device.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package iotMap
  2. import (
  3. iotStruct "IotAdmin/iot/struct"
  4. "sync"
  5. )
  6. type DtuDeviceMap struct {
  7. Map *sync.Map
  8. }
  9. func NewDMapDtuDev() *DtuDeviceMap {
  10. cm := &DtuDeviceMap{
  11. Map: &sync.Map{},
  12. }
  13. return cm
  14. }
  15. func (cm *DtuDeviceMap) Add(key string, val *iotStruct.DtuDevice) {
  16. cm.Map.Store(key, val)
  17. }
  18. func (cm *DtuDeviceMap) Remove(key string) {
  19. cm.Map.Delete(key)
  20. }
  21. func (cm *DtuDeviceMap) Get(key string) (*iotStruct.DtuDevice, bool) {
  22. res := &iotStruct.DtuDevice{}
  23. x, ok := cm.Map.Load(key)
  24. if ok {
  25. res = x.(*iotStruct.DtuDevice)
  26. return res, true
  27. }
  28. return res, false
  29. }
  30. // AlterKey 修改key
  31. func (cm *DtuDeviceMap) AlterKey(before, after string) bool {
  32. if before == after {
  33. return true
  34. }
  35. if v, ok := cm.Map.Load(before); !ok {
  36. return false
  37. } else {
  38. if _, ok = cm.Map.Load(after); ok {
  39. return false
  40. }
  41. val := v.(*iotStruct.DtuDevice)
  42. cm.Map.Store(after, val)
  43. cm.Map.Delete(before)
  44. return true
  45. }
  46. }
  47. func (cm *DtuDeviceMap) Len() int {
  48. c := 0
  49. cm.Map.Range(func(key, value interface{}) bool {
  50. c++
  51. return true
  52. })
  53. return c
  54. }
  55. func (cm *DtuDeviceMap) Clean() {
  56. cm.Map = new(sync.Map)
  57. }