diff --git a/include/core/RID.hpp b/include/core/RID.hpp index 3a968bf..71b5140 100644 --- a/include/core/RID.hpp +++ b/include/core/RID.hpp @@ -11,12 +11,24 @@ class RID { godot_rid _godot_rid; public: - inline RID() {} + RID(); RID(Object *p); int32_t get_rid() const; + inline bool is_valid() const { + // is_valid() is not available in the C API... + return *this == RID(); + } + + bool operator==(const RID & p_other) const; + bool operator!=(const RID & p_other) const; + bool operator<(const RID & p_other) const; + bool operator>(const RID & p_other) const; + bool operator<=(const RID & p_other) const; + bool operator>=(const RID & p_other) const; + }; } diff --git a/src/core/RID.cpp b/src/core/RID.cpp index 05f2931..aaf8e7a 100644 --- a/src/core/RID.cpp +++ b/src/core/RID.cpp @@ -6,6 +6,10 @@ namespace godot { +RID::RID() +{ + godot::api->godot_rid_new(&_godot_rid); +} RID::RID(Object *p) { @@ -17,5 +21,35 @@ int32_t RID::get_rid() const return godot::api->godot_rid_get_id(&_godot_rid); } +bool RID::operator==(const RID & p_other) const +{ + return godot::api->godot_rid_operator_equal(&_godot_rid, &p_other._godot_rid); +} + +bool RID::operator!=(const RID & p_other) const +{ + return !(*this == p_other); +} + +bool RID::operator<(const RID & p_other) const +{ + return godot::api->godot_rid_operator_less(&_godot_rid, &p_other._godot_rid); +} + +bool RID::operator>(const RID & p_other) const +{ + return !(*this < p_other) && *this != p_other; +} + +bool RID::operator<=(const RID & p_other) const +{ + return (*this < p_other) || *this == p_other; +} + +bool RID::operator>=(const RID & p_other) const +{ + return !(*this < p_other); +} + }