2013-04-18 04:19:02 -07:00
|
|
|
#ifndef EO_PTR_INDIRECTION_H
|
|
|
|
#define EO_PTR_INDIRECTION_H
|
|
|
|
|
|
|
|
#include "Eo.h"
|
|
|
|
#include "eo_private.h"
|
|
|
|
|
|
|
|
/* Macro used to obtain the object pointer and return if fails. */
|
|
|
|
|
|
|
|
#ifdef HAVE_EO_ID
|
|
|
|
|
2015-12-29 02:42:05 -08:00
|
|
|
void _eo_pointer_error(const char *msg);
|
|
|
|
|
|
|
|
#define _EO_POINTER_ERR(fmt, ptr) \
|
|
|
|
do { char buf[256]; sprintf(buf, fmt, ptr); _eo_pointer_error(buf); } while (0)
|
|
|
|
|
2016-08-26 12:01:52 -07:00
|
|
|
#define EO_OBJ_POINTER(obj_id, obj) \
|
|
|
|
_Eo_Object *obj = NULL; \
|
|
|
|
do { \
|
|
|
|
obj = _eo_obj_pointer_get((Eo_Id)obj_id); \
|
|
|
|
} while (0)
|
2016-05-17 02:25:31 -07:00
|
|
|
|
2016-08-26 12:01:52 -07:00
|
|
|
#define EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, ret) \
|
|
|
|
_Eo_Object *obj; \
|
|
|
|
do { \
|
|
|
|
obj = _eo_obj_pointer_get((Eo_Id)obj_id); \
|
|
|
|
if (!obj) return (ret); \
|
|
|
|
} while (0)
|
2013-04-18 04:19:02 -07:00
|
|
|
|
2016-08-26 12:01:52 -07:00
|
|
|
#define EO_OBJ_POINTER_RETURN(obj_id, obj) \
|
|
|
|
_Eo_Object *obj; \
|
|
|
|
do { \
|
|
|
|
obj = _eo_obj_pointer_get((Eo_Id)obj_id); \
|
|
|
|
if (!obj) return; \
|
|
|
|
} while (0)
|
2013-04-18 04:19:02 -07:00
|
|
|
|
2013-09-26 08:06:46 -07:00
|
|
|
#define EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, ret) \
|
2016-08-09 06:10:05 -07:00
|
|
|
_Efl_Class *klass; \
|
2013-09-26 08:06:46 -07:00
|
|
|
do { \
|
|
|
|
klass = _eo_class_pointer_get(klass_id); \
|
2015-01-23 08:51:02 -08:00
|
|
|
if (!klass) { \
|
2016-01-15 17:41:59 -08:00
|
|
|
_EO_POINTER_ERR("Class (%p) is an invalid ref.", klass_id); \
|
2015-01-23 08:51:02 -08:00
|
|
|
return ret; \
|
|
|
|
} \
|
2013-09-26 08:06:46 -07:00
|
|
|
} while (0)
|
|
|
|
|
|
|
|
#define EO_CLASS_POINTER_RETURN(klass_id, klass) \
|
2016-08-09 06:10:05 -07:00
|
|
|
_Efl_Class *klass; \
|
2013-09-26 08:06:46 -07:00
|
|
|
do { \
|
|
|
|
klass = _eo_class_pointer_get(klass_id); \
|
2015-01-23 08:51:02 -08:00
|
|
|
if (!klass) { \
|
2016-01-15 17:41:59 -08:00
|
|
|
_EO_POINTER_ERR("Class (%p) is an invalid ref.", klass_id); \
|
2015-01-23 08:51:02 -08:00
|
|
|
return; \
|
|
|
|
} \
|
2013-09-26 08:06:46 -07:00
|
|
|
} while (0)
|
|
|
|
|
2013-04-18 04:19:02 -07:00
|
|
|
#else
|
|
|
|
|
2016-08-26 12:01:52 -07:00
|
|
|
#define EO_OBJ_POINTER(obj_id, obj) \
|
|
|
|
_Eo_Object *obj = NULL; \
|
|
|
|
do { \
|
|
|
|
obj = _eo_obj_pointer_get((Eo_Id)obj_id); \
|
|
|
|
if (obj && \
|
|
|
|
!EINA_MAGIC_CHECK((Eo_Header *) obj, EO_EINA_MAGIC)) { \
|
|
|
|
EINA_MAGIC_FAIL((Eo_Header *) obj, EO_EINA_MAGIC); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
2016-05-17 02:25:31 -07:00
|
|
|
|
2013-04-18 04:19:02 -07:00
|
|
|
#define EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, ret) \
|
2013-09-26 14:31:39 -07:00
|
|
|
_Eo_Object *obj; \
|
2013-04-18 04:19:02 -07:00
|
|
|
do { \
|
2013-05-05 06:16:36 -07:00
|
|
|
obj = _eo_obj_pointer_get((Eo_Id)obj_id); \
|
2015-10-24 19:23:04 -07:00
|
|
|
if (!obj) return (ret); \
|
2015-05-28 08:49:13 -07:00
|
|
|
EO_MAGIC_RETURN_VAL((Eo_Header *) obj, EO_EINA_MAGIC, ret); \
|
2013-04-18 04:19:02 -07:00
|
|
|
} while (0)
|
|
|
|
|
|
|
|
#define EO_OBJ_POINTER_RETURN(obj_id, obj) \
|
2013-09-26 14:31:39 -07:00
|
|
|
_Eo_Object *obj; \
|
2013-04-18 04:19:02 -07:00
|
|
|
do { \
|
2013-05-05 06:16:36 -07:00
|
|
|
obj = _eo_obj_pointer_get((Eo_Id)obj_id); \
|
2015-10-24 19:23:04 -07:00
|
|
|
if (!obj) return; \
|
2015-05-28 08:49:13 -07:00
|
|
|
EO_MAGIC_RETURN((Eo_Header *) obj, EO_EINA_MAGIC); \
|
2013-04-18 04:19:02 -07:00
|
|
|
} while (0)
|
|
|
|
|
2013-09-26 08:06:46 -07:00
|
|
|
#define EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, ret) \
|
2016-08-09 06:10:05 -07:00
|
|
|
_Efl_Class *klass; \
|
2013-09-26 08:06:46 -07:00
|
|
|
do { \
|
|
|
|
klass = _eo_class_pointer_get(klass_id); \
|
2015-10-24 19:23:04 -07:00
|
|
|
if (!klass) return (ret); \
|
2015-05-28 08:49:13 -07:00
|
|
|
EO_MAGIC_RETURN_VAL((Eo_Header *) klass, EO_CLASS_EINA_MAGIC, ret); \
|
2013-09-26 08:06:46 -07:00
|
|
|
} while (0)
|
|
|
|
|
|
|
|
#define EO_CLASS_POINTER_RETURN(klass_id, klass) \
|
2016-08-09 06:10:05 -07:00
|
|
|
_Efl_Class *klass; \
|
2013-09-26 08:06:46 -07:00
|
|
|
do { \
|
|
|
|
klass = _eo_class_pointer_get(klass_id); \
|
2015-10-24 19:23:04 -07:00
|
|
|
if (!klass) return; \
|
2015-05-28 08:49:13 -07:00
|
|
|
EO_MAGIC_RETURN((Eo_Header *) klass, EO_CLASS_EINA_MAGIC); \
|
2013-09-26 08:06:46 -07:00
|
|
|
} while (0)
|
|
|
|
|
2013-04-18 04:19:02 -07:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef EFL_DEBUG
|
|
|
|
void _eo_print();
|
|
|
|
#endif
|
|
|
|
|
2013-07-01 01:09:02 -07:00
|
|
|
#include "eo_ptr_indirection.x"
|
|
|
|
|
2013-04-18 04:19:02 -07:00
|
|
|
#endif
|
|
|
|
|