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