/* --------------------------- UiList --------------------------- */
void uic_ucx_list_init(UiContext *ctx, UiList *list, void *unused) {
+ list->destroy = uic_ucx_list_destroy;
list->data = cxArrayListCreate(ctx->mp->allocator, CX_STORE_POINTERS, 32);
list->first = ui_list_first;
list->next = ui_list_next;
}
void ui_list_free(UiContext *ctx, UiList *list) {
- if(!default_list_destroy) {
+ if(list->destroy) {
+ list->destroy(ctx, list, NULL);
+ } else if(!default_list_destroy) {
uic_ucx_list_destroy(ctx, list, NULL);
} else {
default_list_destroy(ctx, list, default_list_destroy_userdata);
default_list_destroy_userdata = userdata;
}
+UIEXPORT void ui_list_class_set_destructor(UiList *list, ui_list_destroy_func destroy) {
+ list->destroy = destroy;
+}
+
void ui_list_class_set_first(UiList *list, void*(*first)(UiList *list)) {
list->first = first;
}
* abstract list
*/
struct UiList {
+ /* destructor */
+ ui_list_destroy_func destroy;
/* get the first element */
void*(*first)(UiList *list);
/* get the next element */
UIEXPORT void ui_global_list_initializer(ui_list_init_func func, void *userdata);
UIEXPORT void ui_global_list_destructor(ui_list_destroy_func func, void *userdata);
+UIEXPORT void ui_list_class_set_destructor(UiList *list, ui_list_destroy_func destroy);
UIEXPORT void ui_list_class_set_first(UiList *list, void*(*first)(UiList *list));
UIEXPORT void ui_list_class_set_next(UiList *list, void*(*next)(UiList *list));
UIEXPORT void ui_list_class_set_get(UiList *list, void*(*get)(UiList *list, int i));