#include "AtxInterfaces.h"
#include "AtxDefs.h"
#include "AtxTypes.h"
#include "AtxDebug.h"
Go to the source code of this file.
Defines | |
| #define | ATX_Referenceable_AddReference(object) ATX_INTERFACE(object)->AddReference(object) |
| Convenience macro used to call the AddReference() method on objects that implement the ATX_Referenceable interface. | |
| #define | ATX_Referenceable_Release(object) ATX_INTERFACE(object)->Release(object) |
| Convenience macro used to call the Release() method on objects that implement the ATX_Referenceable interface. | |
| #define | ATX_RELEASE_OBJECT(object) |
| Macro used to safely release a reference on an object. | |
| #define | ATX_REFERENCE_OBJECT(object) |
| Macro used to safely add a reference to an object. | |
| #define | ATX_IMPLEMENT_REFERENCEABLE_INTERFACE(_class, _counter) |
| #define | ATX_IMPLEMENT_REFERENCEABLE_INTERFACE_EX(_class, _base, _counter) |
Variables | |
| ATX_Result(* | AddReference )(ATX_Referenceable *self) |
| Interface implemented by object that maintain a reference counter that counts how many clients are referencing the object. | |
| ATX_Result(* | Release )(ATX_Referenceable *self) |
| Decrements the reference counter. | |
| #define ATX_IMPLEMENT_REFERENCEABLE_INTERFACE | ( | _class, | |||
| _counter | ) |
Value:
ATX_METHOD _class##_AddReference(ATX_Referenceable* _self) \ { \ _class* self = ATX_SELF(_class, ATX_Referenceable); \ self->_counter++; \ return ATX_SUCCESS; \ } \ ATX_METHOD _class##_Release(ATX_Referenceable* _self) \ { \ _class* self = ATX_SELF(_class, ATX_Referenceable); \ if (--self->_counter == 0) { \ _class##_Destroy(self); \ } \ return ATX_SUCCESS; \ } \ ATX_BEGIN_INTERFACE_MAP(_class, ATX_Referenceable) \ _class##_AddReference, \ _class##_Release \ };
| #define ATX_IMPLEMENT_REFERENCEABLE_INTERFACE_EX | ( | _class, | |||
| _base, | |||||
| _counter | ) |
Value:
ATX_METHOD _class##_AddReference(ATX_Referenceable* _self) \ { \ _class* self = ATX_SELF_EX(_class, _base, ATX_Referenceable); \ ATX_BASE(self, _base)._counter++; \ return ATX_SUCCESS; \ } \ ATX_METHOD _class##_Release(ATX_Referenceable* _self) \ { \ _class* self = ATX_SELF_EX(_class, _base, ATX_Referenceable); \ if (--ATX_BASE(self, _base)._counter == 0) { \ _class##_Destroy(self); \ } \ return ATX_SUCCESS; \ } \ ATX_BEGIN_INTERFACE_MAP_EX(_class, _base, ATX_Referenceable) \ _class##_AddReference, \ _class##_Release \ };
| #define ATX_REFERENCE_OBJECT | ( | object | ) |
Value:
do { \ if (object) { \ ATX_Referenceable* referenceable = \ ATX_CAST(object, ATX_Referenceable); \ ATX_ASSERT(referenceable != NULL); \ ATX_Referenceable_AddReference(referenceable); \ } \ } while(0)
This macro will try to get an ATX_Referenceable interface for the object. If the object does not implement that interface, an exception is thrown. If the object implements that interface, the macro will call the AddReference() method.
| #define ATX_RELEASE_OBJECT | ( | object | ) |
Value:
do { \ if (object) { \ ATX_Referenceable* referenceable = \ ATX_CAST(object, ATX_Referenceable); \ ATX_ASSERT(referenceable != NULL); \ ATX_Referenceable_Release(referenceable); \ object = NULL; \ } \ } while(0)
This macro will try to get an ATX_Referenceable interface for the object. If the object does not implement that interface, an exception is thrown. If the object implements that interface, the macro will call the Release() method. As a side effect, this macro will also clear its object reference to turn it into a NULL object reference, so that further use of that object reference may be prevented
| ATX_Result(* AddReference)(ATX_Referenceable *self) |
Interface implemented by object that maintain a reference counter that counts how many clients are referencing the object.
The counter can be incremented by calling AddReference(), and decremented by calling Release(). When the reference counter reaches 0, the object is destroyed and cannot be used anymore. Increments the reference counter.
| self | Pointer to the object on which this method is called |
| ATX_Result(* Release)(ATX_Referenceable *self) |
Decrements the reference counter.
| self | Pointer to the object on which this method is called |