]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/binarywriter.cpp
Fix binary format
[libs/datafile.git] / source / binarywriter.cpp
index 95526bbae84666b6b02997ec68c724a1a357e6d8..75cdded3c4de0bb9ce8f6a776be3a13c36aa48c5 100644 (file)
@@ -19,7 +19,7 @@ BinaryWriter::BinaryWriter(ostream &o):
        next_enum_id(1)
 {
        dict[DictEntry("__st", "iss")]=1;
-       dict[DictEntry("__enum", "is")]=1;
+       dict[DictEntry("__enum", "is")]=2;
 }
 
 void BinaryWriter::write(const Statement &st)
@@ -78,7 +78,7 @@ void BinaryWriter::collect_keywords(const Statement &st)
                kst.args.push_back(de.args);
                write_(kst);
 
-               dict.insert(Dictionary::value_type(de, next_st_id++)).first;
+               dict[de]=next_st_id++;
        }
 
        for(ValueArray::const_iterator i=st.args.begin(); i!=st.args.end(); ++i)
@@ -99,9 +99,14 @@ void BinaryWriter::collect_keywords(const Statement &st)
 
 void BinaryWriter::write_int(long long n)
 {
-       unsigned i=1;
-       for(; n>>(i*7); ++i);
-       for(; i--;)
+       unsigned i=sizeof(long long)-1;
+
+       if(n>=0)
+               for(; (i>0 && (n>>(i*7-1))==0); --i);
+       else
+               for(; (i>0 && (n>>(i*7-1))==-1); --i);
+
+       for(++i; i--;)
                out.put(n>>(i*7) & 0x7F | (i?0x80:0));
 }