使用libuv裡的Queue儲存資料

正如Linux kernel裡有rbtree、UNIX系列有sys/queue.h,libuv裡也有queue作為資料結構

相較於sys/queue而言更加簡潔易用,也沒有license問題,作為list or queue(可以抄來用)的終極方案當仁不讓

#include <stdio.h>
#include <stdlib.h>

#include "queue.h"

typedef struct data_s {
    char msg[256];
    QUEUE queue;
} data_t;

int main()
{
    QUEUE head;
    QUEUE_INIT(&head);

    for(int i = 0; i < 5; ++i) {
        data_t *node = calloc(1, sizeof(data_t));
        sprintf(node->msg, "%d", i+10000);
        QUEUE_INSERT_HEAD(&head, &node->queue); // or INSERT_TAIL
    }

    QUEUE *it;
    QUEUE_FOREACH(it, &head) {
        data_t *node = QUEUE_DATA(it, data_t, queue);
        printf("%s\n", node->msg);
    }

    puts("=======");

    QUEUE_REMOVE(QUEUE_HEAD(&head));

    QUEUE_FOREACH(it, &head) {
        data_t *node = QUEUE_DATA(it, data_t, queue);
        printf("%s\n", node->msg);
    }

    return 0;
}