110 * |
110 * |
111 * @param c the collection |
111 * @param c the collection |
112 * @param e the element |
112 * @param e the element |
113 */ |
113 */ |
114 #define cx_invoke_simple_destructor(c, e) \ |
114 #define cx_invoke_simple_destructor(c, e) \ |
115 (c)->simple_destructor((c)->store_pointer ? (*((void **) e)) : e) |
115 (c)->simple_destructor((c)->store_pointer ? (*((void **) (e))) : (e)) |
116 |
116 |
117 /** |
117 /** |
118 * Invokes the advanced destructor function for a specific element. |
118 * Invokes the advanced destructor function for a specific element. |
119 * |
119 * |
120 * Usually only used by collection implementations. There should be no need |
120 * Usually only used by collection implementations. There should be no need |
123 * @param c the collection |
123 * @param c the collection |
124 * @param e the element |
124 * @param e the element |
125 */ |
125 */ |
126 #define cx_invoke_advanced_destructor(c, e) \ |
126 #define cx_invoke_advanced_destructor(c, e) \ |
127 (c)->advanced_destructor((c)->destructor_data, \ |
127 (c)->advanced_destructor((c)->destructor_data, \ |
128 (c)->store_pointer ? (*((void **) e)) : e) |
128 (c)->store_pointer ? (*((void **) (e))) : (e)) |
129 |
129 |
130 |
130 |
131 #define cx_invoke_destructor(c, e) \ |
131 #define cx_invoke_destructor(c, e) \ |
132 if ((c)->simple_destructor) cx_invoke_simple_destructor(c,e); \ |
132 if ((c)->simple_destructor) cx_invoke_simple_destructor(c,e); \ |
133 if ((c)->advanced_destructor) cx_invoke_advanced_destructor(c,e) |
133 if ((c)->advanced_destructor) cx_invoke_advanced_destructor(c,e) |