]> git.localhorst.tv Git - blank.git/blob - src/io/TokenStreamReader.hpp
don't fix collisions in RK4 substeps
[blank.git] / src / io / TokenStreamReader.hpp
1 #ifndef BLANK_IO_TOKENSTREAMREADER_HPP_
2 #define BLANK_IO_TOKENSTREAMREADER_HPP_
3
4 #include "Token.hpp"
5 #include "Tokenizer.hpp"
6
7 #include <iosfwd>
8 #include <string>
9 #include <glm/glm.hpp>
10
11
12 namespace blank {
13
14 class TokenStreamReader {
15
16 public:
17         TokenStreamReader(std::istream &);
18
19         bool HasMore();
20         const Token &Next();
21         const Token &Peek();
22
23         void Skip(Token::Type);
24
25         void ReadBoolean(bool &);
26         void ReadIdentifier(std::string &);
27         void ReadNumber(float &);
28         void ReadNumber(int &);
29         void ReadNumber(unsigned long &);
30         void ReadString(std::string &);
31
32         void ReadVec(glm::vec2 &);
33         void ReadVec(glm::vec3 &);
34         void ReadVec(glm::vec4 &);
35
36         void ReadVec(glm::ivec2 &);
37         void ReadVec(glm::ivec3 &);
38         void ReadVec(glm::ivec4 &);
39
40         void ReadQuat(glm::quat &);
41
42         bool GetBool();
43         float GetFloat();
44         int GetInt();
45         unsigned long GetULong();
46
47 private:
48         void SkipComments();
49
50         void Assert(Token::Type);
51         Token::Type GetType() const noexcept;
52         const std::string &GetValue() const noexcept;
53
54         Tokenizer in;
55         bool cached;
56
57 };
58
59 }
60
61 #endif