1 /* opkg_active_list.c - the opkg package management system 2 3 Tick Chen <tick@openmoko.com> 4 5 Copyright (C) 2008 Openmoko 6 7 This program is free software; you can redistribute it and/or 8 modify it under the terms of the GNU General Public License as 9 published by the Free Software Foundation; either version 2, or (at 10 your option) any later version. 11 12 This program is distributed in the hope that it will be useful, but 13 WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 General Public License for more details. 16 */ 17 18 #include <stdlib.h> 19 #include <libopkg/active_list.h> 20 #include <active_list.h> 21 #include <stdio.h> 22 23 struct active_test { 24 char *str; 25 struct active_list list; 26 }; 27 28 static struct active_test *active_test_new(char *str) 29 { 30 struct active_test *ans = 31 (struct active_test *)calloc(1, sizeof(struct active_test)); 32 ans->str = str; 33 active_list_init(&ans->list); 34 return ans; 35 } 36 37 static void active_test_add(struct active_list *head, struct active_test *node) 38 { 39 active_list_add(head, &node->list); 40 } 41 42 /* 43 .--A---B----C----D-----E----F 44 | |__k---L 45 | |_ N 46 |__ G ---H ---I---J 47 |_M |_O 48 49 Then the sequence will be 50 +: G M H I O J A B K N L C D E F 51 -: F E D C L N K B A J O I H M G 52 */ 53 static void make_list(struct active_list *head) 54 { 55 struct active_test *A = active_test_new("A"); 56 struct active_test *B = active_test_new("B"); 57 struct active_test *C = active_test_new("C"); 58 struct active_test *D = active_test_new("D"); 59 struct active_test *E = active_test_new("E"); 60 struct active_test *F = active_test_new("F"); 61 struct active_test *G = active_test_new("G"); 62 struct active_test *H = active_test_new("H"); 63 struct active_test *I = active_test_new("I"); 64 struct active_test *J = active_test_new("J"); 65 struct active_test *K = active_test_new("K"); 66 struct active_test *L = active_test_new("L"); 67 struct active_test *M = active_test_new("M"); 68 struct active_test *N = active_test_new("N"); 69 struct active_test *O = active_test_new("O"); 70 71 active_test_add(head, A); 72 active_test_add(head, B); 73 active_test_add(head, C); 74 active_test_add(head, D); 75 active_test_add(head, E); 76 active_test_add(head, F); 77 active_test_add(head, G); 78 active_test_add(head, H); 79 active_test_add(head, I); 80 active_test_add(head, J); 81 active_test_add(head, K); 82 active_test_add(head, L); 83 active_test_add(head, M); 84 active_test_add(head, N); 85 active_test_add(head, O); 86 } 87 88 static void show_list(struct active_list *head) 89 { 90 struct active_list *ptr; 91 struct active_test *test; 92 for (ptr = active_list_next(head, NULL); ptr; 93 ptr = active_list_next(head, ptr)) { 94 test = list_entry(ptr, struct active_test, list); 95 printf("%s ", test->str); 96 } 97 printf("\n"); 98 } 99 100 int main(void) 101 { 102 struct active_list head; 103 struct active_list *ptr; 104 struct active_test *test; 105 active_list_init(&head); 106 make_list(&head); 107 108 printf("pos order: "); 109 show_list(&head); 110 /* for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) { 111 test = list_entry(ptr, struct active_test, list); 112 printf ("%s ",test->str); 113 }*/ 114 printf("neg order: "); 115 for (ptr = active_list_prev(&head, &head); ptr; 116 ptr = active_list_prev(&head, ptr)) { 117 test = list_entry(ptr, struct active_test, list); 118 printf("%s ", test->str); 119 } 120 printf("after clear: "); 121 active_list_clear(&head); 122 for (ptr = active_list_next(&head, NULL); ptr; 123 ptr = active_list_next(&head, ptr)) { 124 test = list_entry(ptr, struct active_test, list); 125 printf("%s ", test->str); 126 } 127 printf("\n"); 128 129 } 130
This page was automatically generated by LXR 0.3.1. • OpenWrt