1 #ifndef EO_PTR_INDIRECTION_H 2 #define EO_PTR_INDIRECTION_H 3 4 #include "Eo.h" 5 #include "eo_private.h" 6 7 /* Macro used to obtain the object pointer and return if fails. */ 8 9 void _eo_pointer_error(const Eo *obj_id, const char *func_name, const char *file, int line, const char *fmt, ...); 10 11 #define _EO_POINTER_ERR(obj_id, fmt, ...) \ 12 _eo_pointer_error(obj_id, __func__, __FILE__, __LINE__, fmt, __VA_ARGS__) 13 14 #define EO_OBJ_POINTER(obj_id, obj) \ 15 _Eo_Object *obj; \ 16 do { \ 17 obj = _eo_obj_pointer_get((Eo_Id)obj_id, __func__, __FILE__, __LINE__); \ 18 } while (0) 19 20 #define EO_OBJ_POINTER_PROXY(obj_id, obj) \ 21 _Eo_Object *obj; \ 22 do { \ 23 obj = _eo_obj_pointer_get((Eo_Id)obj_id, func_name, file, line); \ 24 } while (0) 25 26 #define EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, ret) \ 27 _Eo_Object *obj; \ 28 do { \ 29 obj = _eo_obj_pointer_get((Eo_Id)obj_id, __func__, __FILE__, __LINE__); \ 30 if (!obj) return (ret); \ 31 } while (0) 32 33 /* reports as another function using func_name, file and line variables */ 34 #define EO_OBJ_POINTER_RETURN_VAL_PROXY(obj_id, obj, ret) \ 35 _Eo_Object *obj; \ 36 do { \ 37 obj = _eo_obj_pointer_get((Eo_Id)obj_id, func_name, file, line); \ 38 if (!obj) return (ret); \ 39 } while (0) 40 41 #define EO_OBJ_POINTER_RETURN(obj_id, obj) \ 42 _Eo_Object *obj; \ 43 do { \ 44 obj = _eo_obj_pointer_get((Eo_Id)obj_id, __func__, __FILE__, __LINE__); \ 45 if (!obj) return; \ 46 } while (0) 47 48 #define EO_OBJ_POINTER_RETURN_PROXY(obj_id, obj) \ 49 _Eo_Object *obj; \ 50 do { \ 51 obj = _eo_obj_pointer_get((Eo_Id)obj_id, func_name, file, line); \ 52 if (!obj) return; \ 53 } while (0) 54 55 #define EO_OBJ_POINTER_GOTO(obj_id, obj, label) \ 56 _Eo_Object *obj; \ 57 do { \ 58 obj = _eo_obj_pointer_get((Eo_Id)obj_id, __func__, __FILE__, __LINE__); \ 59 if (!obj) goto label; \ 60 } while (0) 61 62 #define EO_OBJ_POINTER_GOTO_PROXY(obj_id, obj, label) \ 63 _Eo_Object *obj; \ 64 do { \ 65 obj = _eo_obj_pointer_get((Eo_Id)obj_id, func_name, file, line); \ 66 if (!obj) goto label; \ 67 } while (0) 68 69 #define EO_CLASS_POINTER(klass_id, klass) \ 70 _Efl_Class *klass; \ 71 do { \ 72 klass = _eo_class_pointer_get(klass_id); \ 73 } while (0) 74 75 #define EO_CLASS_POINTER_PROXY(klass_id, klass) \ 76 _Efl_Class *klass; \ 77 do { \ 78 klass = _eo_class_pointer_get(klass_id); \ 79 } while (0) 80 81 #define EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, ret) \ 82 _Efl_Class *klass; \ 83 do { \ 84 klass = _eo_class_pointer_get(klass_id); \ 85 if (!klass) { \ 86 _EO_POINTER_ERR(klass_id, "Class (%p) is an invalid ref.", klass_id); \ 87 return ret; \ 88 } \ 89 } while (0) 90 91 #define EO_CLASS_POINTER_RETURN_VAL_PROXY(klass_id, klass, ret) \ 92 _Efl_Class *klass; \ 93 do { \ 94 klass = _eo_class_pointer_get(klass_id); \ 95 if (!klass) { \ 96 _EO_POINTER_ERR(klass_id, "Class (%p) is an invalid ref.", klass_id); \ 97 return ret; \ 98 } \ 99 } while (0) 100 101 #define EO_CLASS_POINTER_RETURN(klass_id, klass) \ 102 _Efl_Class *klass; \ 103 do { \ 104 klass = _eo_class_pointer_get(klass_id); \ 105 if (!klass) { \ 106 _EO_POINTER_ERR(klass_id, "Class (%p) is an invalid ref.", klass_id); \ 107 return; \ 108 } \ 109 } while (0) 110 111 #define EO_CLASS_POINTER_RETURN_PROXY(klass_id, klass) \ 112 _Efl_Class *klass; \ 113 do { \ 114 klass = _eo_class_pointer_get(klass_id); \ 115 if (!klass) { \ 116 _EO_POINTER_ERR(klass_id, "Class (%p) is an invalid ref.", klass_id); \ 117 return; \ 118 } \ 119 } while (0) 120 121 #define EO_CLASS_POINTER_GOTO(klass_id, klass, label) \ 122 _Efl_Class *klass; \ 123 do { \ 124 klass = _eo_class_pointer_get(klass_id); \ 125 if (!klass) goto label; \ 126 } while (0) 127 128 #define EO_CLASS_POINTER_GOTO_PROXY(klass_id, klass, label) \ 129 _Efl_Class *klass; \ 130 do { \ 131 klass = _eo_class_pointer_get(klass_id); \ 132 if (!klass) goto label; \ 133 } while (0) 134 135 #define EO_OBJ_DONE(obj_id) \ 136 _eo_obj_pointer_done((Eo_Id)obj_id) 137 138 #ifdef EFL_DEBUG 139 static inline void _eo_print(Eo_Id_Table_Data *tdata); 140 #endif 141 142 extern Eina_TLS _eo_table_data; 143 144 #include "eo_ptr_indirection.x" 145 146 extern Eo_Id_Data *_eo_table_data_shared; 147 extern Eo_Id_Table_Data *_eo_table_data_shared_data; 148 149 #endif 150 151