X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbinarywriter.cpp;h=c1e53fb5f23e7ca3622697c4e5e829383aeafd2f;hb=5fd2c13c3036ea6a767802fdc9a2ab809ef8ec17;hp=9651609164ce4d5a5679928ba7e4f1b1b2947337;hpb=7df5e45c7f414f6a07681dc4ec2abb63b091a309;p=libs%2Fdatafile.git diff --git a/source/binarywriter.cpp b/source/binarywriter.cpp index 9651609..c1e53fb 100644 --- a/source/binarywriter.cpp +++ b/source/binarywriter.cpp @@ -1,3 +1,4 @@ +#include #include "binarywriter.h" #include "statement.h" @@ -23,11 +24,9 @@ void BinaryWriter::write(const Statement &st) void BinaryWriter::write_(const Statement &st) { - Dictionary::iterator i = dict.find(DictEntry(st.keyword, st.get_signature())); - if(i==dict.end()) - throw InvalidParameterValue("Unknown statement"); + unsigned id = get_item(dict, DictEntry(st.keyword, st.get_signature())); - write_int(i->second); + write_int(id); for(Statement::Arguments::const_iterator j = st.args.begin(); j!=st.args.end(); ++j) switch(j->get_signature()) { @@ -35,7 +34,7 @@ void BinaryWriter::write_(const Statement &st) case StringType::signature: write_string(j->get()); break; case BoolType::signature: write_int (j->get()); break; case FloatType::signature: write_float (j->get()); break; - case SymbolType::signature: write_enum (j->get()); break; + case SymbolType::signature: write_symbol(j->get()); break; } write_int(st.sub.size()); @@ -90,9 +89,9 @@ void BinaryWriter::collect_keywords(const Statement &st) 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) ; @@ -103,7 +102,7 @@ void BinaryWriter::write_int(long long n) 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()) @@ -115,7 +114,7 @@ void BinaryWriter::write_string(const string &s) } } -void BinaryWriter::write_float(float f) +void BinaryWriter::write_float(FloatType::Store f) { union { @@ -133,12 +132,9 @@ void BinaryWriter::write_float(float f) #endif } -void BinaryWriter::write_enum(const string &e) +void BinaryWriter::write_symbol(const SymbolType::Store &s) { - StringMap::const_iterator i = strings.find(e); - if(i==strings.end()) - throw InvalidParameterValue("Unknown enum"); - write_int(i->second); + write_int(get_item(strings, s.name)); } } // namespace DataFile