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); }
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:
using ValueOpaque = sixtyfps::cbindgen_private::ValueOpaque;
ValueOpaque inner;

View file

@ -155,6 +155,29 @@ SCENARIO("Value API")
}
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")

View file

@ -783,6 +783,11 @@ pub(crate) mod ffi {
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
#[no_mangle]
pub unsafe extern "C" fn sixtyfps_interpreter_value_new_string(