summaryrefslogtreecommitdiff
path: root/AK/JsonValue.h
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-07-18 08:18:39 +0200
committerAndreas Kling <awesomekling@gmail.com>2019-07-18 08:18:39 +0200
commitf60d7e5d1f5da3ec876a537b3c9079ce258e4cf3 (patch)
tree9c94580736fcd0c7185dbea4ba725535732dacbb /AK/JsonValue.h
parentb12d1fbb813c4f87d228e63c03960a344df31bf3 (diff)
downloadserenity-f60d7e5d1f5da3ec876a537b3c9079ce258e4cf3.zip
JsonValue: Add to_uint(), to_int() and as_double().
The to_foo() functions are for converting when you might not be sure of the underlying value type. The as_foo() family assumes that you know exactly what the underlying value type is.
Diffstat (limited to 'AK/JsonValue.h')
-rw-r--r--AK/JsonValue.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/AK/JsonValue.h b/AK/JsonValue.h
index 0c2a4555af..c0118b6f36 100644
--- a/AK/JsonValue.h
+++ b/AK/JsonValue.h
@@ -67,6 +67,32 @@ public:
return IPv4Address::from_string(as_string());
}
+ int to_int(int default_value = 0) const
+ {
+ if (!is_number())
+ return default_value;
+#ifndef KERNEL
+ if (is_double())
+ return (int)as_double();
+#endif
+ if (is_uint())
+ return (int)as_uint();
+ return as_int();
+ }
+
+ unsigned to_uint(unsigned default_value = 0) const
+ {
+ if (!is_number())
+ return default_value;
+#ifndef KERNEL
+ if (is_double())
+ return (unsigned)as_double();
+#endif
+ if (is_int())
+ return (unsigned)as_int();
+ return as_uint();
+ }
+
bool to_bool(bool default_value = false) const
{
if (!is_bool())
@@ -110,6 +136,14 @@ public:
return *m_value.as_array;
}
+#ifndef KERNEL
+ double as_double() const
+ {
+ ASSERT(is_double());
+ return m_value.as_double;
+ }
+#endif
+
Type type() const { return m_type; }
bool is_null() const { return m_type == Type::Null; }