You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2008/09/19 19:49:19 UTC
svn commit: r697165 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/framing:
FieldTable.cpp FieldTable.h FieldValue.h
Author: gsim
Date: Fri Sep 19 10:49:18 2008
New Revision: 697165
URL: http://svn.apache.org/viewvc?rev=697165&view=rev
Log:
Return success indicator for getTable/getArray, cleanup implementation a little.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.h
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.cpp?rev=697165&r1=697164&r2=697165&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.cpp Fri Sep 19 10:49:18 2008
@@ -123,21 +123,12 @@
// 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{
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.h?rev=697165&r1=697164&r2=697165&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldTable.h Fri Sep 19 10:49:18 2008
@@ -71,8 +71,8 @@
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);
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h?rev=697165&r1=697164&r2=697165&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h Fri Sep 19 10:49:18 2008
@@ -229,14 +229,6 @@
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 @@
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