diff --git a/Libraries/LibGUI/GVariant.cpp b/Libraries/LibGUI/GVariant.cpp index a2da6d3402..632ea93145 100644 --- a/Libraries/LibGUI/GVariant.cpp +++ b/Libraries/LibGUI/GVariant.cpp @@ -7,6 +7,7 @@ const char* to_string(GVariant::Type type) case GVariant::Type::Invalid: return "Invalid"; case GVariant::Type::Bool: return "Bool"; case GVariant::Type::Int: return "Int"; + case GVariant::Type::UnsignedInt: return "UnsignedInt"; case GVariant::Type::Float: return "Float"; case GVariant::Type::String: return "String"; case GVariant::Type::Bitmap: return "Bitmap"; @@ -54,6 +55,12 @@ GVariant::GVariant(int value) m_value.as_int = value; } +GVariant::GVariant(unsigned value) + : m_type(Type::UnsignedInt) +{ + m_value.as_uint = value; +} + GVariant::GVariant(float value) : m_type(Type::Float) { @@ -92,9 +99,8 @@ GVariant::GVariant(const JsonValue& value) } if (value.is_uint()) { - ASSERT(value.as_uint() < INT32_MAX); - m_type = Type::Int; - m_value.as_int = value.as_uint(); + m_type = Type::UnsignedInt; + m_value.as_uint = value.as_uint(); return; } @@ -188,6 +194,9 @@ void GVariant::copy_from(const GVariant& other) case Type::Int: m_value.as_int = other.m_value.as_int; break; + case Type::UnsignedInt: + m_value.as_uint = other.m_value.as_uint; + break; case Type::Float: m_value.as_float = other.m_value.as_float; break; @@ -229,6 +238,8 @@ bool GVariant::operator==(const GVariant& other) const return as_bool() == other.as_bool(); case Type::Int: return as_int() == other.as_int(); + case Type::UnsignedInt: + return as_uint() == other.as_uint(); case Type::Float: return as_float() == other.as_float(); case Type::String: @@ -260,6 +271,8 @@ bool GVariant::operator<(const GVariant& other) const return as_bool() < other.as_bool(); case Type::Int: return as_int() < other.as_int(); + case Type::UnsignedInt: + return as_uint() < other.as_uint(); case Type::Float: return as_float() < other.as_float(); case Type::String: @@ -290,6 +303,8 @@ String GVariant::to_string() const return as_bool() ? "true" : "false"; case Type::Int: return String::number(as_int()); + case Type::UnsignedInt: + return String::number(as_uint()); case Type::Float: return String::format("%f", (double)as_float()); case Type::String: diff --git a/Libraries/LibGUI/GVariant.h b/Libraries/LibGUI/GVariant.h index 7725412f20..007f9d49de 100644 --- a/Libraries/LibGUI/GVariant.h +++ b/Libraries/LibGUI/GVariant.h @@ -14,6 +14,7 @@ public: GVariant(bool); GVariant(float); GVariant(int); + GVariant(unsigned); GVariant(const char*); GVariant(const String&); GVariant(const GraphicsBitmap&); @@ -37,6 +38,7 @@ public: Invalid, Bool, Int, + UnsignedInt, Float, String, Bitmap, @@ -50,6 +52,7 @@ public: bool is_valid() const { return m_type != Type::Invalid; } bool is_bool() const { return m_type == Type::Bool; } bool is_int() const { return m_type == Type::Int; } + bool is_uint() const { return m_type == Type::UnsignedInt; } bool is_float() const { return m_type == Type::Float; } bool is_string() const { return m_type == Type::String; } bool is_bitmap() const { return m_type == Type::Bitmap; } @@ -74,6 +77,8 @@ public: return !!m_value.as_string; if (type() == Type::Int) return m_value.as_int != 0; + if (type() == Type::UnsignedInt) + return m_value.as_uint != 0; if (type() == Type::Rect) return !as_rect().is_null(); if (type() == Type::Size) @@ -89,6 +94,12 @@ public: return m_value.as_int; } + unsigned as_uint() const + { + ASSERT(type() == Type::UnsignedInt); + return m_value.as_uint; + } + int to_int() const { if (is_int()) @@ -97,6 +108,10 @@ public: return as_bool() ? 1 : 0; if (is_float()) return (int)as_float(); + if (is_uint()) { + ASSERT(as_uint() <= INT32_MAX); + return (int)as_uint(); + } if (is_string()) { bool ok; int value = as_string().to_int(ok); @@ -195,6 +210,7 @@ private: GIconImpl* as_icon; bool as_bool; int as_int; + unsigned as_uint; float as_float; RGBA32 as_color; RawPoint as_point;