X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/e39c12fcbf218f0964782a48d6e66145e1ce5039..633c730e5feed206333c5174d53c6384c08047b2:/lib/base/smartptr.h diff --git a/lib/base/smartptr.h b/lib/base/smartptr.h index 7e441ab2..6c3dbc2f 100644 --- a/lib/base/smartptr.h +++ b/lib/base/smartptr.h @@ -3,14 +3,9 @@ #include "object.h" #include +#include -#ifdef SWIG -#define TEMPLATE_TYPEDEF(x, y) \ -%template(y) x; \ -typedef x y -#else -#define TEMPLATE_TYPEDEF(x, y) typedef x y -#endif +inline void ptrAssert(void *p) { if (!p) *(unsigned long*)0=0; } template class ePtr @@ -61,8 +56,10 @@ public: T* grabRef() { if (!ptr) return 0; ptr->AddRef(); return ptr; } T* &ptrref() { assert(!ptr); return ptr; } - T* operator->() const { assert(ptr); return ptr; } + T* operator->() const { ptrAssert(ptr); return ptr; } operator T*() const { return this->ptr; } + + operator bool() const { return !!this->ptr; } }; @@ -136,7 +133,7 @@ public: T* grabRef() { if (!ptr) return 0; ptr->AddRef(); ptr->AddUse(); return ptr; } T* &ptrref() { assert(!ptr); return ptr; } - T* operator->() const { assert(ptr); return ptr; } + T* operator->() const { ptrAssert(ptr); return ptr; } operator T*() const { return this->ptr; } }; @@ -184,13 +181,13 @@ public: } - ePtrHelper operator->() { assert(ptr); return ePtrHelper(ptr); } + ePtrHelper operator->() { ptrAssert(ptr); return ePtrHelper(ptr); } /* for const objects, we don't need the helper, as they can't */ /* be changed outside the program flow. at least this is */ /* what the compiler assumes, so in case you're using const */ /* eMutablePtrs note that they have to be const. */ - const T* operator->() const { assert(ptr); return ptr; } + const T* operator->() const { ptrAssert(ptr); return ptr; } }; #endif