-/* $Id$
-
-This file is part of libmspdatafile
-Copyright © 2007-2008, 2010 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
+#include <msp/core/maputils.h>
#include "binarywriter.h"
#include "statement.h"
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())
{
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());
#endif
}
-void BinaryWriter::write_enum(const string &e)
+void BinaryWriter::write_symbol(const Symbol &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