]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/binaryparser.cpp
Use negative integers for built-in statements for better extensibility
[libs/datafile.git] / source / binaryparser.cpp
index 550319f46d0a7af21bd939b477adaac1047101c8..81a86ea9a3b66b7ae9c9a6ba0a3dfff4f134ff17 100644 (file)
@@ -24,8 +24,8 @@ BinaryParser::BinaryParser(Input &i, const string &s):
        ParserMode(i, s),
        first(true)
 {
-       dict[1] = DictEntry("__kwd", "iss");
-       dict[2] = DictEntry("__str", "is");
+       dict[-1] = DictEntry("__kwd", "iss");
+       dict[-2] = DictEntry("__str", "is");
 }
 
 Statement BinaryParser::parse()
@@ -38,7 +38,7 @@ Statement BinaryParser::parse()
                        if(st.args.size()!=3)
                                throw bad_definition("__kwd");
 
-                       const unsigned id = st.args[0].get<unsigned>();
+                       const int id = st.args[0].get<unsigned>();
                        const string &kw = st.args[1].get<const string &>();
                        const string &args = st.args[2].get<const string &>();
                        dict[id] = DictEntry(kw, args);
@@ -62,7 +62,7 @@ Statement BinaryParser::parse_statement()
                in.get();
        first = false;
 
-       unsigned id = parse_int();
+       int id = parse_int();
        if(!in)
                return Statement();
 
@@ -89,7 +89,7 @@ Statement BinaryParser::parse_statement()
                        result.args.push_back(parse_bool());
                        break;
                case SymbolType::signature:
-                       result.args.push_back(Symbol(parse_enum()));
+                       result.args.push_back(parse_symbol());
                        break;
                }
        }
@@ -103,9 +103,9 @@ Statement BinaryParser::parse_statement()
        return result;
 }
 
-long long BinaryParser::parse_int()
+IntType::Store BinaryParser::parse_int()
 {
-       long long result = 0;
+       IntType::Store result = 0;
        unsigned bits = 0;
 
        while(in)
@@ -119,13 +119,13 @@ long long BinaryParser::parse_int()
                        break;
        }
 
-       const long long mask = 1LL<<(bits-1);
+       const IntType::Store mask = 1LL<<(bits-1);
        result = (result^mask)-mask;
 
        return result;
 }
 
-float BinaryParser::parse_float()
+FloatType::Store BinaryParser::parse_float()
 {
        union
        {
@@ -144,12 +144,12 @@ float BinaryParser::parse_float()
        return f;
 }
 
-bool BinaryParser::parse_bool()
+BoolType::Store BinaryParser::parse_bool()
 {
        return in.get();
 }
 
-string BinaryParser::parse_string()
+StringType::Store BinaryParser::parse_string()
 {
        int len = parse_int();
        if(len>=0)
@@ -164,7 +164,7 @@ string BinaryParser::parse_string()
                return get_item(strings, -len);
 }
 
-string BinaryParser::parse_enum()
+SymbolType::Store BinaryParser::parse_symbol()
 {
        return get_item(strings, parse_int());
 }