summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2008-09-19 17:49:18 +0000
committerGordon Sim <gsim@apache.org>2008-09-19 17:49:18 +0000
commit615b8ac47279f8b98d4d31b7dacdd7ad07b1feeb (patch)
tree04d7a342b1577fc7e0e2f0f7fe11d63156d16a6c /qpid/cpp
parent3f8a7a0df1dd42496cd59747e58b955ae9c40446 (diff)
downloadqpid-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/cpp')
-rw-r--r--qpid/cpp/src/qpid/framing/FieldTable.cpp17
-rw-r--r--qpid/cpp/src/qpid/framing/FieldTable.h4
-rw-r--r--qpid/cpp/src/qpid/framing/FieldValue.h22
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