Add queue_append()

This commit is contained in:
Tony Garnock-Jones 2011-01-01 21:11:45 -05:00
parent 35f42c110a
commit 6c9c026a20
2 changed files with 21 additions and 0 deletions

16
dataq.c
View File

@ -1,6 +1,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <assert.h>
#include "dataq.h"
@ -30,3 +31,18 @@ void *dequeue(queue_t *q) {
return x;
}
}
void queue_append(queue_t *q1, queue_t *q2) {
assert(q1->link_offset == q2->link_offset);
if (q2->head != NULL) {
if (q1->head != NULL) {
QLINK(q1, q1->tail) = q2->head;
} else {
q1->head = q2->head;
}
q1->tail = q2->tail;
q2->head = NULL;
q2->tail = NULL;
}
}

View File

@ -8,7 +8,12 @@ typedef struct queue_t_ {
void *tail;
} queue_t;
#define EMPTY_QUEUE(element_t, link_field_name) \
((queue_t) { offsetof(element_t, link_field_name), 0, NULL, NULL })
extern void enqueue(queue_t *q, void *x);
extern void *dequeue(queue_t *q);
extern void queue_append(queue_t *q1, queue_t *q2);
#endif