/* Objets qui supportent l'heritage multiple */

#ifndef __OBJECT_H__
#define __OBJECT_H__

#include <general.h>

typedef struct _object  object;
typedef struct _obj_ofs obj_ofs;

struct _obj_ofs
{
  uint32 obj_type;
  pointer ofs;
};

struct _object
{
  void (* free)(obj_ofs *this);
};

/* ne pas utiliser directement, utiliser la macro ci dessous */
extern uint32 current_obj_num;

/* renvoi un nouveau numero d'identificateur d'object */
#define object_num_new (++current_obj_num);

/* Renvoi le numero de type qui correspond a un object tout con  */
/* chaque autre type d'object (button, window...) doit avoir son */
/* propre numero ainsi que sa propre fonction sur le meme type.  */
uint32 object_type(void);

/* initialise un object (utile pour les object qui herite) */
/* qui doivent appeler init avant de faire leur propre     */
/* initialisation specifique ou de surcharge.              */
void object_init(obj_ofs *this);

/* cree un object */
obj_ofs *object_new(void);

#endif /* __OBJECT_H__ */