]> git.localhorst.tv Git - blank.git/blobdiff - src/io/TokenStreamReader.hpp
impersonate command
[blank.git] / src / io / TokenStreamReader.hpp
index d4356aa3d91d0e7129ab8ea3353f545f1544d004..ea3a6ccbca1af7d5463d283e8b65329b5da6e889 100644 (file)
@@ -3,10 +3,10 @@
 
 #include "Token.hpp"
 #include "Tokenizer.hpp"
+#include "../graphics/glm.hpp"
 
 #include <iosfwd>
 #include <string>
-#include <glm/glm.hpp>
 
 
 namespace blank {
@@ -14,7 +14,7 @@ namespace blank {
 class TokenStreamReader {
 
 public:
-       TokenStreamReader(std::istream &);
+       explicit TokenStreamReader(std::istream &);
 
        bool HasMore();
        const Token &Next();
@@ -28,6 +28,9 @@ public:
        void ReadNumber(int &);
        void ReadNumber(unsigned long &);
        void ReadString(std::string &);
+       // like ReadString, but does not require the value to be
+       // written as a string literal in source
+       void ReadRelaxedString(std::string &);
 
        void ReadVec(glm::vec2 &);
        void ReadVec(glm::vec3 &);
@@ -39,13 +42,26 @@ public:
 
        void ReadQuat(glm::quat &);
 
+       // the Get* functions advance to the next token
+       // the As* functions try to cast the current token
+       // if the value could not be converted, a std::runtime_error is thrown
+       // conversion to string is always possible
+
        bool GetBool();
+       bool AsBool() const;
        float GetFloat();
+       float AsFloat() const;
        int GetInt();
+       int AsInt() const;
        unsigned long GetULong();
+       unsigned long AsULong() const;
+       const std::string &GetString();
+       const std::string &AsString() const;
 
 private:
-       void Assert(Token::Type);
+       void SkipComments();
+
+       void Assert(Token::Type) const;
        Token::Type GetType() const noexcept;
        const std::string &GetValue() const noexcept;