X-Git-Url: http://git.tdb.fi/?p=libs%2Fdatafile.git;a=blobdiff_plain;f=source%2Fbinaryparser.cpp;h=ed1d71c8b197db64366e5e858b35ff032bc9b8df;hp=b55c7af3e1a8c76bc8f6c2c0855a4cea6fea7e17;hb=cbd0ddd6ee033e46646bfb85d19232c816ea1eda;hpb=08576b49c8bfb6cd841724dc5124d40af9475eb8 diff --git a/source/binaryparser.cpp b/source/binaryparser.cpp index b55c7af..ed1d71c 100644 --- a/source/binaryparser.cpp +++ b/source/binaryparser.cpp @@ -1,7 +1,7 @@ /* $Id$ This file is part of libmspdatafile -Copyright © 2007 Mikko Rasa, Mikkosoft Productions +Copyright © 2007-2008 Mikko Rasa, Mikkosoft Productions Distributed under the LGPL */ @@ -19,32 +19,32 @@ BinaryParser::BinaryParser(Input &i, const string &s): ParserMode(i, s), first(true) { - dict[1]=DictEntry("__st", "iss"); - dict[2]=DictEntry("__enum", "is"); + dict[1] = DictEntry("__kwd", "iss"); + dict[2] = DictEntry("__str", "is"); } Statement BinaryParser::parse() { while(1) { - Statement st=parse_statement(); - if(st.keyword=="__st") + Statement st = parse_statement(); + if(st.keyword=="__kwd") { if(st.args.size()!=3) - throw TypeError(src+": Keyword definition must have three arguments"); + throw_at(TypeError("Keyword definition must have three arguments"), src); - const unsigned id=st.args[0].get(); - const string &kw=st.args[1].get(); - const string &args=st.args[2].get(); - dict[id]=DictEntry(kw, args); + const unsigned id = st.args[0].get(); + const string &kw = st.args[1].get(); + const string &args = st.args[2].get(); + dict[id] = DictEntry(kw, args); } - else if(st.keyword=="__enum") + else if(st.keyword=="__str") { if(st.args.size()!=2) - throw TypeError(src+": Enum definition must have three arguments"); + throw_at(TypeError("String definition must have two arguments"), src); - const unsigned id=st.args[0].get(); - enums[id]=st.args[1].get(); + const unsigned id = st.args[0].get(); + strings[id] = st.args[1].get(); } else return st; @@ -55,22 +55,22 @@ Statement BinaryParser::parse_statement() { while(first && in.peek()=='\n') in.get(); - first=false; + first = false; - unsigned id=parse_int(); + unsigned id = parse_int(); if(!in) return Statement(); - Dictionary::const_iterator i=dict.find(id); + Dictionary::const_iterator i = dict.find(id); if(i==dict.end()) - throw ParseError(format("%s: Unknown statement ID %d", src, id), src, 0); - const DictEntry &de=i->second; + throw_at(KeyError("Unknown statement ID", lexical_cast(id)), src); + const DictEntry &de = i->second; Statement result; - result.keyword=de.keyword; - result.source=src; + result.keyword = de.keyword; + result.source = src; - for(unsigned j=0; j=0) + { + string result; + result.reserve(len); + for(int i = 0; isecond; }