diff options
| author | Ted Ross <tross@apache.org> | 2011-01-13 19:10:07 +0000 |
|---|---|---|
| committer | Ted Ross <tross@apache.org> | 2011-01-13 19:10:07 +0000 |
| commit | f4c09955551730009ed91ab0b58ab43326c9306b (patch) | |
| tree | e3ee805267b03dbad8f320596e76c6982a5f417c /cpp/src/qmf/engine/ValueImpl.cpp | |
| parent | f95470cacb910af18a29895f7d4f817d70c61e79 (diff) | |
| download | qpid-python-f4c09955551730009ed91ab0b58ab43326c9306b.tar.gz | |
In qmfengine, if a method call or method response requires a buffer larger than the
static buffer used for communication, allocate a large-enough buffer temporarily from the
heap.
A test is included to verify large-buffer behavior.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1058709 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qmf/engine/ValueImpl.cpp')
| -rw-r--r-- | cpp/src/qmf/engine/ValueImpl.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/cpp/src/qmf/engine/ValueImpl.cpp b/cpp/src/qmf/engine/ValueImpl.cpp index 409bf64c35..f9ebbf5028 100644 --- a/cpp/src/qmf/engine/ValueImpl.cpp +++ b/cpp/src/qmf/engine/ValueImpl.cpp @@ -394,6 +394,51 @@ void ValueImpl::encode(Buffer& buf) const } } +uint32_t ValueImpl::encodedSize() const +{ + FieldTable ft; + List fl; + + switch (typecode) { + case TYPE_UINT8 : + case TYPE_BOOL : + case TYPE_INT8 : return 1; + + case TYPE_UINT16 : + case TYPE_INT16 : return 2; + + case TYPE_UINT32 : + case TYPE_INT32 : + case TYPE_FLOAT : return 4; + + case TYPE_UINT64 : + case TYPE_INT64 : + case TYPE_DOUBLE : + case TYPE_ABSTIME : + case TYPE_DELTATIME : return 8; + + case TYPE_UUID : + case TYPE_REF : return 16; + + case TYPE_SSTR : return 1 + stringVal.size(); + case TYPE_LSTR : return 2 + stringVal.size(); + case TYPE_MAP: + mapToFieldTable(ft); + return ft.encodedSize(); + + case TYPE_LIST: + listToFramingList(fl); + return fl.encodedSize(); + + case TYPE_ARRAY: + case TYPE_OBJECT: + default: + break; + } + + return 0; +} + bool ValueImpl::keyInMap(const char* key) const { return typecode == TYPE_MAP && mapVal.count(key) > 0; |
