Merge pull request #901 from Mazyod/notificationQueueRemove

Added NotificationQueue::remove function
This commit is contained in:
Günter Obiltschnig 2015-08-07 10:44:45 +02:00
commit 7f6e38438c
4 changed files with 42 additions and 0 deletions

View File

@ -125,6 +125,10 @@ public:
void clear();
/// Removes all notifications from the queue.
bool remove(Notification::Ptr pNotification);
/// Removes a notification from the queue.
/// Returns true if remove succeeded, false otherwise
bool hasIdleThreads() const;
/// Returns true if the queue has at least one thread waiting
/// for a notification.

View File

@ -179,6 +179,19 @@ void NotificationQueue::clear()
}
bool NotificationQueue::remove(Notification::Ptr pNotification)
{
FastMutex::ScopedLock lock(_mutex);
NfQueue::iterator it = std::find(_nfQueue.begin(), _nfQueue.end(), pNotification);
if (it == _nfQueue.end())
{
return false;
}
_nfQueue.erase(it);
return true;
}
bool NotificationQueue::hasIdleThreads() const
{
FastMutex::ScopedLock lock(_mutex);

View File

@ -190,6 +190,29 @@ void NotificationQueueTest::testDefaultQueue()
}
void NotificationQueueTest::testQueueRemove()
{
NotificationQueue queue;
Notification::Ptr frontNotification = new QTestNotification("front");
Notification::Ptr middleNotification = new QTestNotification("middle");
Notification::Ptr backNotification = new QTestNotification("back");
queue.enqueueNotification(frontNotification);
queue.enqueueNotification(new QTestNotification("dummy"));
queue.enqueueNotification(middleNotification);
queue.enqueueNotification(new QTestNotification("dummy"));
queue.enqueueNotification(backNotification);
assert (queue.size() == 5);
assert (queue.remove(frontNotification));
assert (queue.size() == 4);
assert (queue.remove(middleNotification));
assert (queue.size() == 3);
assert (queue.remove(backNotification));
assert (queue.size() == 2);
assert (!queue.remove(backNotification));
assert (queue.size() == 2);
}
void NotificationQueueTest::setUp()
{
_handled.clear();
@ -227,6 +250,7 @@ CppUnit::Test* NotificationQueueTest::suite()
CppUnit_addTest(pSuite, NotificationQueueTest, testWaitDequeue);
CppUnit_addTest(pSuite, NotificationQueueTest, testThreads);
CppUnit_addTest(pSuite, NotificationQueueTest, testDefaultQueue);
CppUnit_addTest(pSuite, NotificationQueueTest, testQueueRemove);
return pSuite;
}

View File

@ -34,6 +34,7 @@ public:
void testWaitDequeue();
void testThreads();
void testDefaultQueue();
void testQueueRemove();
void setUp();
void tearDown();