diff options
author | Alan Conway <aconway@apache.org> | 2007-11-13 21:33:16 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-11-13 21:33:16 +0000 |
commit | cce6eaa238a2bb4d64ccb4450d6f39320fe5434c (patch) | |
tree | 44755008be815f8d9a2c76eaf369d911fae8d098 /cpp/src/qpid/framing/FrameSet.cpp | |
parent | bbc7853c8deda6f064fb15d0fb12cd42ab129206 (diff) | |
download | qpid-python-cce6eaa238a2bb4d64ccb4450d6f39320fe5434c.tar.gz |
Stopped frameset from assembling messages piecewise.
Roughly halves allocations on the broker, not much effect on client.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@594647 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/framing/FrameSet.cpp')
-rw-r--r-- | cpp/src/qpid/framing/FrameSet.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/cpp/src/qpid/framing/FrameSet.cpp b/cpp/src/qpid/framing/FrameSet.cpp index b361076ee7..9d9b7bc8f8 100644 --- a/cpp/src/qpid/framing/FrameSet.cpp +++ b/cpp/src/qpid/framing/FrameSet.cpp @@ -64,18 +64,20 @@ AMQHeaderBody* FrameSet::getHeaders() uint64_t FrameSet::getContentSize() const { SumBodySize sum; - map_if(sum, TypeFilter(CONTENT_BODY)); + map_if(sum, TypeFilter<CONTENT_BODY>()); return sum.getSize(); } -void FrameSet::getContent(std::string& out) const -{ - AccumulateContent accumulator(out); - map_if(accumulator, TypeFilter(CONTENT_BODY)); +void FrameSet::getContent(std::string& out) const { + out.clear(); + out.reserve(getContentSize()); + for(Frames::const_iterator i = parts.begin(); i != parts.end(); i++) { + if (i->getBody()->type() == CONTENT_BODY) + out += i->castBody<AMQContentBody>()->getData(); + } } -std::string FrameSet::getContent() const -{ +std::string FrameSet::getContent() const { std::string out; getContent(out); return out; |