+/* opkg_active_list.c - the opkg package management system
-/*
-.--A---B----C----D-----E----F
- | |__k---L
- | |_ N
- |__ G ---H ---I---J
- |_M |_O
+ Tick Chen <tick@openmoko.com>
-Then the sequence will be
-G M H I O J A B K N L C D E F
+ Copyright (C) 2008 Openmoko
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
*/
+
#include <stdlib.h>
#include <libopkg/active_list.h>
+#include <active_list.h>
#include <stdio.h>
struct active_test {
char *str;
struct active_list list;
-} __attribute__((packed));
+};
struct active_test *active_test_new(char *str) {
struct active_test *ans = (struct active_test *)calloc(1, sizeof(struct active_test));
active_list_add_depend(&A->list, &B->list);
}
+/*
+.--A---B----C----D-----E----F
+ | |__k---L
+ | |_ N
+ |__ G ---H ---I---J
+ |_M |_O
+
+Then the sequence will be
++: G M H I O J A B K N L C D E F
+-: F E D C L N K B A J O I H M G
+*/
void make_list(struct active_list *head) {
struct active_test *A = active_test_new("A");
struct active_test *B = active_test_new("B");
active_test_add_depend(L, N);
}
+int active_test_compare(const void *a, const void *b) {
+ struct active_list *first = (struct active_list *)a;
+ struct active_list *second = (struct active_list *)b;
+ return strcmp(list_entry(first, struct active_test, list),
+ list_entry(second, struct active_test, list));
+}
+
+void show_list(struct active_list *head) {
+ struct active_list *ptr;
+ struct active_test *test;
+ for(ptr = active_list_next(head, NULL); ptr ;ptr = active_list_next(head, ptr)) {
+ test = list_entry(ptr, struct active_test, list);
+ printf ("%s ",test->str);
+ }
+ printf("\n");
+}
+
int main (void) {
struct active_list head;
struct active_list *ptr;
active_list_init(&head);
make_list(&head);
- for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) {
+ printf("pos order: ");
+ show_list(&head);
+/* for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) {
test = list_entry(ptr, struct active_test, list);
printf ("%s ",test->str);
- }
- printf("\n");
- for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) {
+ }*/
+ printf("neg order: ");
+ for(ptr = active_list_prev(&head, &head); ptr ;ptr = active_list_prev(&head, ptr)) {
test = list_entry(ptr, struct active_test, list);
printf ("%s ",test->str);
}
- printf("\n");
- for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) {
+ printf("\npos order after sort: ");
+ active_list_sort(&head, &active_test_compare);
+ show_list(&head);
+
+ printf("after clear: ");
+ active_list_clear(&head);
+ for(ptr = active_list_next(&head, NULL); ptr ;ptr = active_list_next(&head, ptr)) {
test = list_entry(ptr, struct active_test, list);
printf ("%s ",test->str);
}