github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/system/scripts/pull.go (about) 1 // This file is part of the Smart Home 2 // Program complex distribution https://github.com/e154/smart-home 3 // Copyright (C) 2016-2023, Filippov Alex 4 // 5 // This library is free software: you can redistribute it and/or 6 // modify it under the terms of the GNU Lesser General Public 7 // License as published by the Free Software Foundation; either 8 // version 3 of the License, or (at your option) any later version. 9 // 10 // This library is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 // Library General Public License for more details. 14 // 15 // You should have received a copy of the GNU Lesser General Public 16 // License along with this library. If not, see 17 // <https://www.gnu.org/licenses/>. 18 19 package scripts 20 21 import ( 22 "sync" 23 ) 24 25 // Pull ... 26 type Pull struct { 27 heap sync.Map 28 } 29 30 // NewPull ... 31 func NewPull() *Pull { 32 return &Pull{ 33 heap: sync.Map{}, 34 } 35 } 36 37 // Get ... 38 func (p *Pull) Get(name string) (value interface{}, ok bool) { 39 value, ok = p.heap.Load(name) 40 return 41 } 42 43 // Push ... 44 func (p *Pull) Push(name string, s interface{}) { 45 p.heap.Store(name, s) 46 } 47 48 // Pop ... 49 func (p *Pull) Pop(name string) { 50 p.heap.Delete(name) 51 } 52 53 // Purge ... 54 func (p *Pull) Purge() { 55 p.heap.Range(func(key, value interface{}) bool { 56 p.heap.Delete(key) 57 return true 58 }) 59 } 60 61 func (p *Pull) Range(f func(key, value interface{}) bool) { 62 p.heap.Range(f) 63 }