AtxInterfaces.h File Reference

Header File for the ATX Interface Framework. More...

#include "AtxConfig.h"
#include "AtxDefs.h"
#include "AtxTypes.h"

Go to the source code of this file.

Data Structures

struct  ATX_InterfaceId
 Interface ID constant. More...

Defines

#define ATX_ERROR_NO_SUCH_INTERFACE   (ATX_ERROR_BASE_INTERFACES - 0)
#define ATX_ERROR_INVALID_INTERFACE   (ATX_ERROR_BASE_INTERFACES - 1)
#define ATX_ERROR_NO_SUCH_CLASS   (ATX_ERROR_BASE_INTERFACES - 2)
#define ATX_INTERFACE_ID_TYPE_MOD   extern const
#define ATX_OFFSET_OF(_member, _type)   (ATX_POINTER_TO_LONG(&( ((_type *)0)->_member)))
#define ATX_SELF_O(_object, _self_type, _interface_type)   ( (_self_type *)( ((ATX_Byte*)(_object)) - ATX_OFFSET_OF(_interface_type##_Base, _self_type)) )
#define ATX_SELF(_self_type, _interface_type)   ATX_SELF_O(_self, _self_type, _interface_type)
#define ATX_SELF_EX_O(_object, _self_type, _base_type, _interface_type)
#define ATX_SELF_EX(_self_type, _base_type, _interface_type)   ATX_SELF_EX_O(_self, _self_type, _base_type, _interface_type)
#define ATX_SELF_M(_member, _self_type, _interface_type)
#define ATX_BASE(_object, _base)   (_object)->_base##_Base
#define ATX_BASE_EX(_object, _parent_base, _base)   (_object)->_parent_base##_Base._base##_Base
#define ATX_DECLARE_INTERFACE(_iface)
#define ATX_BEGIN_INTERFACE_DEFINITION(_iface)
#define ATX_END_INTERFACE_DEFINITION   };
#define ATX_BEGIN_INTERFACE_IMPLEMENTATION(_iface, _class)
#define ATX_END_INTERFACE_IMPLEMENTATION(_iface, _class)   };
#define ATX_IMPLEMENTS(_iface)   _iface _iface##_Base
#define ATX_EXTENDS(_class)   _class _class##_Base
#define ATX_INTERFACE(_object)   ((_object)->iface)
 Returns the interface pointer of an object reference.
#define ATX_INTERFACE_C(_object, _iface)   ((_object)->_iface##_Base.iface)
 Returns the interface pointer of a class that implements multiple interfaces.
#define ATX_CAST(_object, _iface)
#define ATX_INTERFACE_ID(_iface)   ATX_INTERFACE_ID__##_iface
 Returns a reference to an interface ID constant.
#define ATX_INTERFACE_IDS_EQUAL(_iface_a, _iface_b)   (((_iface_a)->i0 == (_iface_b)->i0) && ((_iface_a)->i1 == (_iface_b)->i1))
 Tests if two interface ID constants (ATX_InterfaceId type) are equal.
#define ATX_DECLARE_GET_INTERFACE_IMPLEMENTATION(_class)
#define ATX_BEGIN_GET_INTERFACE_IMPLEMENTATION(_class)
#define ATX_GET_INTERFACE_ACCEPT(_class, _iface)
#define ATX_GET_INTERFACE_ACCEPT_EX(_class, _base, _iface)
#define ATX_END_GET_INTERFACE_IMPLEMENTATION
#define ATX_IMPLEMENT_GET_INTERFACE_ADAPTER(_class, _iface)
#define ATX_IMPLEMENT_GET_INTERFACE_ADAPTER_EX(_class, _base, _iface)
#define ATX_GET_INTERFACE_ADAPTER(_class, _iface)   _class##_##_iface##_GetInterface
#define ATX_INTERFACE_MAP(_class, _iface)   static const _iface##Interface _class##_##_iface##Interface
#define ATX_DECLARE_INTERFACE_MAP(_class, _iface)   ATX_INTERFACE_MAP(_class, _iface);
#define ATX_BEGIN_INTERFACE_MAP(_class, _iface)
#define ATX_BEGIN_INTERFACE_MAP_EX(_class, _base, _iface)
#define ATX_END_INTERFACE_MAP   };
#define ATX_END_INTERFACE_MAP_EX   };
#define ATX_SET_INTERFACE(_object, _class, _iface)   (_object)->_iface##_Base.iface = & _class##_##_iface##Interface
#define ATX_SET_INTERFACE_EX(_object, _class, _base, _iface)   (_object)->_base##_Base._iface##_Base.iface = & _class##_##_iface##Interface


