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-subscr...@qpid.apache.org