test_reader.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include <stdio.h>
  2. #include "aFun.h"
  3. /* 测试程序, 直接调用内部函数 */
  4. typedef struct af_Reader af_Reader;
  5. typedef size_t readerFunc(void *data, char *dest, size_t len);
  6. DEFINE_DLC_SYMBOL(readerFunc);
  7. typedef void destructReaderFunc(void *data);
  8. DEFINE_DLC_SYMBOL(destructReaderFunc);
  9. af_Reader *makeReader(DLC_SYMBOL(readerFunc) read_func, DLC_SYMBOL(destructReaderFunc) destruct_func, size_t data_size);
  10. void freeReader(af_Reader *reader);
  11. af_Reader *initReader(af_Reader *reader);
  12. void *getReaderData(af_Reader *reader);
  13. char *readWord(size_t del_index, af_Reader *reader);
  14. char getChar(af_Reader *reader);
  15. size_t readTest(int *data, char *dest, size_t len) {
  16. *data = *data + 1;
  17. if (*data == 1) {
  18. memset(dest, 's', len);
  19. return len;
  20. } else if (*data == 2) {
  21. memset(dest, 'w', len - 5);
  22. return len - 5;
  23. }
  24. return 0;
  25. }
  26. void destructTest(const int *data) {
  27. printf("destructTest data = %d\n", *data);
  28. }
  29. int main() {
  30. printf("HelloWorld\n");
  31. {
  32. DLC_SYMBOL(readerFunc) read_func = MAKE_SYMBOL(readTest, readerFunc);
  33. DLC_SYMBOL(destructReaderFunc) destruct_func = MAKE_SYMBOL(destructTest, destructReaderFunc);
  34. af_Reader *reader = makeReader(read_func, destruct_func, sizeof(int));
  35. *(int *) getReaderData(reader) = 0;
  36. initReader(reader);
  37. FREE_SYMBOL(read_func);
  38. FREE_SYMBOL(destruct_func);
  39. char ch;
  40. size_t count = 0;
  41. do {
  42. ch = getChar(reader);
  43. printf("%zu\t\tch = %c\n", count, ch);
  44. count++;
  45. } while (ch != NUL);
  46. freeReader(reader);
  47. }
  48. {
  49. DLC_SYMBOL(readerFunc) read_func = MAKE_SYMBOL(readTest, readerFunc);
  50. DLC_SYMBOL(destructReaderFunc) destruct_func = MAKE_SYMBOL(destructTest, destructReaderFunc);
  51. af_Reader *reader = makeReader(read_func, destruct_func, sizeof(int));
  52. *(int *) getReaderData(reader) = 0;
  53. initReader(reader);
  54. FREE_SYMBOL(read_func);
  55. FREE_SYMBOL(destruct_func);
  56. char ch;
  57. for (size_t i = 0; i < 1000; i++) {
  58. ch = getChar(reader);
  59. printf("%zu\t\tch = %c\n", i, ch);
  60. }
  61. char *new = readWord(100, reader); // 提取前面100个值
  62. free(new);
  63. size_t count = 0;
  64. do {
  65. ch = getChar(reader);
  66. printf("%zu\t\tch = %c\n", count, ch); // 923-s 1019-w
  67. count++;
  68. } while (ch != NUL);
  69. freeReader(reader);
  70. }
  71. return 0;
  72. }