Author: aconway Date: Thu May 7 19:48:28 2009 New Revision: 772752 URL: http://svn.apache.org/viewvc?rev=772752&view=rev Log: Use set for efficient insert/remove rather than list.
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.cpp qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.h Modified: qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.cpp?rev=772752&r1=772751&r2=772752&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.cpp Thu May 7 19:48:28 2009 @@ -27,43 +27,31 @@ void QueueListeners::addListener(Consumer::shared_ptr c) { if (c->preAcquires()) { - add(consumers, c); + consumers.insert(c); } else { - add(browsers, c); + browsers.insert(c); } } void QueueListeners::removeListener(Consumer::shared_ptr c) { if (c->preAcquires()) { - remove(consumers, c); + consumers.erase(c); } else { - remove(browsers, c); + browsers.erase(c); } } void QueueListeners::populate(NotificationSet& set) { - if (consumers.size()) { - set.consumer = consumers.front(); - consumers.pop_front(); + if (!consumers.empty()) { + set.consumer = *consumers.begin(); + consumers.erase(consumers.begin()); } else { browsers.swap(set.browsers); } } -void QueueListeners::add(Listeners& listeners, Consumer::shared_ptr c) -{ - Listeners::iterator i = std::find(listeners.begin(), listeners.end(), c); - if (i == listeners.end()) listeners.push_back(c); -} - -void QueueListeners::remove(Listeners& listeners, Consumer::shared_ptr c) -{ - Listeners::iterator i = std::find(listeners.begin(), listeners.end(), c); - if (i != listeners.end()) listeners.erase(i); -} - void QueueListeners::NotificationSet::notify() { if (consumer) consumer->notify(); Modified: qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.h URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.h?rev=772752&r1=772751&r2=772752&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.h (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/QueueListeners.h Thu May 7 19:48:28 2009 @@ -22,7 +22,7 @@ * */ #include "Consumer.h" -#include <list> +#include <set> namespace qpid { namespace broker { @@ -40,7 +40,7 @@ class QueueListeners { public: - typedef std::list<Consumer::shared_ptr> Listeners; + typedef std::set<Consumer::shared_ptr> Listeners; class NotificationSet { @@ -58,10 +58,6 @@ private: Listeners consumers; Listeners browsers; - - void add(Listeners&, Consumer::shared_ptr); - void remove(Listeners&, Consumer::shared_ptr); - }; }} // namespace qpid::broker --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:commits-subscr...@qpid.apache.org