mirror of
https://github.com/Relintai/sfw.git
synced 2024-12-20 21:06:49 +01:00
62 lines
1.9 KiB
C++
62 lines
1.9 KiB
C++
|
/*************************************************************************/
|
||
|
/* ref_ptr.cpp */
|
||
|
/* From https://github.com/Relintai/pandemonium_engine (MIT) */
|
||
|
/*************************************************************************/
|
||
|
|
||
|
//--STRIP
|
||
|
#include "ref_ptr.h"
|
||
|
|
||
|
#include "object/reference.h"
|
||
|
#include "object/resource.h"
|
||
|
//--STRIP
|
||
|
|
||
|
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();
|
||
|
}
|
||
|
|
||
|
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>();
|
||
|
}
|