On Tue, Jun 19, 2012 at 11:02 PM, Andres Freund <and...@2ndquadrant.com> wrote: > On Tuesday, June 19, 2012 09:59:48 PM Marko Kreen wrote: >> On Wed, Jun 13, 2012 at 2:28 PM, Andres Freund <and...@2ndquadrant.com> > wrote: >> > +/* >> > + * removes a node from a list >> > + * Attention: O(n) >> > + */ >> > +static inline void ilist_s_remove(ilist_s_head *head, >> > + ilist_s_node *node) >> > +{ >> > + ilist_s_node *last = &head->head; >> > + ilist_s_node *cur; >> > +#ifndef NDEBUG >> > + bool found = false; >> > +#endif >> > + while ((cur = last->next)) >> > + { >> > + if (cur == node) >> > + { >> > + last->next = cur->next; >> > +#ifndef NDEBUG >> > + found = true; >> > +#endif >> > + break; >> > + } >> > + last = cur; >> > + } >> > + assert(found); >> > +} >> >> This looks weird. >> >> In cyclic list removal is: >> >> node->prev->next = node->next; >> node->next->prev = node->prev; >> >> And thats it. > Thats the single linked list, not the double linked one. Thats why it has a > O(n) warning tacked on...
Oh, you have several list implementations there. Sorry, I was just browsing and it caught my eye. -- marko -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers