BinaryWriter::BinaryWriter(IO::Base &o):
WriterMode(o),
- next_kwd_id(3),
+ next_kwd_id(1),
next_str_id(1)
{
- dict[DictEntry("__kwd", "iss")] = 1;
- dict[DictEntry("__str", "is")] = 2;
+ dict[DictEntry("__kwd", "iss")] = -1;
+ dict[DictEntry("__str", "is")] = -2;
}
void BinaryWriter::write(const Statement &st)
void BinaryWriter::write_(const Statement &st)
{
- unsigned id = get_item(dict, DictEntry(st.keyword, st.get_signature()));
+ int id = get_item(dict, DictEntry(st.keyword, st.get_signature()));
write_int(id);
for(Statement::Arguments::const_iterator j = st.args.begin(); j!=st.args.end(); ++j)
case StringType::signature: write_string(j->get<StringType::Store>()); break;
case BoolType::signature: write_int (j->get<BoolType::Store>()); break;
case FloatType::signature: write_float (j->get<FloatType::Store>()); break;
- case SymbolType::signature: write_enum (j->get<SymbolType::Store>()); break;
+ case SymbolType::signature: write_symbol(j->get<SymbolType::Store>()); break;
}
write_int(st.sub.size());
collect_keywords(*i);
}
-void BinaryWriter::write_int(long long n)
+void BinaryWriter::write_int(IntType::Store n)
{
- unsigned i = sizeof(long long)-1;
+ unsigned i = sizeof(IntType::Store)-1;
if(n>=0)
for(; (i>0 && (n>>(i*7-1))==0); --i) ;
out.put((n>>(i*7) & 0x7F) | (i?0x80:0));
}
-void BinaryWriter::write_string(const string &s)
+void BinaryWriter::write_string(const StringType::Store &s)
{
StringMap::const_iterator i = strings.find(s);
if(i!=strings.end())
}
}
-void BinaryWriter::write_float(float f)
+void BinaryWriter::write_float(FloatType::Store f)
{
union
{
#endif
}
-void BinaryWriter::write_enum(const string &e)
+void BinaryWriter::write_symbol(const SymbolType::Store &s)
{
- write_int(get_item(strings, e));
+ write_int(get_item(strings, s.name));
}
} // namespace DataFile