On Thu, Oct 24, 2002 at 10:31:32AM -0700, George Greer wrote: >Maybe you want REMOVE_FROM_LIST() ?? After you've removed it from the >list, you still have a pointer to it so you can do whatever unspeakable >things to it you want. Just seemed like a good time to mention this.... The problem I had long ago with REMOVE_FROM_LIST was the necessity of remembering to define temp. I rewrote it like this, and haven't had a problem since. AFAIK this isn't an extension. (I used to use the gcc extension but, after I found a bug which failed back to 3.0 they removed the extension of: typedef __type_i item; This is their stated replacement for that extension. #define remove_from_list(item, head) { \ typedef typeof(item) __type_i; \ __type_i __temp; \ if ((item) == (head)) { \ head = (item)->next; \ } else { \ __temp = head; \ while (__temp && (__temp->next != (item))) \ __temp = __temp->next; \ if (__temp) \ __temp->next = (item)->next; \ } \ } Without this, every time you want to remove from a list, you need to remember to define a var named 'temp'. This does assume that the next_in_list is "next" but that's not too hard to work around. -me -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT