Add queue_append()
This commit is contained in:
parent
35f42c110a
commit
6c9c026a20
16
dataq.c
16
dataq.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
5
dataq.h
5
dataq.h
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue