X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbinarywriter.cpp;h=dd63d3dcefa03e32efd83af1f30b096e9ba54718;hb=08576b49c8bfb6cd841724dc5124d40af9475eb8;hp=95526bbae84666b6b02997ec68c724a1a357e6d8;hpb=505042fcda16151f5ace243c243d34af3efcf677;p=libs%2Fdatafile.git diff --git a/source/binarywriter.cpp b/source/binarywriter.cpp index 95526bb..dd63d3d 100644 --- a/source/binarywriter.cpp +++ b/source/binarywriter.cpp @@ -13,13 +13,13 @@ using namespace std; namespace Msp { namespace DataFile { -BinaryWriter::BinaryWriter(ostream &o): +BinaryWriter::BinaryWriter(IO::Base &o): WriterMode(o), next_st_id(3), 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,10 +99,15 @@ void BinaryWriter::collect_keywords(const Statement &st) void BinaryWriter::write_int(long long n) { - unsigned i=1; - for(; n>>(i*7); ++i); - for(; i--;) - out.put(n>>(i*7) & 0x7F | (i?0x80:0)); + 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)); } void BinaryWriter::write_string(const string &s)