AtxModule.h

Go to the documentation of this file.
00001 /*****************************************************************
00002 |
00003 |   Atomix - Module Interface
00004 |
00005 |   (c) 2002-2006 Gilles Boccon-Gibod
00006 |   Author: Gilles Boccon-Gibod (bok@bok.net)
00007 |
00008  ****************************************************************/
00013 #ifndef _ATX_MODULE_H_
00014 #define _ATX_MODULE_H_
00015 
00016 /*----------------------------------------------------------------------
00017 |   includes
00018 +---------------------------------------------------------------------*/
00019 #include "AtxDefs.h"
00020 #include "AtxTypes.h"
00021 #include "AtxInterfaces.h"
00022 #include "AtxProperties.h"
00023 
00024 /*----------------------------------------------------------------------
00025 |   ATX_Module interface
00026 +---------------------------------------------------------------------*/
00027 ATX_DECLARE_INTERFACE(ATX_Module)
00035 ATX_BEGIN_INTERFACE_DEFINITION(ATX_Module)
00044     ATX_Result (*CreateInstance)(ATX_Module*            self,
00045                                  ATX_String             parameters,
00046                                  const ATX_InterfaceId* interface_id,
00047                                  ATX_Object*            object);
00048 ATX_END_INTERFACE_DEFINITION
00049 
00050 /*----------------------------------------------------------------------
00051 |   convenience macros
00052 +---------------------------------------------------------------------*/
00057 #define ATX_Module_CreateObject(self, parameters, interface_id, result)   \
00058 ATX_INTERFACE(object)->CreateObject(self,                                 \
00059                                     parameters,                           \
00060                                     interface_id,                         \
00061                                     result)
00062 
00063 /*----------------------------------------------------------------------
00064 |   macros and templates
00065 +---------------------------------------------------------------------*/
00066 #define ATX_DEFINE_NULL_MODULE_INSTANCE(_prefix) \
00067 static ATX_ModuleInstance* const _prefix##ModuleInstance = NULL;
00068 
00069 #define ATX_IMPLEMENT_SIMPLE_MODULE_INTERFACE(_refix)                        \
00070 static const ATX_ModuleInterface _prefix##ModuleATX_ModuleInterface = {      \
00071     _prefix##Module_GetInterface,                                            \
00072     _prefix##Module_CreateInstance                                           \
00073 };                                                                            
00074 
00075 #define ATX_IMPLEMENT_SIMPLE_MODULE_PROPERTIES(_prefix)                    \
00076 ATX_DECLARE_SIMPLE_GET_INTERFACE_IMPLEMENTATION(_prefix##Module)           \
00077 ATX_IMPLEMENT_SIMPLE_STATIC_PROPERTIES_INTERFACE(_prefix##Module,          \
00078                                                  _prefix##ModuleProperties)
00079 
00080 #endif /* _ATX_MODULE_H_ */
00081 
00082 
00083 
00084