Detailed Description

Header File for the ATX Interface Framework.


Define Documentation

#define ATX_BEGIN_GET_INTERFACE_IMPLEMENTATION ( _class   ) 

Value:

static ATX_Object* _class##_GetInterface(_class*                self,        \
                                  const ATX_InterfaceId* id)                 \
{                                                                            \
    if (ATX_INTERFACE_IDS_EQUAL(id, &ATX_INTERFACE_ID__ATX_Object)) {        \
        return (ATX_Object*)self;                                            \
    }

#define ATX_BEGIN_INTERFACE_DEFINITION ( _iface   ) 

Value:

struct _iface##Interface { \
    ATX_Object* (*GetInterface)(_iface*                instance,          \
                                const ATX_InterfaceId* id);

#define ATX_BEGIN_INTERFACE_IMPLEMENTATION ( _iface,
_class   ) 

Value:

static const _iface##Interface _class##_##_class##Interface = { \
    _class##_GetInterface,

#define ATX_BEGIN_INTERFACE_MAP ( _class,
_iface   ) 

Value:

ATX_IMPLEMENT_GET_INTERFACE_ADAPTER(_class,_iface)  \
ATX_INTERFACE_MAP(_class,_iface) = {                \
    ATX_GET_INTERFACE_ADAPTER(_class,_iface),

#define ATX_BEGIN_INTERFACE_MAP_EX ( _class,
_base,
_iface   ) 

Value:

ATX_IMPLEMENT_GET_INTERFACE_ADAPTER_EX(_class,_base,_iface) \
ATX_INTERFACE_MAP(_class,_iface) = {                        \
    ATX_GET_INTERFACE_ADAPTER(_class,_iface),

#define ATX_CAST ( _object,
_iface   ) 

Value:

(_iface*)ATX_INTERFACE(_object)->GetInterface(      \
    _object,                                        \
    &ATX_INTERFACE_ID__##_iface)

#define ATX_DECLARE_GET_INTERFACE_IMPLEMENTATION ( _class   ) 

Value:

static ATX_Object* _class##_GetInterface(_class*                self,        \
                                         const ATX_InterfaceId* id);

#define ATX_DECLARE_INTERFACE ( _iface   ) 

Value:

ATX_INTERFACE_ID_TYPE_MOD ATX_InterfaceId ATX_INTERFACE_ID__##_iface;   \
typedef struct _iface##Interface _iface##Interface;                     \
typedef struct {                                                        \
    const _iface##Interface* iface;                                     \
} _iface;

#define ATX_END_GET_INTERFACE_IMPLEMENTATION

Value:

else {                                                                   \
        return NULL;                                                         \
    }                                                                        \
}                                                                            \

#define ATX_GET_INTERFACE_ACCEPT ( _class,
_iface   ) 

Value:

else if (ATX_INTERFACE_IDS_EQUAL(id, &ATX_INTERFACE_ID__##_iface)) {     \
        return (ATX_Object*)(void*)&(self->_iface##_Base);                   \
    }

#define ATX_GET_INTERFACE_ACCEPT_EX ( _class,
_base,
_iface   ) 

Value:

else if (ATX_INTERFACE_IDS_EQUAL(id, &ATX_INTERFACE_ID__##_iface)) {     \
        return (ATX_Object*)(void*)&(self->_base##_Base._iface##_Base);      \
    }

#define ATX_IMPLEMENT_GET_INTERFACE_ADAPTER ( _class,
_iface   ) 

Value:

static ATX_Object*                                                           \
_class##_##_iface##_GetInterface(_iface* _self, const ATX_InterfaceId* id)   \
{                                                                            \
    return _class##_GetInterface(ATX_SELF(_class,_iface), id);               \
}

#define ATX_IMPLEMENT_GET_INTERFACE_ADAPTER_EX ( _class,
_base,
_iface   ) 

Value:

static ATX_Object*                                                           \
_class##_##_iface##_GetInterface(_iface* _self, const ATX_InterfaceId* id)   \
{                                                                            \
    return _class##_GetInterface(ATX_SELF_EX(_class,_base,_iface), id);      \
}

#define ATX_SELF_EX_O ( _object,
_self_type,
_base_type,
_interface_type   ) 

Value:

( (_self_type *)( ((ATX_Byte*)(_object)) -                                \
    ATX_OFFSET_OF(_base_type##_Base._interface_type##_Base, _self_type)) )

#define ATX_SELF_M ( _member,
_self_type,
_interface_type   ) 

Value:

( (_self_type *)( ((ATX_Byte*)(_self)) -                 \
    ATX_OFFSET_OF(_member._interface_type##_Base, _self_type)) )