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("__kw", "iss")]=1;
- dict[DictEntry("__enum", "is")]=1;
+ dict[DictEntry("__st", "iss")]=1;
+ dict[DictEntry("__enum", "is")]=2;
}
void BinaryWriter::write(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)
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)