diff --git a/data.go b/data.go index 0b9e210..16475c4 100644 --- a/data.go +++ b/data.go @@ -2,6 +2,7 @@ package plugin import ( "container/list" + "strings" ) func (obj *PluginObject) Get(k string) any { @@ -16,6 +17,33 @@ func (obj *PluginObject) Set(k string, v any) { obj.taskData[k] = v } +func (obj *PluginObject) GetAll(prefix *string) any { + obj.taskDataLock.RLock() + defer obj.taskDataLock.RUnlock() + if prefix == nil { + return obj.taskData + } + m := make(map[string]any) + for k := range obj.taskData { + if strings.HasPrefix(k, *prefix) { + m[k] = obj.taskData[k] + } + } + return m +} + +func (obj *PluginObject) Keys(prefix *string) []string { + obj.taskDataLock.Lock() + defer obj.taskDataLock.Unlock() + keys := make([]string, 0) + for k := range obj.taskData { + if prefix == nil || strings.HasPrefix(k, *prefix) { + keys = append(keys, k) + } + } + return keys +} + func (obj *PluginObject) GetSet(k string, fn func(old any) any) { obj.taskDataLock.Lock() defer obj.taskDataLock.Unlock() @@ -28,6 +56,16 @@ func (obj *PluginObject) Remove(k string) { delete(obj.taskData, k) } +func (obj *PluginObject) RemoveAll(prefix *string) { + obj.taskDataLock.Lock() + defer obj.taskDataLock.Unlock() + for k := range obj.taskData { + if prefix == nil || strings.HasPrefix(k, *prefix) { + delete(obj.taskData, k) + } + } +} + func (obj *PluginObject) Push(k string, v any) { obj.taskListLock.Lock() defer obj.taskListLock.Unlock()