mirror of
https://github.com/slint-ui/slint.git
synced 2025-09-30 22:01:13 +00:00
C++: use default operator==
Since we now use C++20, we can simplify our code a bit
This commit is contained in:
parent
36e07b8801
commit
319704d3fb
8 changed files with 13 additions and 75 deletions
|
@ -352,7 +352,12 @@ fn gen_corelib(
|
|||
config.export.body.insert(
|
||||
"LayoutInfo".to_owned(),
|
||||
" inline LayoutInfo merge(const LayoutInfo &other) const;
|
||||
friend inline LayoutInfo operator+(const LayoutInfo &a, const LayoutInfo &b) { return a.merge(b); }".into(),
|
||||
friend inline LayoutInfo operator+(const LayoutInfo &a, const LayoutInfo &b) { return a.merge(b); }
|
||||
friend bool operator==(const LayoutInfo&, const LayoutInfo&) = default;".into(),
|
||||
);
|
||||
config.export.body.insert(
|
||||
"StandardListViewItem".to_owned(),
|
||||
"friend bool operator==(const StandardListViewItem&, const StandardListViewItem&) = default;".into(),
|
||||
);
|
||||
config
|
||||
.export
|
||||
|
|
|
@ -54,6 +54,7 @@ using ItemTreeNode = cbindgen_private::ItemTreeNode<uint8_t>;
|
|||
using cbindgen_private::KeyboardModifiers;
|
||||
using cbindgen_private::KeyEvent;
|
||||
using cbindgen_private::PointerEvent;
|
||||
using cbindgen_private::StandardListViewItem;
|
||||
|
||||
/// Internal function that checks that the API that must be called from the main
|
||||
/// thread is indeed called from the main thread, or abort the program otherwise
|
||||
|
@ -393,18 +394,6 @@ inline LayoutInfo LayoutInfo::merge(const LayoutInfo &other) const
|
|||
std::max(preferred, other.preferred),
|
||||
std::min(stretch, other.stretch) };
|
||||
}
|
||||
|
||||
/// FIXME! this should be done by cbindgen
|
||||
inline bool operator==(const LayoutInfo &a, const LayoutInfo &b)
|
||||
{
|
||||
return a.min == b.min && a.max == b.max && a.min_percent == b.min_percent
|
||||
&& a.max_percent == b.max_percent && a.preferred == b.preferred
|
||||
&& a.stretch == b.stretch;
|
||||
}
|
||||
inline bool operator!=(const LayoutInfo &a, const LayoutInfo &b)
|
||||
{
|
||||
return !(a == b);
|
||||
}
|
||||
}
|
||||
|
||||
namespace private_api {
|
||||
|
@ -821,20 +810,6 @@ cbindgen_private::NativeStyleMetrics::~NativeStyleMetrics()
|
|||
}
|
||||
#endif // !defined(DOXYGEN)
|
||||
|
||||
using cbindgen_private::StandardListViewItem;
|
||||
namespace cbindgen_private {
|
||||
inline bool operator==(const StandardListViewItem &a, const StandardListViewItem &b)
|
||||
{
|
||||
static_assert(sizeof(StandardListViewItem) == sizeof(std::tuple<SharedString>),
|
||||
"must update to cover all fields");
|
||||
return a.text == b.text;
|
||||
}
|
||||
inline bool operator!=(const StandardListViewItem &a, const StandardListViewItem &b)
|
||||
{
|
||||
return !(a == b);
|
||||
}
|
||||
}
|
||||
|
||||
namespace private_api {
|
||||
// Code generated by SixtyFPS <= 0.1.5 uses this enum with VersionCheckHelper
|
||||
enum class [[deprecated]] VersionCheck { Major = SIXTYFPS_VERSION_MAJOR,
|
||||
|
|
|
@ -149,15 +149,7 @@ public:
|
|||
|
||||
/// Returns true if \a lhs has the same values for the individual color channels as \a rhs;
|
||||
/// false otherwise.
|
||||
friend bool operator==(const Color &lhs, const Color &rhs)
|
||||
{
|
||||
return lhs.inner.red == rhs.inner.red && lhs.inner.green == rhs.inner.green
|
||||
&& lhs.inner.blue == rhs.inner.blue && lhs.inner.alpha == rhs.inner.alpha;
|
||||
}
|
||||
|
||||
/// Returns true if \a lhs has any different values for the individual color channels as \a rhs;
|
||||
/// false otherwise.
|
||||
friend bool operator!=(const Color &lhs, const Color &rhs) { return !(lhs == rhs); }
|
||||
friend bool operator==(const Color &lhs, const Color &rhs) = default;
|
||||
|
||||
/// Writes the \a color to the specified \a stream and returns a reference to the
|
||||
/// stream.
|
||||
|
|
|
@ -400,12 +400,6 @@ public:
|
|||
{
|
||||
return cbindgen_private::sixtyfps_interpreter_value_eq(&a.inner, &b.inner);
|
||||
}
|
||||
/// Returns true if \a and \b hold values of the same type and the underlying vales are not
|
||||
/// equal.
|
||||
friend bool operator!=(const Value &a, const Value &b)
|
||||
{
|
||||
return !cbindgen_private::sixtyfps_interpreter_value_eq(&a.inner, &b.inner);
|
||||
}
|
||||
|
||||
private:
|
||||
inline Value(const void *) = delete; // Avoid that for example Value("foo") turns to Value(bool)
|
||||
|
|
|
@ -42,23 +42,7 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
friend bool operator==(const PathData &a, const PathData &b)
|
||||
{
|
||||
if (a.data.tag != b.data.tag)
|
||||
return false;
|
||||
switch (a.data.tag) {
|
||||
case cbindgen_private::types::PathData::Tag::Elements:
|
||||
return a.data.elements._0 == b.data.elements._0;
|
||||
case cbindgen_private::types::PathData::Tag::Events:
|
||||
return a.data.events._0 == b.data.events._0 && b.data.events._0 == b.data.events._0;
|
||||
case cbindgen_private::types::PathData::Tag::Commands:
|
||||
return a.data.commands._0 == b.data.commands._0;
|
||||
case cbindgen_private::types::PathData::Tag::None:
|
||||
return true;
|
||||
}
|
||||
return false; // unreachable
|
||||
}
|
||||
friend bool operator!=(const PathData &a, const PathData &b) { return !(a == b); }
|
||||
friend bool operator==(const PathData &a, const PathData &b) = default;
|
||||
|
||||
private:
|
||||
static SharedVector<PathElement> elements_from_array(const PathElement *firstElement,
|
||||
|
|
|
@ -415,7 +415,7 @@ PropertyAnimation := _ {
|
|||
}
|
||||
|
||||
export struct StandardListViewItem := {
|
||||
//-name:sixtyfps::StandardListViewItem
|
||||
//-name:sixtyfps::private_api::StandardListViewItem
|
||||
text: string
|
||||
}
|
||||
|
||||
|
|
|
@ -565,11 +565,9 @@ pub fn generate(doc: &Document) -> impl std::fmt::Display {
|
|||
}
|
||||
|
||||
fn generate_struct(file: &mut File, name: &str, fields: &BTreeMap<String, Type>) {
|
||||
let mut operator_eq = String::new();
|
||||
let mut members = fields
|
||||
.iter()
|
||||
.map(|(name, t)| {
|
||||
write!(operator_eq, " && a.{0} == b.{0}", ident(name)).unwrap();
|
||||
(
|
||||
Access::Public,
|
||||
Declaration::Var(Var {
|
||||
|
@ -588,22 +586,13 @@ fn generate_struct(file: &mut File, name: &str, fields: &BTreeMap<String, Type>)
|
|||
Access::Public,
|
||||
Declaration::Function(Function {
|
||||
name: "operator==".to_owned(),
|
||||
signature: format!("(const {0} &a, const {0} &b) -> bool", name),
|
||||
signature: format!("(const {0} &a, const {0} &b) -> bool = default", name),
|
||||
is_friend: true,
|
||||
statements: Some(vec![format!("return true{};", operator_eq)]),
|
||||
..Function::default()
|
||||
}),
|
||||
));
|
||||
members.push((
|
||||
Access::Public,
|
||||
Declaration::Function(Function {
|
||||
name: "operator!=".to_owned(),
|
||||
signature: format!("(const {0} &a, const {0} &b) -> bool", name),
|
||||
is_friend: true,
|
||||
statements: Some(vec!["return !(a == b);".into()]),
|
||||
statements: None,
|
||||
..Function::default()
|
||||
}),
|
||||
));
|
||||
|
||||
file.declarations.push(Declaration::Struct(Struct {
|
||||
name: name.into(),
|
||||
members,
|
||||
|
|
|
@ -19,7 +19,6 @@ pub enum Orientation {
|
|||
type Coord = f32;
|
||||
|
||||
/// The constraint that applies to an item
|
||||
// NOTE: when adding new fields, the C++ operator== also need updates
|
||||
// Also, the field needs to be in alphabetical order because how the generated code sort fields for struct
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue