From 399da01ae4eb5c5e3e9349bacc2063c946c3d4a1 Mon Sep 17 00:00:00 2001 From: Bo Yang Date: Tue, 11 Aug 2009 11:17:23 +0000 Subject: Merge the branches/struggleyb/libdom-remain back to trunk. svn path=/trunk/dom/; revision=9191 --- src/utils/list.h | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/utils/list.h (limited to 'src/utils/list.h') diff --git a/src/utils/list.h b/src/utils/list.h new file mode 100644 index 0000000..6e3ba20 --- /dev/null +++ b/src/utils/list.h @@ -0,0 +1,61 @@ +/* + * This file is part of libdom. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2009 Bo Yang + * + * This file contains the list structure used to compose lists. + * + * Note: This is a implementation of a doubld-linked cyclar list. + */ + +#ifndef dom_utils_list_h_ +#define dom_utils_list_h_ + +#include + +struct list_entry { + struct list_entry *prev; + struct list_entry *next; +}; + +/** + * Initialise a list_entry structure + * + * \param ent The entry to initialise + */ +static inline void list_init(struct list_entry *ent) +{ + ent->prev = ent; + ent->next = ent; +} + +/** + * Append a new list_entry after the list + * + * \param head The list header + * \param new The new entry + */ +static inline void list_append(struct list_entry *head, struct list_entry *new) +{ + new->next = head; + new->prev = head->prev; + head->prev->next = new; + head->prev = new; +} + +/** + * Delete a list_entry from the list + * + * \param entry The entry need to be deleted from the list + */ +static inline void list_del(struct list_entry *ent) +{ + ent->prev->next = ent->next; + ent->next->prev = ent->prev; + + ent->prev = ent; + ent->next = ent; +} + +#endif -- cgit v1.2.3