X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbinarywriter.cpp;h=75cdded3c4de0bb9ce8f6a776be3a13c36aa48c5;hb=2f79370bffe0bac865dc97c5114dc87c1936fbb4;hp=e89def35a8eeac9dc7cab2c55202ef251e8701b8;hpb=27630d44298cb67e075c166f4421288cc8ca117e;p=libs%2Fdatafile.git diff --git a/source/binarywriter.cpp b/source/binarywriter.cpp index e89def3..75cdded 100644 --- a/source/binarywriter.cpp +++ b/source/binarywriter.cpp @@ -18,8 +18,8 @@ BinaryWriter::BinaryWriter(ostream &o): next_st_id(3), next_enum_id(1) { - dict[DictEntry("__kw", "iss")]=1; - dict[DictEntry("__enum", "is")]=1; + dict[DictEntry("__st", "iss")]=1; + dict[DictEntry("__enum", "is")]=2; } void BinaryWriter::write(const Statement &st) @@ -72,13 +72,13 @@ void BinaryWriter::collect_keywords(const Statement &st) if(!dict.count(de)) { Statement kst; - kst.keyword="__kw"; + kst.keyword="__st"; kst.args.push_back(next_st_id); kst.args.push_back(de.keyword); 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)); }