summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
authorSam Atkins <atkinssj@serenityos.org>2023-05-31 14:55:18 +0100
committerAndreas Kling <kling@serenityos.org>2023-06-02 17:46:35 +0200
commitfbfce2e73e4d5b8c08980bff92c16f6f756f3f20 (patch)
tree8aad185d0415592cbb677b9c820eda15b2c577f9 /Userland
parent06617a982e13f78f850db7ce93fc76139717e6ac (diff)
downloadserenity-fbfce2e73e4d5b8c08980bff92c16f6f756f3f20.zip
LibWeb: Add comparison operators to CSS numeric types (except Length)
This is to make it easier to bounds-check their values during parsing. Length is left out because many length units are relative to the context in which they are used, and so we cannot easily compare `10px` and `1em`, for example.
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Libraries/LibWeb/CSS/Angle.h12
-rw-r--r--Userland/Libraries/LibWeb/CSS/Frequency.h12
-rw-r--r--Userland/Libraries/LibWeb/CSS/Number.h11
-rw-r--r--Userland/Libraries/LibWeb/CSS/Percentage.h11
-rw-r--r--Userland/Libraries/LibWeb/CSS/Resolution.h14
-rw-r--r--Userland/Libraries/LibWeb/CSS/Time.h12
6 files changed, 69 insertions, 3 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/Angle.h b/Userland/Libraries/LibWeb/CSS/Angle.h
index f65cc602ef..e6d1c94459 100644
--- a/Userland/Libraries/LibWeb/CSS/Angle.h
+++ b/Userland/Libraries/LibWeb/CSS/Angle.h
@@ -38,6 +38,18 @@ public:
return m_type == other.m_type && m_value == other.m_value;
}
+ int operator<=>(Angle const& other) const
+ {
+ auto this_degrees = to_degrees();
+ auto other_degrees = other.to_degrees();
+
+ if (this_degrees < other_degrees)
+ return -1;
+ if (this_degrees > other_degrees)
+ return 1;
+ return 0;
+ }
+
private:
StringView unit_name() const;
diff --git a/Userland/Libraries/LibWeb/CSS/Frequency.h b/Userland/Libraries/LibWeb/CSS/Frequency.h
index 7e8075cda1..855aa1f798 100644
--- a/Userland/Libraries/LibWeb/CSS/Frequency.h
+++ b/Userland/Libraries/LibWeb/CSS/Frequency.h
@@ -35,6 +35,18 @@ public:
return m_type == other.m_type && m_value == other.m_value;
}
+ int operator<=>(Frequency const& other) const
+ {
+ auto this_hertz = to_hertz();
+ auto other_hertz = other.to_hertz();
+
+ if (this_hertz < other_hertz)
+ return -1;
+ if (this_hertz > other_hertz)
+ return 1;
+ return 0;
+ }
+
private:
StringView unit_name() const;
diff --git a/Userland/Libraries/LibWeb/CSS/Number.h b/Userland/Libraries/LibWeb/CSS/Number.h
index 1a9a9f3ea3..832a7d95fc 100644
--- a/Userland/Libraries/LibWeb/CSS/Number.h
+++ b/Userland/Libraries/LibWeb/CSS/Number.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
+ * Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -82,6 +82,15 @@ public:
return m_type == other.m_type && m_value == other.m_value;
}
+ int operator<=>(Number const& other) const
+ {
+ if (m_value < other.m_value)
+ return -1;
+ if (m_value > other.m_value)
+ return 1;
+ return 0;
+ }
+
private:
double m_value { 0 };
Type m_type;
diff --git a/Userland/Libraries/LibWeb/CSS/Percentage.h b/Userland/Libraries/LibWeb/CSS/Percentage.h
index 59566524af..4cd50abf85 100644
--- a/Userland/Libraries/LibWeb/CSS/Percentage.h
+++ b/Userland/Libraries/LibWeb/CSS/Percentage.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
+ * Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -38,6 +38,15 @@ public:
bool operator==(Percentage const& other) const { return m_value == other.m_value; }
+ int operator<=>(Percentage const& other) const
+ {
+ if (m_value < other.m_value)
+ return -1;
+ if (m_value > other.m_value)
+ return 1;
+ return 0;
+ }
+
private:
double m_value;
};
diff --git a/Userland/Libraries/LibWeb/CSS/Resolution.h b/Userland/Libraries/LibWeb/CSS/Resolution.h
index 390f6b2aa8..6a693775d3 100644
--- a/Userland/Libraries/LibWeb/CSS/Resolution.h
+++ b/Userland/Libraries/LibWeb/CSS/Resolution.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
+ * Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -32,6 +32,18 @@ public:
return m_type == other.m_type && m_value == other.m_value;
}
+ int operator<=>(Resolution const& other) const
+ {
+ auto this_dots_per_pixel = to_dots_per_pixel();
+ auto other_dots_per_pixel = other.to_dots_per_pixel();
+
+ if (this_dots_per_pixel < other_dots_per_pixel)
+ return -1;
+ if (this_dots_per_pixel > other_dots_per_pixel)
+ return 1;
+ return 0;
+ }
+
private:
StringView unit_name() const;
diff --git a/Userland/Libraries/LibWeb/CSS/Time.h b/Userland/Libraries/LibWeb/CSS/Time.h
index 7c1a00c2c0..dca75618b5 100644
--- a/Userland/Libraries/LibWeb/CSS/Time.h
+++ b/Userland/Libraries/LibWeb/CSS/Time.h
@@ -37,6 +37,18 @@ public:
return m_type == other.m_type && m_value == other.m_value;
}
+ int operator<=>(Time const& other) const
+ {
+ auto this_seconds = to_seconds();
+ auto other_seconds = other.to_seconds();
+
+ if (this_seconds < other_seconds)
+ return -1;
+ if (this_seconds > other_seconds)
+ return 1;
+ return 0;
+ }
+
private:
StringView unit_name() const;