void* multiset_add_item (multiset_t* mset, void* item) { void* ret; int cmp; list_t** liter; set_t* set; ret = NULL; set = (set_t*)mset; if(set && set->cmp) { cmp = 1; liter = &(set->items); while(*liter) { cmp = set->cmp((list_get_data(item_t, (*liter)))->item, item); if(cmp >= 0) break; else liter = &((*liter)->next); } if(!cmp) { (list_get_data(item_t, (*liter)))->size++; ret = (list_get_data(item_t, (*liter)))->item; } else { *liter = list_add_data(XMALLOC(list_t, 1), *liter, XMALLOC(item_t, 1)); (list_get_data(item_t, (*liter)))->item = item; (list_get_data(item_t, (*liter)))->size = 1; mset->dorder++; ret = item; } set->imark = NULL; set->order++; mset->step = 0; } else warning("null pointer"); return ret; }
void _add_block(t_context *C,t_block *block) { // get list t_set *set = get_current_set(C); t_lst *list = set->blocks; list_add_data(list, block); }
void block_brick_add(t_block *block,t_node *node_brick) { t_brick *brick=node_brick->data; brick->block=block; brick->geom.block_pos=block->tot_bricks; block->tot_bricks++; list_add_data(block->bricks,brick); }
void list_add_list(List* list, const List* ll) { ListData data; assert(list_is_valid(list)); assert(list_is_valid(ll)); assert(list->type == LIST_LIST); data.list = list_copy(ll); list_add_data(list, &data); }
void list_add_entry(List* list, const Entry* entry) { ListData data; assert(list_is_valid(list)); assert(entry_is_valid(entry)); assert(list->type == LIST_ENTRY); data.entry = entry_copy(entry); list_add_data(list, &data); }
void list_add_tuple(List* list, const Tuple* tuple) { ListData data; assert(list_is_valid(list)); assert(tuple_is_valid(tuple)); assert(list->type == LIST_TUPLE); data.tuple = tuple_copy(tuple); list_add_data(list, &data); }
void list_add_elem(List* list, const Elem* elem) { ListData data; assert(list_is_valid(list)); assert(elem_is_valid(elem)); assert(list->type == LIST_ELEM); data.elem = elem_copy(elem); list_add_data(list, &data); }
void screen_block_add(t_screen *screen, t_block *block) { t_context *C = ctx_get(); if(screen->blocks) { list_add_data(screen->blocks, block); } else { t_node *node = scene_add(C->scene, dt_lst, "lst"); t_lst *lst = node->data; screen->blocks = lst; screen_block_add(screen, block); } }
static List* list_new(ListType type, const ListData* data) { List* list = calloc(1, sizeof(*list)); assert(list != NULL); assert(data != NULL); list->refc = 1; list->elems = 0; list->type = type; list->anchor.prev = &list->anchor; list->anchor.next = &list->anchor; SID_set(list, LIST_SID); assert(list_is_valid(list)); list_add_data(list, data); return list; }
t_screen *screen_add_3d(const char *name, void (* draw)(t_screen *s)) { t_context *C=ctx_get(); t_node *node=scene_add(C->scene,dt_screen,name); t_screen *screen=node->data; screen->keymap=keymap_generic; screen->draw=draw; lst_add(C->ui->screens,node,name); // Lst t_node *node_lst = scene_add( C->scene, dt_list, "lst_screen"); t_lst *lst = node_lst->data; screen->viewports = lst; // Viewport t_node *node_viewport = scene_add( C->scene, dt_viewport, "viewport"); t_viewport *viewport = node_viewport->data; // Camera t_node *node_camera = scene_add( C->scene, dt_camera, name); t_camera *camera = node_camera->data; camera_add_controls( camera); viewport->camera = camera; viewport_add_controls( viewport); screen->width = C->app->window->width; screen->height = C->app->window->height; viewport->width = C->app->window->width; viewport->height = C->app->window->height; list_add_data(screen->viewports, viewport); return screen; }