X-Git-Url: http://git.tdb.fi/?p=libs%2Fdatafile.git;a=blobdiff_plain;f=source%2Fbinarywriter.cpp;h=75cdded3c4de0bb9ce8f6a776be3a13c36aa48c5;hp=95526bbae84666b6b02997ec68c724a1a357e6d8;hb=2f79370bffe0bac865dc97c5114dc87c1936fbb4;hpb=b42b462c13b3a50c3b209bc8c34bf1fcf3a151b2 diff --git a/source/binarywriter.cpp b/source/binarywriter.cpp index 95526bb..75cdded 100644 --- a/source/binarywriter.cpp +++ b/source/binarywriter.cpp @@ -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)); }