🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
BaseParser.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/StringView.hpp"
25#include <cstdio>
26#include <fstream>
27#include <vector>
28
29AST_NAMESPACE_BEGIN
30
42AST_UTIL_CAPI char* fgetlinetrim(char* buffer, int size, FILE* file);
43
44
45
50AST_UTIL_CAPI bool aIsHashCommentLine(StringView line);
51
52
53
55class AST_UTIL_API BaseParser
56{
57public:
58 BaseParser();
59
60 BaseParser(const BaseParser&) = delete;
61 BaseParser& operator=(const BaseParser&) = delete;
62
63 explicit BaseParser(StringView filepath);
65
66
67public: // 基础操作
71 void open(StringView filepath);
72
76 bool isOpen() const { return file_ != nullptr; }
77
80 void close();
81
86 void seek(std::streamoff pos, std::ios::seekdir dir);
87
91 std::streamoff tell();
92
96 bool eof() const { return feof(file_) != 0; }
97
104 size_t read(void* buffer, size_t size, size_t pos) const;
105
111 size_t read(void* buffer, size_t size) const;
112
113public:
117 StringView getLineWithNewline();
118
122 StringView getLine();
123
127 StringView getLineTrim();
128
132 StringView getLineSkipHashComment();
133
134public: // 辅助信息
138 int getLineNumber();
139
143 std::string getFilePath() const;
144
150 void setBorrowedFile(FILE* file);
151
157 void setOwnedFile(FILE* file);
158
160 FILE* getFile() const { return file_; }
161
162protected:
163 std::vector<char>& getLineBuffer() { return lineBuffer_; }
164private:
165 FILE* file_{nullptr};
166 bool fileBorrowed_{false};
167 std::vector<char> lineBuffer_{};
168};
169
170
173AST_NAMESPACE_END
解析器基类
定义 BaseParser.hpp:56
bool isOpen() const
是否打开文件
定义 BaseParser.hpp:76
bool eof() const
是否到达文件末尾
定义 BaseParser.hpp:96
FILE * getFile() const
获取当前解析器使用的文件指针
定义 BaseParser.hpp:160
bool aIsHashCommentLine(StringView line)
判断是否为#注释行
定义 BaseParser.cpp:80
char * fgetlinetrim(char *buffer, int size, FILE *file)
从文件中读取一行文本,跳过行首的空白字符,移除行尾的换行符。
定义 BaseParser.cpp:45