parser-reader.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifndef AFUN_PARSER_READER_H
  2. #define AFUN_PARSER_READER_H
  3. #include "aFuntool.h"
  4. #include "aFunParserExport.h"
  5. namespace aFunparser {
  6. class AFUN_PARSER_EXPORT Reader {
  7. public:
  8. typedef enum ReadMode {
  9. read_mode_normal = 0,
  10. read_mode_finished = 1,
  11. read_mode_error = 2,
  12. } ReadMode;
  13. AFUN_STATIC const size_t DEFAULT_BUF_SIZE = 1024;
  14. AFUN_STATIC const size_t NEW_BUF_SIZE = 512;
  15. AFUN_INLINE explicit Reader(aFuntool::FilePath path_, aFuntool::FileLine line_ = 1);
  16. Reader(const Reader &) = delete;
  17. virtual ~Reader();
  18. Reader &operator=(const Reader &) = delete;
  19. virtual size_t readText(char *dest, size_t len, ReadMode &mode) = 0;
  20. [[nodiscard]] AFUN_INLINE size_t countRead() const;
  21. [[nodiscard]] AFUN_INLINE bool isEnd() const;
  22. [[nodiscard]] AFUN_INLINE bool isError() const;
  23. [[nodiscard]] AFUN_INLINE aFuntool::FileLine getFileLine() const;
  24. [[nodiscard]] AFUN_INLINE const aFuntool::FilePath &getFilePath() const;
  25. char *readWord(size_t del_index);
  26. void readFirstWord();
  27. char getChar();
  28. private:
  29. char *buf;
  30. size_t buf_size; // buf的长度-1
  31. char *read;
  32. bool read_end;
  33. bool read_error;
  34. aFuntool::FileLine line;
  35. aFuntool::FilePath path;
  36. };
  37. }
  38. #include "parser-reader.inline.h"
  39. #endif //AFUN_PARSER_READER_H