]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/statement.h
Cosmetic changes
[libs/datafile.git] / source / statement.h
index 3c843bfeb0c74d06093f7c3051bb8ff44165bd37..a580f379e47eb5130aa6379aa03d301433ce614b 100644 (file)
@@ -1,35 +1,68 @@
-/*
-This file is part of libmspparser
-Copyright © 2006  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#ifndef MSP_PARSER_STATEMENT_H_
-#define MSP_PARSER_STATEMENT_H_
+#ifndef MSP_DATAFILE_STATEMENT_H_
+#define MSP_DATAFILE_STATEMENT_H_
 
 #include <list>
-#include <sstream>
-#include <vector>
 #include "value.h"
 
 namespace Msp {
-namespace Parser {
+namespace DataFile {
 
-class Statement
+struct Token;
+
+struct Statement
 {
-public:
+       typedef std::vector<Value> Arguments;
+
        std::string keyword;
-       ValueArray  args;
-       bool        valid;
+       Arguments args;
+       bool valid = false;
+       bool control = false;
        std::string source;
-       unsigned    line;
+       unsigned line = 0;
        std::list<Statement> sub;
 
-       Statement(): valid(false), line(0) { }
-       std::string get_location() const
-       { std::ostringstream ss; ss<<source<<':'<<line; return ss.str(); }
+       Statement() = default;
+       Statement(const std::string &);
+       std::string get_location() const;
+       std::string get_signature() const;
+       
+       template<typename T>
+       Statement &append(const T &v)
+       {
+               args.push_back(v);
+               return *this;
+       }
+
+       Statement &append_from_token(const Token &);
+
+       template<typename T>
+       Statement &operator,(const T &v)
+       { return append(v); }
+};
+
+struct StatementKey
+{
+       std::string keyword;
+       std::string signature;
+
+       StatementKey() = default;
+       StatementKey(const std::string &k, const std::string &s): keyword(k), signature(s) { }
+
+       bool operator<(const StatementKey &o) const
+       { return keyword<o.keyword || (keyword==o.keyword && signature<o.signature); }
+};
+
+struct StatementInfo
+{
+       StatementKey key;
+       std::size_t args_size = 0;
+       std::vector<std::size_t> arg_offsets;
+
+       StatementInfo() = default;
+       StatementInfo(const std::string &, const std::string &);
 };
 
-} // namespace Parser
+} // namespace DataFile
 } // namespace Msp
 
 #endif