Add readWithPriority to PriorityMPMCQueue
authorZheng Yan <zyan@fb.com>
Wed, 20 Dec 2017 03:40:14 +0000 (19:40 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Wed, 20 Dec 2017 03:56:39 +0000 (19:56 -0800)
Summary: Add readWithPriority to PriorityMPMCQueue

Reviewed By: yfeldblum

Differential Revision: D6606604

fbshipit-source-id: 07382e3c6d0f53a8727c059410c0577cf0aac82c

folly/PriorityMPMCQueue.h
folly/test/PriorityMPMCQueueTest.cpp

index fb4e4645228d8ff8985cca87380b1645f79e9922..b12cbf33942ccff671404f6a4373427408c368c1 100644 (file)
@@ -66,6 +66,10 @@ class PriorityMPMCQueue {
     return false;
   }
 
+  bool readWithPriority(T& item, size_t priority) {
+    return queues_[priority].readIfNotEmpty(item);
+  }
+
   size_t size() const {
     size_t total_size = 0;
     for (auto& q : queues_) {
index a43cca0ba1eb886d0728ce2c6e662b91641a85e8..a129568f7793b5891a00ccd4898f6246c0978fb6 100644 (file)
@@ -73,3 +73,24 @@ TEST(PriorityMPMCQueue, TestPriorities) {
     EXPECT_EQ(6 - i, queue.sizeGuess());
   }
 }
+
+TEST(PriorityMPMCQueue, TestReadWithPriority) {
+  PriorityMPMCQueue<size_t> queue(3, 10);
+  EXPECT_TRUE(queue.isEmpty());
+  EXPECT_EQ(3, queue.getNumPriorities());
+
+  queue.writeWithPriority(2, 2);
+  queue.writeWithPriority(1, 1);
+  queue.writeWithPriority(0, 0);
+
+  EXPECT_FALSE(queue.isEmpty());
+  EXPECT_EQ(3, queue.size());
+  EXPECT_EQ(3, queue.sizeGuess());
+
+  size_t item;
+  for (int i = 0; i < 3; i++) {
+    EXPECT_TRUE(queue.readWithPriority(item, i));
+    EXPECT_EQ(i, item);
+    EXPECT_FALSE(queue.readWithPriority(item, i));
+  }
+}