From: | Marko Kreen <markokr(at)gmail(dot)com> |
---|---|
To: | Andres Freund <andres(at)2ndquadrant(dot)com> |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: [PATCH 04/16] Add embedded list interface (header only) |
Date: | 2012-06-19 19:59:48 |
Message-ID: | CACMqXCJwjRAxhOZ6UP0yKzLmEbjCFQ9r2C93FwgzcG-0Bk76YQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Wed, Jun 13, 2012 at 2:28 PM, Andres Freund <andres(at)2ndquadrant(dot)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.
--
marko
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2012-06-19 20:02:57 | Re: [PATCH 04/16] Add embedded list interface (header only) |
Previous Message | Robert Haas | 2012-06-19 19:58:43 | Re: [PATCH 04/16] Add embedded list interface (header only) |