1 #ifndef BLANK_IO_TOKENSTREAMREADER_HPP_
2 #define BLANK_IO_TOKENSTREAMREADER_HPP_
5 #include "Tokenizer.hpp"
6 #include "../graphics/glm.hpp"
14 class TokenStreamReader {
17 explicit TokenStreamReader(std::istream &);
23 void Skip(Token::Type);
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 // like ReadString, but does not require the value to be
32 // written as a string literal in source
33 void ReadRelaxedString(std::string &);
35 void ReadVec(glm::vec2 &);
36 void ReadVec(glm::vec3 &);
37 void ReadVec(glm::vec4 &);
39 void ReadVec(glm::ivec2 &);
40 void ReadVec(glm::ivec3 &);
41 void ReadVec(glm::ivec4 &);
43 void ReadQuat(glm::quat &);
45 // the Get* functions advance to the next token
46 // the As* functions try to cast the current token
47 // if the value could not be converted, a std::runtime_error is thrown
48 // conversion to string is always possible
53 float AsFloat() const;
56 unsigned long GetULong();
57 unsigned long AsULong() const;
58 const std::string &GetString();
59 const std::string &AsString() const;
64 void Assert(Token::Type) const;
65 Token::Type GetType() const noexcept;
66 const std::string &GetValue() const noexcept;