Value comparison in C++

This commit is contained in:
Olivier Goffart 2021-03-18 15:26:53 +01:00
parent 8a14c4fa25
commit 09b7b92dbe
3 changed files with 35 additions and 0 deletions

View file

@ -232,6 +232,13 @@ public:
Type type() const { return cbindgen_private::sixtyfps_interpreter_value_type(&inner); } Type type() const { return cbindgen_private::sixtyfps_interpreter_value_type(&inner); }
friend bool operator==(const Value &a, const Value &b) {
return cbindgen_private::sixtyfps_interpreter_value_eq(&a.inner, &b.inner);
}
friend bool operator!=(const Value &a, const Value &b) {
return !cbindgen_private::sixtyfps_interpreter_value_eq(&a.inner, &b.inner);
}
private: private:
using ValueOpaque = sixtyfps::cbindgen_private::ValueOpaque; using ValueOpaque = sixtyfps::cbindgen_private::ValueOpaque;
ValueOpaque inner; ValueOpaque inner;

View file

@ -155,6 +155,29 @@ SCENARIO("Value API")
} }
REQUIRE(destroyed); REQUIRE(destroyed);
} }
SECTION("Compare Values")
{
Value str1{sixtyfps::SharedString("Hello1")};
Value str2{sixtyfps::SharedString("Hello2")};
Value fl1{10.};
Value fl2{12.};
REQUIRE(str1 == str1);
REQUIRE(str1 != str2);
REQUIRE(str1 != fl2);
REQUIRE(fl1 == fl1);
REQUIRE(fl1 != fl2);
REQUIRE(Value() == Value());
REQUIRE(Value() != str1);
REQUIRE(str1 == sixtyfps::SharedString("Hello1"));
REQUIRE(str1 != sixtyfps::SharedString("Hello2"));
REQUIRE(sixtyfps::SharedString("Hello2") == str2);
REQUIRE(fl1 != sixtyfps::SharedString("Hello2"));
REQUIRE(fl2 == 12.);
}
} }
SCENARIO("Struct API") SCENARIO("Struct API")

View file

@ -783,6 +783,11 @@ pub(crate) mod ffi {
drop(std::ptr::read(val as *mut Value)) drop(std::ptr::read(val as *mut Value))
} }
#[no_mangle]
pub extern "C" fn sixtyfps_interpreter_value_eq(a: &ValueOpaque, b: &ValueOpaque) -> bool {
a.as_value() == b.as_value()
}
/// Construct a new Value in the given memory location as string /// Construct a new Value in the given memory location as string
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn sixtyfps_interpreter_value_new_string( pub unsafe extern "C" fn sixtyfps_interpreter_value_new_string(