Re: Generic list push/pop

From: William Lee Irwin III (wli@holomorphy.com)
Date: Mon Aug 19 2002 - 07:05:50 EST


On Sun, Aug 18, 2002 at 09:21:41PM +0200, Daniel Phillips wrote:
> I took a run at writing generic single-linked list push and pop macros, to be
> used in the form:

Dear gawd, I've gone blind.

How's this look?

Cheers,
Bill

struct slist
{
        struct slist *next;
};

static inline void slist_add(struct slist *head, struct slist *elem)
{
        elem->next = head->next;
        head->next = elem;
}

#define slist_push(head, elem) slist_add(head, elem)

static inline struct slist *slist_pop(struct slist *head)
{
        struct slist *elem = head->next;

        if (elem) {
                head->next = elem->next;
                elem->next = NULL;
        }
        return elem;
}

static inline int slist_remove(struct slist *head, struct slist *elem)
{
        struct slist *curr, *prev;

        for (prev = head, curr = head->next; curr; prev = curr, curr = curr->next)
                if (curr == head) {
                        prev->next = curr->next;
                        curr->next = NULL;
                        return 1;
                }

        return 0;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Aug 23 2002 - 22:00:16 EST