list->tail.next = NULL;
}
-struct list_elem *
+list_elem *
list_begin (struct list *list)
{
return list->head.next;
}
-struct list_elem *
+list_elem *
list_end (struct list *list)
{
return &list->tail;
}
static inline bool
-is_head (struct list_elem *elem)
+is_head (list_elem *elem)
{
return elem != NULL && elem->prev == NULL && elem->next != NULL;
}
static inline bool
-is_real (struct list_elem *elem)
+is_real (list_elem *elem)
{
return elem != NULL && elem->prev != NULL && elem->next != NULL;
}
static inline bool
-is_tail (struct list_elem *elem)
+is_tail (list_elem *elem)
{
return elem != NULL && elem->prev != NULL && elem->next == NULL;
}
-struct list_elem *
-list_next (struct list_elem *elem)
+list_elem *
+list_next (list_elem *elem)
{
ASSERT (is_real (elem));
return elem->next;
}
-struct list_elem *
-list_prev (struct list_elem *elem)
+list_elem *
+list_prev (list_elem *elem)
{
ASSERT (is_real (elem) || is_tail (elem));
return elem->prev;
}
void
-list_insert (struct list_elem *before, struct list_elem *elem)
+list_insert (list_elem *before, list_elem *elem)
{
ASSERT (is_real (before) || is_tail (before));
ASSERT (elem != NULL);
}
void
-list_splice (struct list_elem *target,
- struct list_elem *first, struct list_elem *last)
+list_splice (list_elem *target,
+ list_elem *first, list_elem *last)
{
ASSERT (is_real (target) || is_tail (target));
if (first == last)
}
void
-list_push_front (struct list *list, struct list_elem *elem)
+list_push_front (struct list *list, list_elem *elem)
{
list_insert (list_begin (list), elem);
}
void
-list_push_back (struct list *list, struct list_elem *elem)
+list_push_back (struct list *list, list_elem *elem)
{
list_insert (list_end (list), elem);
}
-static struct list_elem *
-remove_item (struct list_elem *elem)
+static list_elem *
+remove_item (list_elem *elem)
{
ASSERT (is_real (elem));
elem->prev->next = elem->next;
}
void
-list_remove (struct list_elem *elem)
+list_remove (list_elem *elem)
{
remove_item (elem);
}
-struct list_elem *
+list_elem *
list_pop_front (struct list *list)
{
return remove_item (list_front (list));
}
-struct list_elem *
+list_elem *
list_pop_back (struct list *list)
{
return remove_item (list_back (list));
}
-struct list_elem *
+list_elem *
list_front (struct list *list)
{
return list_begin (list);
}
-struct list_elem *
+list_elem *
list_back (struct list *list)
{
return list_prev (list_end (list));
size_t
list_size (struct list *list)
{
- struct list_elem *elem;
+ list_elem *elem;
size_t cnt = 0;
for (elem = list_begin (list); elem != list_end (list); elem = elem->next)
void
list_reverse (struct list *list)
{
- struct list_elem *e;
- struct list_elem te;
+ list_elem te, *e;
for (e = &list->head; e != NULL; e = e->prev)
{
- struct list_elem *tep = e->prev;
+ list_elem *tep = e->prev;
e->prev = e->next;
e->next = tep;
}
list_merge (struct list *al, struct list *bl,
list_less_func *less, void *aux)
{
- struct list_elem *a;
+ list_elem *a;
ASSERT (al != NULL);
ASSERT (bl != NULL);
a = list_begin (al);
while (a != list_end (al))
{
- struct list_elem *b = list_begin (bl);
+ list_elem *b = list_begin (bl);
if (less (b, a, aux))
{
list_splice (a, b, list_next (b));
list_less_func *less, void *aux)
{
struct list tmp;
- struct list_elem *middle, *last;
+ list_elem *middle, *last;
ASSERT (list != NULL);
ASSERT (less != NULL);
}
void
-list_insert_ordered (struct list *list, struct list_elem *elem,
+list_insert_ordered (struct list *list, list_elem *elem,
list_less_func *less, void *aux)
{
- struct list_elem *e;
+ list_elem *e;
ASSERT (list != NULL);
ASSERT (elem != NULL);
list_unique (struct list *list,
list_less_func *less, void *aux)
{
- struct list_elem *elem, *next;
+ list_elem *elem, *next;
ASSERT (list != NULL);
ASSERT (less != NULL);