Browse Source

Added RID::is_valid() and comparison operators

- is_valid() is worked around by comparing a default RID()
Marc Gilleron 7 years ago
parent
commit
06c61b6535
2 changed files with 47 additions and 1 deletions
  1. 13 1
      include/core/RID.hpp
  2. 34 0
      src/core/RID.cpp

+ 13 - 1
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;
+
 };
 
 }

+ 34 - 0
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);
+}
+
 
 }