From a022be9de2364b6f97db1e107849e9ee77f199d3 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Fri, 15 Feb 2013 14:39:26 +0100 Subject: [PATCH] Implemented Value::GetType(). --- lib/base/value.cpp | 47 +++++++++++++++++++++++++++++----------------- lib/base/value.h | 15 +++++++++++++++ 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/lib/base/value.cpp b/lib/base/value.cpp index 53578fe82..60a852948 100644 --- a/lib/base/value.cpp +++ b/lib/base/value.cpp @@ -109,24 +109,27 @@ String Value::Serialize(void) const */ cJSON *Value::ToJson(void) const { - if (m_Value.type() == typeid(long)) { - return cJSON_CreateNumber(boost::get(m_Value)); - } else if (m_Value.type() == typeid(double)) { - return cJSON_CreateNumber(boost::get(m_Value)); - } else if (m_Value.type() == typeid(String)) { - return cJSON_CreateString(boost::get(m_Value).CStr()); - } else if (m_Value.type() == typeid(Object::Ptr)) { - if (IsObjectType()) { - Dictionary::Ptr dictionary = *this; - return dictionary->ToJson(); - } else { - Logger::Write(LogDebug, "base", "Ignoring unknown object while converting variant to JSON."); + switch (GetType()) { + case ValueNumber: + return cJSON_CreateNumber(boost::get(m_Value)); + + case ValueString: + return cJSON_CreateString(boost::get(m_Value).CStr()); + + case ValueObject: + if (IsObjectType()) { + Dictionary::Ptr dictionary = *this; + return dictionary->ToJson(); + } else { + Logger::Write(LogDebug, "base", "Ignoring unknown object while converting variant to JSON."); + return cJSON_CreateNull(); + } + + case ValueEmpty: return cJSON_CreateNull(); - } - } else if (m_Value.type() == typeid(boost::blank)) { - return cJSON_CreateNull(); - } else { - BOOST_THROW_EXCEPTION(runtime_error("Invalid variant type.")); + + default: + BOOST_THROW_EXCEPTION(runtime_error("Invalid variant type.")); } } @@ -148,3 +151,13 @@ Value Value::Deserialize(const String& jsonString) return value; } + +/** + * Returns the type of the value. + * + * @returns The type. + */ +ValueType Value::GetType(void) const +{ + return static_cast(m_Value.which()); +} diff --git a/lib/base/value.h b/lib/base/value.h index b6623d871..45ece754f 100644 --- a/lib/base/value.h +++ b/lib/base/value.h @@ -25,6 +25,19 @@ struct cJSON; namespace icinga { +/** + * The type of a Value. + * + * @ingroup base + */ +enum ValueType +{ + ValueEmpty = 0, + ValueNumber = 1, + ValueString = 2, + ValueObject = 3 +}; + /** * A type that can hold an arbitrary value. * @@ -127,6 +140,8 @@ public: String Serialize(void) const; static Value Deserialize(const String& jsonString); + ValueType GetType(void) const; + private: mutable boost::variant m_Value; };