#include "listpop.h" #include #include "../lib/kernel/list.h" #include "../threads/malloc.h" static void populate(struct list* l, int* a, int n); static bool compare_items(const struct list_elem * a, const struct list_elem * b, void * aux); static void print_sorted(struct list* l); static void free_populated(struct list* l); struct item { struct list_elem elem; int priority; }; void populate(struct list* l, int* a, int n) { int i; for (i = 0; i < n; i++) { struct item* it = malloc(sizeof(struct item)); it->priority = a[i]; list_push_back(l, &(it->elem)); } } bool compare_items(const struct list_elem * a, const struct list_elem * b, void * aux) { struct item * ia = list_entry(a, struct item, elem); struct item * ib = list_entry(b, struct item, elem); return (ia->priority < ib->priority); } void print_sorted(struct list* l) { list_sort(l, compare_items, NULL); struct list_elem* e; for (e = list_begin(l); e != list_end(l); e = list_next(e)) { struct item* i = list_entry(e, struct item, elem); printf("%d\n", i->priority); } } void free_populated(struct list* l) { struct list_elem* e; for (e = list_begin(l); e != list_end(l);) { struct item* i = list_entry(e, struct item, elem); e = list_next(e); free(i); } } void test_list(void) { struct list l; list_init(&l); populate(&l, ITEMARRAY, ITEMCOUNT); print_sorted(&l); free_populated(&l); }