Object Oriented C framework:
- work in progress -
Header-File:
/* forward declaration */
typedef struct _MemMng_ MemMng_;
typedef struct _MemMng_Attribs MemMng_Attribs;
/* actual c-type class of memory manager */
typedef struct _MemMng_Class
{
const char* name;
/* general */
void (*Initialize)( MemMng_* me );
void (*Cyclic)( MemMng_* me );
void (*Manage)( MemMng_* me, void* data );
}MemMng_Class;
PUBLIC MemMng_Class* MemMng_instance_MemMngClass( void );
PUBLIC MemMng_* MemMng_instance_MemMng( void );
Source-File:
struct _MemMng_
{
const MemMng_Class* isa;
MemMng_Attribs* attribs;
};
struct _MemMng_Attribs
{
/* states */
boolean m_isInitialized;
};
STATIC MemMng_ MemMng_instance;
STATIC void initialize_class_MemMng( MemMng_* me ){ }
STATIC void cyclic_class_MemMng( MemMng_* me ){}
STATIC void manage_class_MemMng( MemMng_* me, void* data ){}
STATIC MemMng_Class MemMng_ClassObject =
{
/* name */
"MemoryManagerClass",
/* general */
initialize_class_MemMng,
cyclic_class_MemMng,
manage_class_MemMng
}
STATIC MemMng_Attribs MemMng_AttribsInstance;
STATIC boolean ptr_to_instances_initialized = FALSE;
PUBLIC MemMng_Class* MemMng_instance_MemMngClass( void ){
if( TRUE == ptr_to_instances_initialized{
return &MemMng_ClassObject;
}
return NULL;
}
/* we only allow singleton of a memory manager */
PUBLIC MemMng_* MemMng_instance_MemMng( void ){
/* configure mem_mng */
if( (MemMng_instance.isa != &MemMng_ClassObject) &&
(MemMng_instance.attribs != &MemMng_AttribsInstance)){
MemMng_instance.isa = &MemMng_ClassObject;
MemMng_instance.attribs = &MemMng_AttribsInstance;
ptr_to_instances_initialized = TRUE;
}
return &MemMng_instance;
}

No comments:
Post a Comment