]> granicus.if.org Git - icinga2/commitdiff
Performance improvements for Value -> double conversions.
authorGunnar Beutner <gunnar@beutner.name>
Wed, 27 Mar 2013 06:26:42 +0000 (06:26 +0000)
committerGunnar Beutner <gunnar@beutner.name>
Wed, 27 Mar 2013 06:26:42 +0000 (06:26 +0000)
lib/base/value.cpp
lib/base/value.h

index f4e07b0ccd6342a25f4829c0bb2ebd4d39092ed6..556f9848291174ce6e1d08de1e3f0966a742a807 100644 (file)
@@ -59,7 +59,7 @@ Value::Value(const char *value)
  */
 bool Value::IsEmpty(void) const
 {
-       return (m_Value.type() == typeid(boost::blank));
+       return (GetType() == ValueEmpty);
 }
 
 /**
@@ -79,16 +79,17 @@ bool Value::IsScalar(void) const
  */
 bool Value::IsObject(void) const
 {
-       return !IsEmpty() && (m_Value.type() == typeid(Object::Ptr));
+       return !IsEmpty() && (GetType() == ValueObject);
 }
 
 Value::operator double(void) const
 {
-       if (m_Value.type() != typeid(double)) {
-               return boost::lexical_cast<double>(m_Value);
-       } else {
-               return boost::get<double>(m_Value);
-       }
+       const double *value = boost::get<double>(&m_Value);
+
+       if (value)
+               return *value;
+
+       return boost::lexical_cast<double>(m_Value);
 }
 
 Value::operator String(void) const
index 0554a5178130b78f9a7bc009b91f08f53f7dad62..e786f27192a2f1c769583d24d3b62e60709c5603 100644 (file)
@@ -85,7 +85,7 @@ public:
                return object;
        }
 
-bool IsEmpty(void) const;
+       bool IsEmpty(void) const;
        bool IsScalar(void) const;
        bool IsObject(void) const;
 
@@ -107,7 +107,7 @@ bool IsEmpty(void) const;
        ValueType GetType(void) const;
 
 private:
-       mutable boost::variant<boost::blank, double, String, Object::Ptr> m_Value;
+       boost::variant<boost::blank, double, String, Object::Ptr> m_Value;
 };
 
 static Value Empty;