dataQueue.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /*
  2. Author: lyon
  3. Tencent QQ: 645275593
  4. */
  5. #include "dataQueue.h"
  6. #include <stdarg.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include "dataArgs.h"
  11. static uint16_t const str100p[100] = {
  12. 0x3030, 0x3130, 0x3230, 0x3330, 0x3430, 0x3530, 0x3630, 0x3730, 0x3830,
  13. 0x3930, 0x3031, 0x3131, 0x3231, 0x3331, 0x3431, 0x3531, 0x3631, 0x3731,
  14. 0x3831, 0x3931, 0x3032, 0x3132, 0x3232, 0x3332, 0x3432, 0x3532, 0x3632,
  15. 0x3732, 0x3832, 0x3932, 0x3033, 0x3133, 0x3233, 0x3333, 0x3433, 0x3533,
  16. 0x3633, 0x3733, 0x3833, 0x3933, 0x3034, 0x3134, 0x3234, 0x3334, 0x3434,
  17. 0x3534, 0x3634, 0x3734, 0x3834, 0x3934, 0x3035, 0x3135, 0x3235, 0x3335,
  18. 0x3435, 0x3535, 0x3635, 0x3735, 0x3835, 0x3935, 0x3036, 0x3136, 0x3236,
  19. 0x3336, 0x3436, 0x3536, 0x3636, 0x3736, 0x3836, 0x3936, 0x3037, 0x3137,
  20. 0x3237, 0x3337, 0x3437, 0x3537, 0x3637, 0x3737, 0x3837, 0x3937, 0x3038,
  21. 0x3138, 0x3238, 0x3338, 0x3438, 0x3538, 0x3638, 0x3738, 0x3838, 0x3938,
  22. 0x3039, 0x3139, 0x3239, 0x3339, 0x3439, 0x3539, 0x3639, 0x3739, 0x3839,
  23. 0x3939,
  24. };
  25. char* fast_itoa(char* buf, uint32_t val) {
  26. char* p = &buf[10];
  27. *p = '\0';
  28. while (val >= 100) {
  29. uint32_t const old = val;
  30. p -= 2;
  31. val /= 100;
  32. memcpy(p, &str100p[old - (val * 100)], sizeof(uint16_t));
  33. }
  34. p -= 2;
  35. memcpy(p, &str100p[val], sizeof(uint16_t));
  36. return &p[val < 10];
  37. }
  38. Queue* New_queue(void) {
  39. Args* args = New_args(NULL);
  40. args_setInt(args, "top", 0);
  41. args_setInt(args, "bottom", 0);
  42. Queue* queue = args;
  43. return queue;
  44. }
  45. int32_t queue_deinit(Queue* queue) {
  46. Args* args = queue;
  47. args_deinit(args);
  48. return 0;
  49. }
  50. int32_t queue_pushInt(Queue* queue, int val) {
  51. Args* args = queue;
  52. uint64_t top = args_getInt(args, "top");
  53. char buff[11];
  54. char* topStr = fast_itoa(buff, top);
  55. /* add top */
  56. args_setInt(args, "top", top + 1);
  57. return args_setInt(args, topStr, val);
  58. }
  59. int64_t queue_popInt(Queue* queue) {
  60. Args* args = queue;
  61. uint64_t bottom = args_getInt(args, "bottom");
  62. char buff[11];
  63. char* bottomStr = fast_itoa(buff, bottom);
  64. /* add bottom */
  65. args_setInt(args, "bottom", bottom + 1);
  66. int64_t res = args_getInt(args, bottomStr);
  67. args_removeArg(args, args_getArg(args, bottomStr));
  68. return res;
  69. }
  70. int32_t queue_pushFloat(Queue* queue, float val) {
  71. Args* args = queue;
  72. uint64_t top = args_getInt(args, "top");
  73. char buff[11];
  74. char* topStr = fast_itoa(buff, top);
  75. /* add top */
  76. args_setInt(args, "top", top + 1);
  77. return args_setFloat(args, topStr, val);
  78. }
  79. float queue_popFloat(Queue* queue) {
  80. Args* args = queue;
  81. uint64_t bottom = args_getInt(args, "bottom");
  82. char buff[11];
  83. char* bottomStr = fast_itoa(buff, bottom);
  84. /* add bottom */
  85. args_setInt(args, "bottom", bottom + 1);
  86. float res = args_getFloat(args, bottomStr);
  87. args_removeArg(args, args_getArg(args, bottomStr));
  88. return res;
  89. }
  90. int32_t queue_pushStr(Queue* queue, char* str) {
  91. Args* args = queue;
  92. uint64_t top = args_getInt(args, "top");
  93. char buff[11];
  94. /* add top */
  95. char* topStr = fast_itoa(buff, top);
  96. args_setInt(args, "top", top + 1);
  97. return args_setStr(args, topStr, str);
  98. }
  99. char* queue_popStr(Queue* queue) {
  100. Args* args = queue;
  101. uint64_t bottom = args_getInt(args, "bottom");
  102. char buff[11];
  103. /* add bottom */
  104. args_setInt(args, "bottom", bottom + 1);
  105. return args_getStr(args, fast_itoa(buff, bottom));
  106. }
  107. int32_t queue_pushArg(Queue* queue, Arg* arg) {
  108. Args* args = queue;
  109. uint64_t top = args_getInt(args, "top");
  110. /* add top */
  111. args_setInt(args, "top", top + 1);
  112. char buff[11];
  113. arg = arg_setName(arg, fast_itoa(buff, top));
  114. return args_setArg(args, arg);
  115. }
  116. Arg* queue_popArg(Queue* queue) {
  117. Args* args = queue;
  118. uint64_t bottom = args_getInt(args, "bottom");
  119. /* add bottom */
  120. args_setInt(args, "bottom", bottom + 1);
  121. char buff[11];
  122. Arg* res = args_getArg(args, fast_itoa(buff, bottom));
  123. return res;
  124. }