summaryrefslogtreecommitdiff
path: root/core/reference.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/reference.h')
-rw-r--r--core/reference.h58
1 files changed, 12 insertions, 46 deletions
diff --git a/core/reference.h b/core/reference.h
index 30a93d82a6..f5794b0b67 100644
--- a/core/reference.h
+++ b/core/reference.h
@@ -36,7 +36,6 @@
#include "core/safe_refcount.h"
class Reference : public Object {
-
GDCLASS(Reference, Object);
SafeRefCount refcount;
SafeRefCount refcount_init;
@@ -52,32 +51,32 @@ public:
int reference_get_count() const;
Reference();
- ~Reference();
+ ~Reference() {}
};
template <class T>
class Ref {
-
- T *reference;
+ T *reference = nullptr;
void ref(const Ref &p_from) {
-
- if (p_from.reference == reference)
+ if (p_from.reference == reference) {
return;
+ }
unref();
reference = p_from.reference;
- if (reference)
+ if (reference) {
reference->reference();
+ }
}
void ref_pointer(T *p_ref) {
-
ERR_FAIL_COND(!p_ref);
- if (p_ref->init_ref())
+ if (p_ref->init_ref()) {
reference = p_ref;
+ }
}
//virtual Reference * get_reference() const { return reference; }
@@ -90,60 +89,48 @@ public:
}
_FORCE_INLINE_ bool operator<(const Ref<T> &p_r) const {
-
return reference < p_r.reference;
}
_FORCE_INLINE_ bool operator==(const Ref<T> &p_r) const {
-
return reference == p_r.reference;
}
_FORCE_INLINE_ bool operator!=(const Ref<T> &p_r) const {
-
return reference != p_r.reference;
}
_FORCE_INLINE_ T *operator->() {
-
return reference;
}
_FORCE_INLINE_ T *operator*() {
-
return reference;
}
_FORCE_INLINE_ const T *operator->() const {
-
return reference;
}
_FORCE_INLINE_ const T *ptr() const {
-
return reference;
}
_FORCE_INLINE_ T *ptr() {
-
return reference;
}
_FORCE_INLINE_ const T *operator*() const {
-
return reference;
}
operator Variant() const {
-
return Variant(reference);
}
void operator=(const Ref &p_from) {
-
ref(p_from);
}
template <class T_Other>
void operator=(const Ref<T_Other> &p_from) {
-
Reference *refb = const_cast<Reference *>(static_cast<const Reference *>(p_from.ptr()));
if (!refb) {
unref();
@@ -156,7 +143,6 @@ public:
}
void operator=(const Variant &p_variant) {
-
Object *object = p_variant.get_validated_object();
if (object == reference) {
@@ -189,15 +175,11 @@ public:
}
Ref(const Ref &p_from) {
-
- reference = nullptr;
ref(p_from);
}
template <class T_Other>
Ref(const Ref<T_Other> &p_from) {
-
- reference = nullptr;
Reference *refb = const_cast<Reference *>(static_cast<const Reference *>(p_from.ptr()));
if (!refb) {
unref();
@@ -210,26 +192,21 @@ public:
}
Ref(T *p_reference) {
-
- reference = nullptr;
- if (p_reference)
+ if (p_reference) {
ref_pointer(p_reference);
+ }
}
Ref(const Variant &p_variant) {
-
Object *object = p_variant.get_validated_object();
if (!object) {
- reference = nullptr;
return;
}
T *r = Object::cast_to<T>(object);
if (r && r->reference()) {
reference = r;
- } else {
- reference = nullptr;
}
}
@@ -242,7 +219,6 @@ public:
// mutexes will avoid more crashes?
if (reference && reference->unreference()) {
-
memdelete(reference);
}
reference = nullptr;
@@ -252,13 +228,9 @@ public:
ref(memnew(T));
}
- Ref() {
-
- reference = nullptr;
- }
+ Ref() {}
~Ref() {
-
unref();
}
};
@@ -266,7 +238,6 @@ public:
typedef Ref<Reference> REF;
class WeakRef : public Reference {
-
GDCLASS(WeakRef, Reference);
ObjectID ref;
@@ -279,30 +250,25 @@ public:
void set_obj(Object *p_object);
void set_ref(const REF &p_ref);
- WeakRef();
+ WeakRef() {}
};
#ifdef PTRCALL_ENABLED
template <class T>
struct PtrToArg<Ref<T>> {
-
_FORCE_INLINE_ static Ref<T> convert(const void *p_ptr) {
-
return Ref<T>(const_cast<T *>(reinterpret_cast<const T *>(p_ptr)));
}
_FORCE_INLINE_ static void encode(Ref<T> p_val, const void *p_ptr) {
-
*(Ref<Reference> *)p_ptr = p_val;
}
};
template <class T>
struct PtrToArg<const Ref<T> &> {
-
_FORCE_INLINE_ static Ref<T> convert(const void *p_ptr) {
-
return Ref<T>((T *)p_ptr);
}
};