79 lines
1.6 KiB
C
79 lines
1.6 KiB
C
|
/*
|
||
|
* Doubly-linked list - test program
|
||
|
* Copyright (c) 2009, Jouni Malinen <j@w1.fi>
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License version 2 as
|
||
|
* published by the Free Software Foundation.
|
||
|
*
|
||
|
* Alternatively, this software may be distributed under the terms of BSD
|
||
|
* license.
|
||
|
*
|
||
|
* See README and COPYING for more details.
|
||
|
*/
|
||
|
|
||
|
#include "utils/includes.h"
|
||
|
#include "utils/os.h"
|
||
|
#include "utils/list.h"
|
||
|
|
||
|
struct test {
|
||
|
struct dl_list list;
|
||
|
int value;
|
||
|
};
|
||
|
|
||
|
static void dump_list(struct dl_list *head)
|
||
|
{
|
||
|
struct test *t;
|
||
|
printf("dump:");
|
||
|
dl_list_for_each(t, head, struct test, list)
|
||
|
printf(" %d", t->value);
|
||
|
printf(" (len=%d%s)\n", dl_list_len(head),
|
||
|
dl_list_empty(head) ? " empty" : "");
|
||
|
}
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
struct dl_list head;
|
||
|
struct test *t, *tmp;
|
||
|
int i;
|
||
|
|
||
|
dl_list_init(&head);
|
||
|
dump_list(&head);
|
||
|
|
||
|
for (i = 0; i < 5; i++) {
|
||
|
t = os_zalloc(sizeof(*t));
|
||
|
if (t == NULL)
|
||
|
return -1;
|
||
|
t->value = i;
|
||
|
dl_list_add(&head, &t->list);
|
||
|
dump_list(&head);
|
||
|
}
|
||
|
|
||
|
for (i = 10; i > 5; i--) {
|
||
|
t = os_zalloc(sizeof(*t));
|
||
|
if (t == NULL)
|
||
|
return -1;
|
||
|
t->value = i;
|
||
|
dl_list_add_tail(&head, &t->list);
|
||
|
dump_list(&head);
|
||
|
}
|
||
|
|
||
|
i = 0;
|
||
|
dl_list_for_each(t, &head, struct test, list)
|
||
|
if (++i == 5)
|
||
|
break;
|
||
|
printf("move: %d\n", t->value);
|
||
|
dl_list_del(&t->list);
|
||
|
dl_list_add(&head, &t->list);
|
||
|
dump_list(&head);
|
||
|
|
||
|
dl_list_for_each_safe(t, tmp, &head, struct test, list) {
|
||
|
printf("delete: %d\n", t->value);
|
||
|
dl_list_del(&t->list);
|
||
|
os_free(t);
|
||
|
dump_list(&head);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|