sys_queue.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include <string.h>
  2. #include "sys_queue.h"
  3. void queue_init(queue_list_t* queue) {
  4. queue->front = -1;
  5. queue->rear = -1;
  6. queue->size = 0;
  7. }
  8. bool queue_full(queue_list_t* queue)
  9. {
  10. return (queue->size == QUEUE_MAX_DATA_NUM);
  11. }
  12. bool queue_empty(queue_list_t* queue)
  13. {
  14. return (queue->size == 0);
  15. }
  16. void queue_in(queue_list_t* queue, void* item, int length)
  17. {
  18. if (queue_full(queue))
  19. {
  20. return;
  21. }
  22. length = length > QUEUE_MAX_DATA_LEN ? QUEUE_MAX_DATA_LEN : length;
  23. queue->rear++;
  24. queue->rear %= QUEUE_MAX_DATA_NUM;
  25. queue->size++;
  26. memset(&queue->data[queue->rear], 0, sizeof(queue_element_t));
  27. memcpy(queue->data[queue->rear].cmd, item, length);
  28. queue->data[queue->rear].length = length;
  29. }
  30. int queue_out(queue_list_t* queue, void* item)
  31. {
  32. if (queue_empty(queue))
  33. {
  34. return 0;
  35. }
  36. queue->front++;
  37. queue->front %= QUEUE_MAX_DATA_NUM;
  38. queue->size--;
  39. memcpy(item, queue->data[queue->front].cmd, queue->data[queue->front].length);
  40. return queue->data[queue->front].length;
  41. }
  42. int queue_size(queue_list_t* queue)
  43. {
  44. return queue->size;
  45. }