summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
authorCarl C. Trieloff <cctrieloff@apache.org>2009-11-10 19:17:32 +0000
committerCarl C. Trieloff <cctrieloff@apache.org>2009-11-10 19:17:32 +0000
commit1b4f7d549a7c44ffe5a5e000ca0b3b5d2cdd3e73 (patch)
tree8c0a6b7e63c675b85e3c4f58a7ade20bb371c343 /cpp/src/qpid
parentac8ea7e7ef33c4f6e0beab1131a66662ca82c8cb (diff)
downloadqpid-python-1b4f7d549a7c44ffe5a5e000ca0b3b5d2cdd3e73.tar.gz
Also remove liner search from seek() & add tests
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@834607 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/broker/Queue.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp
index a3a7336f35..7087c6b081 100644
--- a/cpp/src/qpid/broker/Queue.cpp
+++ b/cpp/src/qpid/broker/Queue.cpp
@@ -429,6 +429,7 @@ bool Queue::dispatch(Consumer::shared_ptr c)
}
}
+// Find the next message
bool Queue::seek(QueuedMessage& msg, Consumer::shared_ptr c) {
Mutex::ScopedLock locker(messageLock);
if (!messages.empty() && messages.back().position > c->position) {
@@ -436,13 +437,11 @@ bool Queue::seek(QueuedMessage& msg, Consumer::shared_ptr c) {
msg = getFront();
return true;
} else {
- //TODO: can improve performance of this search, for now just searching linearly from end
- Messages::reverse_iterator pos;
- for (Messages::reverse_iterator i = messages.rbegin(); i != messages.rend() && i->position > c->position; i++) {
- pos = i;
+ Messages::iterator pos = findAt(c->position);
+ if (pos != messages.end() && pos+1 != messages.end()) {
+ msg = *(pos+1);
+ return true;
}
- msg = *pos;
- return true;
}
}
listeners.addListener(c);