You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by jo...@apache.org on 2010/11/01 15:18:08 UTC

svn commit: r1029673 - in /qpid/trunk/qpid/cpp: include/qpid/types/Variant.h src/qpid/messaging/AddressParser.cpp src/qpid/types/Variant.cpp

Author: jonathan
Date: Mon Nov  1 14:18:07 2010
New Revision: 1029673

URL: http://svn.apache.org/viewvc?rev=1029673&view=rev
Log:
Changed Variant::fromString() to Variant::parse(). Also changed implementation.

Modified:
    qpid/trunk/qpid/cpp/include/qpid/types/Variant.h
    qpid/trunk/qpid/cpp/src/qpid/messaging/AddressParser.cpp
    qpid/trunk/qpid/cpp/src/qpid/types/Variant.cpp

Modified: qpid/trunk/qpid/cpp/include/qpid/types/Variant.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/include/qpid/types/Variant.h?rev=1029673&r1=1029672&r2=1029673&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/include/qpid/types/Variant.h (original)
+++ qpid/trunk/qpid/cpp/include/qpid/types/Variant.h Mon Nov  1 14:18:07 2010
@@ -113,7 +113,11 @@ class Variant
     QPID_TYPES_EXTERN Variant& operator=(const Variant&);
     QPID_TYPES_EXTERN Variant& operator=(const Uuid&);
 
-    QPID_TYPES_EXTERN Variant& fromString(const std::string&);
+    /**
+     * Parses the argument and assigns itself the appropriate
+     * value. Recognises integers, doubles and booleans.
+     */
+    QPID_TYPES_EXTERN Variant& parse(const std::string&);
 
     QPID_TYPES_EXTERN bool asBool() const;
     QPID_TYPES_EXTERN uint8_t asUint8() const;

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/AddressParser.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/AddressParser.cpp?rev=1029673&r1=1029672&r2=1029673&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/AddressParser.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/AddressParser.cpp Mon Nov  1 14:18:07 2010
@@ -201,9 +201,8 @@ bool AddressParser::readSimpleValue(Vari
 {
     std::string s;
     if (readWord(s)) {
-        value.fromString(s);        
+        value.parse(s);        
         return true;
-
     } else {
         return false;
     }

Modified: qpid/trunk/qpid/cpp/src/qpid/types/Variant.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/types/Variant.cpp?rev=1029673&r1=1029672&r2=1029673&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/types/Variant.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/types/Variant.cpp Mon Nov  1 14:18:07 2010
@@ -767,39 +767,19 @@ Variant& Variant::operator=(const Varian
     return *this;
 }
 
-
-template <class T>
-bool from_string(T& t, const std::string& s)
+Variant& Variant::parse(const std::string& s)
 {
-    char c; // Make sure there are no extra characters
-    
-    std::istringstream iss(s);
-    return !(iss >> t).fail() && (iss>>c).fail();
-}
-
-Variant& Variant::fromString(const std::string& s)
-{
-    double d;    
-    int i;
-
-    if (from_string<int>(i, s))  {
-        return operator=(i);        
-    }    
-    else if (from_string<double>(d, s)) {            
-        return operator=(d);
-    }    
-    else {
-        std::string upper(boost::to_upper_copy(s));
-        if (upper == "TRUE") {
-            return operator=(true);
-        }    
-        else if (upper == "FALSE") {
-            return operator=(false);
-        }    
-        else {               
-            return operator=(s);            
-        }        
-    }    
+    operator=(s);
+    try {
+        return operator=(asInt64());
+    } catch (const InvalidConversion&) {}
+    try {
+        return operator=(asDouble());
+    } catch (const InvalidConversion&) {}
+    try {
+        return operator=(asBool());
+    } catch (const InvalidConversion&) {}
+    return *this;
 }
 
 



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org