diff options
author | Gordon Sim <gsim@apache.org> | 2008-09-19 17:49:18 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2008-09-19 17:49:18 +0000 |
commit | 615b8ac47279f8b98d4d31b7dacdd7ad07b1feeb (patch) | |
tree | 04d7a342b1577fc7e0e2f0f7fe11d63156d16a6c /qpid | |
parent | 3f8a7a0df1dd42496cd59747e58b955ae9c40446 (diff) | |
download | qpid-python-615b8ac47279f8b98d4d31b7dacdd7ad07b1feeb.tar.gz |
Return success indicator for getTable/getArray, cleanup implementation a little.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@697165 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid')
-rw-r--r-- | qpid/cpp/src/qpid/framing/FieldTable.cpp | 17 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/framing/FieldTable.h | 4 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/framing/FieldValue.h | 22 |
3 files changed, 20 insertions, 23 deletions
diff --git a/qpid/cpp/src/qpid/framing/FieldTable.cpp b/qpid/cpp/src/qpid/framing/FieldTable.cpp index 5a5d755fe8..a85f5e0918 100644 --- a/qpid/cpp/src/qpid/framing/FieldTable.cpp +++ b/qpid/cpp/src/qpid/framing/FieldTable.cpp @@ -123,21 +123,12 @@ int FieldTable::getInt(const std::string& name) const { // return getValue<uint64_t>(name); //} -void FieldTable::getTable(const std::string& name, FieldTable& value) const { - FieldTable::ValuePtr vptr = get(name); - if (vptr) { - value = vptr->get<const FieldTable&>(); - } +bool FieldTable::getTable(const std::string& name, FieldTable& value) const { + return getEncodedValue<FieldTable>(get(name), value); } -void FieldTable::getArray(const std::string& name, Array& value) const { - FieldTable::ValuePtr vptr = get(name); - if (vptr) { - const EncodedValue<Array>* ev = dynamic_cast< EncodedValue<Array>* >(&(vptr->getData())); - if (ev != 0) { - value = ev->getValue(); - } - } +bool FieldTable::getArray(const std::string& name, Array& value) const { + return getEncodedValue<Array>(get(name), value); } void FieldTable::encode(Buffer& buffer) const{ diff --git a/qpid/cpp/src/qpid/framing/FieldTable.h b/qpid/cpp/src/qpid/framing/FieldTable.h index 4a0d4da11e..ba440b1432 100644 --- a/qpid/cpp/src/qpid/framing/FieldTable.h +++ b/qpid/cpp/src/qpid/framing/FieldTable.h @@ -71,8 +71,8 @@ class FieldTable std::string getString(const std::string& name) const; int getInt(const std::string& name) const; // uint64_t getTimestamp(const std::string& name) const; - void getTable(const std::string& name, FieldTable& value) const; - void getArray(const std::string& name, Array& value) const; + bool getTable(const std::string& name, FieldTable& value) const; + bool getArray(const std::string& name, Array& value) const; // //void getDecimal(string& name, xxx& value); // //void erase(const std::string& name); diff --git a/qpid/cpp/src/qpid/framing/FieldValue.h b/qpid/cpp/src/qpid/framing/FieldValue.h index a19375fcef..a38b559239 100644 --- a/qpid/cpp/src/qpid/framing/FieldValue.h +++ b/qpid/cpp/src/qpid/framing/FieldValue.h @@ -229,14 +229,6 @@ class EncodedValue : public FieldValue::Data { void print(std::ostream& o) const { o << "[" << value << "]"; }; }; -template <> -inline const FieldTable& FieldValue::get<const FieldTable&>() const -{ - const EncodedValue<FieldTable>* ev = dynamic_cast< EncodedValue<FieldTable>* >(data.get()); - if (ev == 0) throw InvalidConversionException(); - return ev->getValue(); -} - /* * Basic string value encodes as iso-8859-15 with 32 bit length */ @@ -279,6 +271,20 @@ class ArrayValue : public FieldValue { ArrayValue(const Array&); }; + +template <class T> +bool getEncodedValue(FieldTable::ValuePtr vptr, T& value) +{ + if (vptr) { + const EncodedValue<T>* ev = dynamic_cast< EncodedValue<T>* >(&(vptr->getData())); + if (ev != 0) { + value = ev->getValue(); + return true; + } + } + return false; +} + }} // qpid::framing #endif |