toys

toys.git
git clone git://git.lenczewski.org/toys.git
Log | Files | Refs | README | LICENSE

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 }