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