Branch data Line data Source code
1 : : #include "vqueue.h" 2 : : #include <stdio.h> 3 : : #include <assert.h> 4 : : #include <stdlib.h> 5 : : struct __vqueue_t 6 : : { 7 : : cmph_uint32 * values; 8 : : cmph_uint32 beg, end, capacity; 9 : : }; 10 : : 11 : 0 : vqueue_t * vqueue_new(cmph_uint32 capacity) 12 : : { 13 : 0 : size_t capacity_plus_one = capacity + 1; 14 : 0 : vqueue_t *q = (vqueue_t *)malloc(sizeof(vqueue_t)); 15 [ # # ]: 0 : assert(q); 16 : 0 : q->values = (cmph_uint32 *)calloc(capacity_plus_one, sizeof(cmph_uint32)); 17 : 0 : q->beg = q->end = 0; 18 : 0 : q->capacity = (cmph_uint32) capacity_plus_one; 19 : 0 : return q; 20 : : } 21 : : 22 : 0 : cmph_uint8 vqueue_is_empty(vqueue_t * q) 23 : : { 24 : 0 : return (cmph_uint8)(q->beg == q->end); 25 : : } 26 : : 27 : 0 : void vqueue_insert(vqueue_t * q, cmph_uint32 val) 28 : : { 29 [ # # ]: 0 : assert((q->end + 1)%q->capacity != q->beg); // Is queue full? 30 : 0 : q->end = (q->end + 1)%q->capacity; 31 : 0 : q->values[q->end] = val; 32 : 0 : } 33 : : 34 : 0 : cmph_uint32 vqueue_remove(vqueue_t * q) 35 : : { 36 [ # # ]: 0 : assert(!vqueue_is_empty(q)); // Is queue empty? 37 : 0 : q->beg = (q->beg + 1)%q->capacity; 38 : 0 : return q->values[q->beg]; 39 : : } 40 : : 41 : 0 : void vqueue_print(vqueue_t * q) 42 : : { 43 : : cmph_uint32 i; 44 [ # # ]: 0 : for (i = q->beg; i != q->end; i = (i + 1)%q->capacity) 45 : 0 : fprintf(stderr, "%u\n", q->values[(i + 1)%q->capacity]); 46 : 0 : } 47 : : 48 : 0 : void vqueue_destroy(vqueue_t *q) 49 : : { 50 : 0 : free(q->values); q->values = NULL; free(q); 51 : 0 : }