diff options
Diffstat (limited to 'cpp/src/qpid/framing/FrameSet.cpp')
-rw-r--r-- | cpp/src/qpid/framing/FrameSet.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/cpp/src/qpid/framing/FrameSet.cpp b/cpp/src/qpid/framing/FrameSet.cpp index e6f15f2c4e..f5fe02c5ba 100644 --- a/cpp/src/qpid/framing/FrameSet.cpp +++ b/cpp/src/qpid/framing/FrameSet.cpp @@ -28,11 +28,12 @@ using namespace qpid::framing; using namespace boost; -FrameSet::FrameSet(const SequenceNumber& _id) : id(_id) {parts.reserve(4);} +FrameSet::FrameSet(const SequenceNumber& _id) : id(_id),contentSize(0),recalculateSize(true) {parts.reserve(4);} void FrameSet::append(const AMQFrame& part) { parts.push_back(part); + recalculateSize = true; } bool FrameSet::isComplete() const @@ -63,9 +64,14 @@ AMQHeaderBody* FrameSet::getHeaders() uint64_t FrameSet::getContentSize() const { - SumBodySize sum; - map_if(sum, TypeFilter<CONTENT_BODY>()); - return sum.getSize(); + if (recalculateSize) + { + SumBodySize sum; + map_if(sum, TypeFilter<CONTENT_BODY>()); + contentSize = sum.getSize(); + recalculateSize = false; + } + return contentSize; } void FrameSet::getContent(std::string& out) const { |