#include #include #include "utlist.h" #include "netq.h" void dump_queue(struct netq_t *queue) { struct netq_t *p; int i = 0; if (!queue) { printf("(null)\n"); } else { LL_FOREACH(queue, p) { printf("node #%d, timeout: %d\n", i++, p->t); } } } int main(int argc, char **argv) { struct netq_t *nq = NULL, *node; int i; clock_time_t timestamps[] = { 300, 100, 200, 400, 500 }; for (i = 0; i < sizeof(timestamps)/sizeof(clock_time_t); i++) { node = netq_node_new(0); if (!node) { fprintf(stderr, "E: cannot create node #%d\n", i); exit(EXIT_FAILURE); } node->t = timestamps[i]; if (!netq_insert_node(&nq, node)) { fprintf(stderr, "E: cannot add node to nodelist #%d\n", i); exit(EXIT_FAILURE); } } printf("------------------------------------------------------------------------\n"); printf("initial queue:\n"); dump_queue(nq); printf("------------------------------------------------------------------------\n"); printf("pop first element:\n"); node = netq_pop_first(&nq); assert(node); printf("first node's timeout is %d\n", node->t); dump_queue(nq); netq_node_free(node); printf("------------------------------------------------------------------------\n"); printf("queue head:\n"); node = netq_head(&nq); printf("head's timeout is %d\n", node->t); dump_queue(nq); printf("------------------------------------------------------------------------\n"); printf("next timeout:\n"); node = netq_next(node); printf("next node's timeout is %d\n", node->t); printf("------------------------------------------------------------------------\n"); printf("remove next:\n"); netq_remove(&nq, node); dump_queue(nq); netq_node_free(node); printf("------------------------------------------------------------------------\n"); printf("insert new item (timeout 50):\n"); node = netq_node_new(0); assert(node); node->t = 50; netq_insert_node(&nq, node); dump_queue(nq); printf("------------------------------------------------------------------------\n"); printf("insert new item (timeout 350):\n"); node = netq_node_new(0); assert(node); node->t = 350; netq_insert_node(&nq, node); dump_queue(nq); printf("------------------------------------------------------------------------\n"); printf("insert new item (timeout 1000):\n"); node = netq_node_new(0); assert(node); node->t = 1000; netq_insert_node(&nq, node); dump_queue(nq); printf("------------------------------------------------------------------------\n"); printf("remove all:\n"); netq_delete_all(&nq); dump_queue(nq); printf("------------------------------------------------------------------------\n"); printf("pop first element of empty queue:\n"); node = netq_pop_first(&nq); assert(node == NULL); dump_queue(nq); return 0; }