1 #include "queue.h" 2 3 void queue_init(queue_t *queue) 4 { 5 queue->head = 0; 6 queue->tail = 0; 7 queue->count = 0; 8 9 for (uint8_t i = 0; i < QUEUE_LEN; ++i) 10 { 11 queue->data[i] = 0; 12 } 13 } 14 15 void queue_enqueue(queue_t *queue, uint8_t value) 16 { 17 queue->data[queue->head] = value; 18 queue->count += ((queue->count == QUEUE_LEN) ? 0 : 1); 19 queue->head += ((queue->count == QUEUE_LEN) ? 0 : 1); 20 } 21 22 uint8_t queue_dequeue(queue_t *queue) 23 { 24 if (queue_is_empty(queue)) 25 { 26 return 0; 27 } 28 29 queue->count--; 30 return queue->data[queue->tail++]; 31 } 32 33 uint8_t queue_peek(queue_t *queue) 34 { 35 return queue->data[queue->tail]; 36 } 37 38 uint16_t queue_count(queue_t *queue) 39 { 40 return queue->count; 41 } 42 43 uint8_t queue_is_empty(queue_t *queue) 44 { 45 return (queue->count == 0); 46 }
