]> git.localhorst.tv Git - blank.git/commitdiff
fix number as bool in TokenStreamReader
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Fri, 11 Nov 2016 10:04:10 +0000 (11:04 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Fri, 11 Nov 2016 10:04:10 +0000 (11:04 +0100)
src/io/TokenStreamReader.hpp
src/io/token.cpp

index c702703f6915c3e201bf71f759afb5b25794e966..7b5a8ff74da6aeb54ceefe9a139b09062df2fd63 100644 (file)
@@ -39,15 +39,23 @@ 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
+
        bool GetBool();
+       bool AsBool() const;
        float GetFloat();
+       float AsFloat() const;
        int GetInt();
+       int AsInt() const;
        unsigned long GetULong();
+       unsigned long AsULong() const;
 
 private:
        void SkipComments();
 
-       void Assert(Token::Type);
+       void Assert(Token::Type) const;
        Token::Type GetType() const noexcept;
        const std::string &GetValue() const noexcept;
 
index 588c125674b870d126e29147e16402994757a611..a2ad44c918f0a834a409aa94fc36f4c3877eaabe 100644 (file)
@@ -286,7 +286,7 @@ const Token &TokenStreamReader::Peek() {
 }
 
 
-void TokenStreamReader::Assert(Token::Type t) {
+void TokenStreamReader::Assert(Token::Type t) const {
        if (GetType() != t) {
                stringstream s;
                s << "unexpected token in input stream: expected " << t << ", but got " << in.Current();
@@ -412,9 +412,13 @@ void TokenStreamReader::ReadQuat(glm::quat &q) {
 
 bool TokenStreamReader::GetBool() {
        Next();
+       return AsBool();
+}
+
+bool TokenStreamReader::AsBool() const {
        switch (GetType()) {
                case Token::NUMBER:
-                       return GetInt() != 0;
+                       return AsInt() != 0;
                case Token::IDENTIFIER:
                case Token::STRING:
                        if (GetValue() == "true" || GetValue() == "yes" || GetValue() == "on") {
@@ -435,18 +439,30 @@ bool TokenStreamReader::GetBool() {
 
 float TokenStreamReader::GetFloat() {
        Next();
+       return AsFloat();
+}
+
+float TokenStreamReader::AsFloat() const {
        Assert(Token::NUMBER);
        return stof(GetValue());
 }
 
 int TokenStreamReader::GetInt() {
        Next();
+       return AsInt();
+}
+
+int TokenStreamReader::AsInt() const {
        Assert(Token::NUMBER);
        return stoi(GetValue());
 }
 
 unsigned long TokenStreamReader::GetULong() {
        Next();
+       return AsULong();
+}
+
+unsigned long TokenStreamReader::AsULong() const {
        Assert(Token::NUMBER);
        return stoul(GetValue());
 }