From a854355952341a3ed1696e4f6836e761779094a1 Mon Sep 17 00:00:00 2001 From: boyce Date: Tue, 26 Mar 2019 16:11:39 +0800 Subject: [PATCH] queue add RLockRange method. --- util/queue/queue.go | 2 +- util/queue/syncqueue.go | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/util/queue/queue.go b/util/queue/queue.go index 43d7de4..a4d3cf3 100644 --- a/util/queue/queue.go +++ b/util/queue/queue.go @@ -78,7 +78,7 @@ func (q *Queue) Get(i int) interface{} { i += q.count } if i < 0 || i >= q.count { - panic("queue: Get() called with index out of range") + return nil } // bitwise modulus return q.buf[(q.head+i)&(len(q.buf)-1)] diff --git a/util/queue/syncqueue.go b/util/queue/syncqueue.go index 987c560..752665c 100644 --- a/util/queue/syncqueue.go +++ b/util/queue/syncqueue.go @@ -43,6 +43,15 @@ func (q *SyncQueue) Pop() interface{} { return q.que.Pop() } +func (q *SyncQueue) RLockRange(f func(interface{})) { + q.mutex.RLock() + defer q.mutex.RUnlock() + + for i := 0; i < q.que.Length(); i++ { + f(q.Get(i)) + } +} + func NewSyncQueue() *SyncQueue { syncQueue := SyncQueue{} syncQueue.que = NewQueue()