]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/binarywriter.cpp
Use the metadata for type.h in binary write/parse functions
[libs/datafile.git] / source / binarywriter.cpp
index 9651609164ce4d5a5679928ba7e4f1b1b2947337..c1e53fb5f23e7ca3622697c4e5e829383aeafd2f 100644 (file)
@@ -1,3 +1,4 @@
+#include <msp/core/maputils.h>
 #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<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());
@@ -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