mirror of
https://github.com/Relintai/pandemonium_engine_minimal.git
synced 2024-11-17 22:17:19 +01:00
71 lines
1.9 KiB
C++
71 lines
1.9 KiB
C++
|
|
/* ref_ptr.cpp */
|
|
|
|
|
|
#include "ref_ptr.h"
|
|
|
|
#include "core/object/reference.h"
|
|
#include "core/object/resource.h"
|
|
|
|
void RefPtr::operator=(const RefPtr &p_other) {
|
|
Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]);
|
|
Ref<Reference> *ref_other = reinterpret_cast<Ref<Reference> *>(const_cast<char *>(&p_other.data[0]));
|
|
|
|
*ref = *ref_other;
|
|
}
|
|
|
|
bool RefPtr::operator==(const RefPtr &p_other) const {
|
|
Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]);
|
|
Ref<Reference> *ref_other = reinterpret_cast<Ref<Reference> *>(const_cast<char *>(&p_other.data[0]));
|
|
|
|
return *ref == *ref_other;
|
|
}
|
|
|
|
bool RefPtr::operator!=(const RefPtr &p_other) const {
|
|
Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]);
|
|
Ref<Reference> *ref_other = reinterpret_cast<Ref<Reference> *>(const_cast<char *>(&p_other.data[0]));
|
|
|
|
return *ref != *ref_other;
|
|
}
|
|
|
|
RefPtr::RefPtr(const RefPtr &p_other) {
|
|
memnew_placement(&data[0], Ref<Reference>);
|
|
|
|
Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]);
|
|
Ref<Reference> *ref_other = reinterpret_cast<Ref<Reference> *>(const_cast<char *>(&p_other.data[0]));
|
|
|
|
*ref = *ref_other;
|
|
}
|
|
|
|
bool RefPtr::is_null() const {
|
|
Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]);
|
|
return ref->is_null();
|
|
}
|
|
|
|
RID RefPtr::get_rid() const {
|
|
Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]);
|
|
if (ref->is_null()) {
|
|
return RID();
|
|
}
|
|
Resource *res = Object::cast_to<Resource>(ref->ptr());
|
|
if (res) {
|
|
return res->get_rid();
|
|
}
|
|
return RID();
|
|
}
|
|
|
|
void RefPtr::unref() {
|
|
Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]);
|
|
ref->unref();
|
|
}
|
|
|
|
RefPtr::RefPtr() {
|
|
ERR_FAIL_COND(sizeof(Ref<Reference>) > DATASIZE);
|
|
memnew_placement(&data[0], Ref<Reference>);
|
|
}
|
|
|
|
RefPtr::~RefPtr() {
|
|
Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]);
|
|
ref->~Ref<Reference>();
|
|
}
|