list.c (1649B)
1 #define HEADER_IMPL 2 #include "list.h" 3 4 struct mystruct { 5 int a; 6 struct list_node list_node; 7 }; 8 9 int 10 main(void) 11 { 12 struct list_node list = LIST_INIT(list); 13 list_print(&list, 0); 14 15 struct mystruct a = {1,{0,0}}, b = {2,{0,0}}, c = {3,{0,0}}; 16 fprintf(stderr, "a: %p\n", (void *) &a.list_node); 17 fprintf(stderr, "b: %p\n", (void *) &b.list_node); 18 fprintf(stderr, "c: %p\n", (void *) &c.list_node); 19 20 /* list_iter() */ 21 fprintf(stderr, "list_iter()...\n"); 22 list_push_head(&list, &a.list_node); 23 list_push_head(&list, &b.list_node); 24 list_push_head(&list, &c.list_node); 25 list_print(&list, 0); 26 27 /* list_entry_iter() */ 28 { 29 fprintf(stderr, "list_entry_iter()...\n"); 30 fprintf(stderr, "mystruct list: %p, head: %p, tail: %p\n", 31 (void *) &list, (void *) LIST_HEAD(&list), (void *) LIST_TAIL(&list)); 32 33 size_t i = 0; 34 struct mystruct *it; 35 LIST_ENTRY_ITER(&list, it, list_node) { 36 fprintf(stderr, "\t%zu = { %d, { %p, prev: %p, next: %p } }\n", 37 i++, it->a, 38 (void *) &it->list_node, 39 (void *) it->list_node.prev, 40 (void *) it->list_node.next); 41 } 42 } 43 44 /* list_riter() */ 45 fprintf(stderr, "list_riter()...\n"); 46 list_print(&list, 1); 47 48 /* list_entry_riter() */ 49 { 50 fprintf(stderr, "list_entry_riter()...\n"); 51 fprintf(stderr, "list: %p, head: %p, tail: %p\n", 52 (void *) &list, (void *) LIST_HEAD(&list), (void *) LIST_TAIL(&list)); 53 54 size_t i = 0; 55 struct mystruct *it; 56 LIST_ENTRY_RITER(&list, it, list_node) { 57 fprintf(stderr, "\t%zu = { %d, { %p, prev: %p, next: %p } }\n", 58 i++, it->a, 59 (void *) &it->list_node, 60 (void *) it->list_node.prev, 61 (void *) it->list_node.next); 62 } 63 } 64 65 return 0; 66 }