]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/binarywriter.cpp
Use negative integers for built-in statements for better extensibility
[libs/datafile.git] / source / binarywriter.cpp
index a8306c2cfd8eb98a6d5e14aac5358c742e0d4e44..9c9c893e890354bc1198c0cfdd4603ede61b3270 100644 (file)
@@ -9,11 +9,11 @@ namespace DataFile {
 
 BinaryWriter::BinaryWriter(IO::Base &o):
        WriterMode(o),
-       next_kwd_id(3),
+       next_kwd_id(1),
        next_str_id(1)
 {
-       dict[DictEntry("__kwd", "iss")] = 1;
-       dict[DictEntry("__str", "is")] = 2;
+       dict[DictEntry("__kwd", "iss")] = -1;
+       dict[DictEntry("__str", "is")] = -2;
 }
 
 void BinaryWriter::write(const Statement &st)
@@ -24,7 +24,7 @@ void BinaryWriter::write(const Statement &st)
 
 void BinaryWriter::write_(const Statement &st)
 {
-       unsigned id = get_item(dict, DictEntry(st.keyword, st.get_signature()));
+       int id = get_item(dict, DictEntry(st.keyword, st.get_signature()));
 
        write_int(id);
        for(Statement::Arguments::const_iterator j = st.args.begin(); j!=st.args.end(); ++j)
@@ -89,9 +89,9 @@ void BinaryWriter::collect_keywords(const Statement &st)
                collect_keywords(*i);
 }
 
-void BinaryWriter::write_int(long long n)
+void BinaryWriter::write_int(IntType::Store n)
 {
-       unsigned i = sizeof(long long)-1;
+       unsigned i = sizeof(IntType::Store)-1;
 
        if(n>=0)
                for(; (i>0 && (n>>(i*7-1))==0); --i) ;
@@ -102,7 +102,7 @@ void BinaryWriter::write_int(long long n)
                out.put((n>>(i*7) & 0x7F) | (i?0x80:0));
 }
 
-void BinaryWriter::write_string(const string &s)
+void BinaryWriter::write_string(const StringType::Store &s)
 {
        StringMap::const_iterator i = strings.find(s);
        if(i!=strings.end())
@@ -114,7 +114,7 @@ void BinaryWriter::write_string(const string &s)
        }
 }
 
-void BinaryWriter::write_float(float f)
+void BinaryWriter::write_float(FloatType::Store f)
 {
        union
        {
@@ -132,7 +132,7 @@ void BinaryWriter::write_float(float f)
 #endif
 }
 
-void BinaryWriter::write_symbol(const Symbol &s)
+void BinaryWriter::write_symbol(const SymbolType::Store &s)
 {
        write_int(get_item(strings, s.name));
 }