/** * @file * Fast list methods. * Feb 2000 --Jcid * */ #ifndef __LIST_H__ #define __LIST_H__ /** * Make sure there's space for 'num_items' items within the list. * (First, allocate an 'alloc_step' sized chunk, after that, double the * list size --to make it faster) */ #define a_List_resize(list,num_items,alloc_step) \ if (!list) { \ list = dMalloc(alloc_step * sizeof(*list)); \ } \ if (num_items >= alloc_step){ \ while ( num_items >= alloc_step ) \ alloc_step <<= 1; \ list = dRealloc(list, alloc_step * sizeof(*list)); \ } /** * Make sure there's space for one more item within the list. */ #define a_List_add(list,num_items,alloc_step) \ a_List_resize(list,num_items,alloc_step) /** * Quickly remove an item from the list * ==> We preserve relative position, but not the element index <== */ #define a_List_remove(list, item, num_items) \ if (list && item < num_items) { \ list[item] = list[--num_items]; \ } #endif /* __LIST_H__ */