summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/client/MessageReplayTracker.cpp5
-rw-r--r--cpp/src/qpid/client/MessageReplayTracker.h7
2 files changed, 9 insertions, 3 deletions
diff --git a/cpp/src/qpid/client/MessageReplayTracker.cpp b/cpp/src/qpid/client/MessageReplayTracker.cpp
index 3c36b03b34..9ffbb76837 100644
--- a/cpp/src/qpid/client/MessageReplayTracker.cpp
+++ b/cpp/src/qpid/client/MessageReplayTracker.cpp
@@ -28,8 +28,8 @@ MessageReplayTracker::MessageReplayTracker(uint f) : flushInterval(f), count(0)
void MessageReplayTracker::send(const Message& message, const std::string& destination)
{
- ReplayRecord record(message, destination);
- record.send(*this);
+ buffer.push_back(ReplayRecord(message, destination));
+ buffer.back().send(*this);
if (flushInterval && ++count >= flushInterval) {
checkCompletion();
if (!buffer.empty()) session.flush();
@@ -70,7 +70,6 @@ MessageReplayTracker::ReplayRecord::ReplayRecord(const Message& m, const std::st
void MessageReplayTracker::ReplayRecord::send(MessageReplayTracker& tracker)
{
status = tracker.session.messageTransfer(arg::destination=destination, arg::content=message);
- tracker.buffer.push_back(*this);
}
bool MessageReplayTracker::ReplayRecord::isComplete()
diff --git a/cpp/src/qpid/client/MessageReplayTracker.h b/cpp/src/qpid/client/MessageReplayTracker.h
index 40324de4e9..45b16fb704 100644
--- a/cpp/src/qpid/client/MessageReplayTracker.h
+++ b/cpp/src/qpid/client/MessageReplayTracker.h
@@ -44,6 +44,13 @@ class MessageReplayTracker
void setFlushInterval(uint interval);
uint getFlushInterval();
void checkCompletion();
+
+ template <class F> void foreach(F& f) {
+ for (std::list<ReplayRecord>::const_iterator i = buffer.begin(); i != buffer.end(); i++) {
+ f(i->message);
+ }
+ }
+
private:
struct ReplayRecord
{