LoopQueue.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*********************************************************************
  2. File Name : LoopQueue.c
  3. Description : 循环队列
  4. 此循环队列元素为 unsigned char类型。
  5. *********************************************************************/
  6. #include "LoopQueue.h"
  7. #include "string.h"
  8. /*********************************************************************
  9. *UCQueueInit
  10. 初始化UCQueue队列
  11. **********************************************************************/
  12. void UCQueueInit(UCQueue *queue,unsigned char *pBuf, unsigned short BufLen)
  13. {
  14. queue->buf=pBuf;
  15. queue->size=BufLen;
  16. queue->in=0;
  17. queue->out=0;
  18. }
  19. /*********************************************************************
  20. *UCQueueOut
  21. 出队列
  22. 返回-1标识队列已空,返回0~255为出队列元素值
  23. **********************************************************************/
  24. int UCQueueOut(UCQueue *queue)
  25. {
  26. unsigned char data;
  27. if(queue->in==queue->out)return -1;
  28. data=queue->buf[queue->out];
  29. if(++queue->out>=queue->size)queue->out=0;
  30. return (int)data;
  31. }
  32. /*********************************************************************
  33. *UCQueueIn
  34. 入队列
  35. 返回-1标识队列已满,返回0入成功
  36. **********************************************************************/
  37. int UCQueueIn(UCQueue *queue,unsigned char data)
  38. {
  39. unsigned short out=queue->out;
  40. unsigned short in=queue->in;
  41. if(++in>=queue->size)in=0;
  42. if(in==out)return -1;
  43. queue->buf[queue->in]=data;
  44. queue->in=in;
  45. return 0;
  46. }
  47. /*********************************************************************
  48. *USQueueInit
  49. 初始化USQueue队列
  50. **********************************************************************/
  51. void USQueueInit(USQueue *queue,unsigned short *pBuf, unsigned short BufLen)
  52. {
  53. queue->buf=pBuf;
  54. queue->size=BufLen;
  55. queue->in=0;
  56. queue->out=0;
  57. }
  58. /*********************************************************************
  59. *USQueueOut
  60. 出队列
  61. 返回-1标识队列已空,返回0~65535为出队列元素值
  62. **********************************************************************/
  63. int USQueueOut(USQueue *queue)
  64. {
  65. unsigned short data;
  66. if(queue->in==queue->out)return -1;
  67. data=queue->buf[queue->out];
  68. if(++queue->out>=queue->size)queue->out=0;
  69. return (int)data;
  70. }
  71. /*********************************************************************
  72. *USQueueIn
  73. 入队列
  74. 返回-1标识队列已满,返回0入成功
  75. **********************************************************************/
  76. int USQueueIn(USQueue *queue,unsigned short data)
  77. {
  78. unsigned short out=queue->out;
  79. unsigned short in=queue->in;
  80. if(++in>=queue->size)in=0;
  81. if(in==out)return -1;
  82. queue->buf[queue->in]=data;
  83. queue->in=in;
  84. return 0;
  85. }
  86. /********************************FILE END*****************************/