add queue_free and return a copy of the data to the user
This commit is contained in:
parent
dc368f088a
commit
a877419d69
3 changed files with 14 additions and 1 deletions
|
@ -8,6 +8,8 @@ typedef struct Queue Queue;
|
||||||
|
|
||||||
Queue *queue_new(size_t size, size_t element_size);
|
Queue *queue_new(size_t size, size_t element_size);
|
||||||
|
|
||||||
|
void queue_free(Queue *queue);
|
||||||
|
|
||||||
void *queue_read(Queue *queue);
|
void *queue_read(Queue *queue);
|
||||||
|
|
||||||
bool queue_write(Queue *queue, void *value);
|
bool queue_write(Queue *queue, void *value);
|
||||||
|
|
|
@ -28,7 +28,10 @@ int main(void) {
|
||||||
|
|
||||||
long val = *(long*)val_ptr;
|
long val = *(long*)val_ptr;
|
||||||
printf("%zu: read %ld from fifo\n", i, val);
|
printf("%zu: read %ld from fifo\n", i, val);
|
||||||
|
free(val_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
queue_free(q);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,12 +22,20 @@ Queue *queue_new(size_t size, size_t element_size) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void queue_free(Queue *q) {
|
||||||
|
for (size_t i = q->front; i < q->back; ++i) {
|
||||||
|
free(q->data[i]);
|
||||||
|
}
|
||||||
|
free(q->data);
|
||||||
|
free(q);
|
||||||
|
}
|
||||||
|
|
||||||
void *queue_read(Queue *q) {
|
void *queue_read(Queue *q) {
|
||||||
if (q->front == q->back) {
|
if (q->front == q->back) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* ret = q->data[q->front];
|
void* ret = memcpy(malloc(q->element_size), q->data[q->front], q->element_size);
|
||||||
q->data[q->front] = NULL;
|
q->data[q->front] = NULL;
|
||||||
|
|
||||||
q->front = (q->front + 1) % q->size;
|
q->front = (q->front + 1) % q->size;
|
||||||
|
|
Loading…
Reference in a new issue