X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fcommon%2FQueueRing.h;fp=src%2Fceph%2Fsrc%2Fcommon%2FQueueRing.h;h=0000000000000000000000000000000000000000;hb=7da45d65be36d36b880cc55c5036e96c24b53f00;hp=42582d24f4462c508ae357e8f9256aeda2d0540f;hpb=691462d09d0987b47e112d6ee8740375df3c51b2;p=stor4nfv.git diff --git a/src/ceph/src/common/QueueRing.h b/src/ceph/src/common/QueueRing.h deleted file mode 100644 index 42582d2..0000000 --- a/src/ceph/src/common/QueueRing.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef QUEUE_RING_H -#define QUEUE_RING_H - -#include "common/Mutex.h" -#include "common/Cond.h" - -#include -#include -#include - -template -class QueueRing { - struct QueueBucket { - Mutex lock; - Cond cond; - typename std::list entries; - - QueueBucket() : lock("QueueRing::QueueBucket::lock") {} - QueueBucket(const QueueBucket& rhs) : lock("QueueRing::QueueBucket::lock") { - entries = rhs.entries; - } - - void enqueue(const T& entry) { - lock.Lock(); - if (entries.empty()) { - cond.Signal(); - } - entries.push_back(entry); - lock.Unlock(); - } - - void dequeue(T *entry) { - lock.Lock(); - if (entries.empty()) { - cond.Wait(lock); - }; - assert(!entries.empty()); - *entry = entries.front(); - entries.pop_front(); - lock.Unlock(); - }; - }; - - std::vector buckets; - int num_buckets; - - std::atomic cur_read_bucket = { 0 }; - std::atomic cur_write_bucket = { 0 }; - -public: - QueueRing(int n) : buckets(n), num_buckets(n) { - } - - void enqueue(const T& entry) { - buckets[++cur_write_bucket % num_buckets].enqueue(entry); - }; - - void dequeue(T *entry) { - buckets[++cur_read_bucket % num_buckets].dequeue(entry); - } -}; - -#endif