X-Git-Url: http://git.tdb.fi/?p=libs%2Fdatafile.git;a=blobdiff_plain;f=source%2Fbinaryparser.cpp;h=214c35e70d3793437e786f90d0f99fd60a1fbd66;hp=ba6414bc77a369a7eb2d7c51e06e412aee16fb0a;hb=d84673be1c2fe8bd32ddaa7877529855cad6daa0;hpb=a02c84384a101c0dec48b6aa2dee53bac4bbd034 diff --git a/source/binaryparser.cpp b/source/binaryparser.cpp index ba6414b..214c35e 100644 --- a/source/binaryparser.cpp +++ b/source/binaryparser.cpp @@ -19,8 +19,8 @@ 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() @@ -28,7 +28,7 @@ Statement BinaryParser::parse() while(1) { Statement st=parse_statement(); - if(st.keyword=="__st") + if(st.keyword=="__kwd") { if(st.args.size()!=3) throw TypeError(src+": Keyword definition must have three arguments"); @@ -38,13 +38,13 @@ Statement BinaryParser::parse() 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 TypeError(src+": String definition must have two arguments"); const unsigned id=st.args[0].get(); - enums[id]=st.args[1].get(); + strings[id]=st.args[1].get(); } else return st; @@ -110,14 +110,14 @@ long long BinaryParser::parse_int() { int c=in.get(); - result=result<<7 | c&0x7F; + result=(result<<7) | (c&0x7F); bits+=7; if(!(c&0x80)) break; } - const long long mask=1<<(bits-1); + const long long mask=1LL<<(bits-1); result=(result^mask)-mask; return result; @@ -149,20 +149,29 @@ bool BinaryParser::parse_bool() string BinaryParser::parse_string() { - unsigned len=parse_int(); - string result; - result.reserve(len); - for(unsigned i=0; i=0) + { + string result; + result.reserve(len); + for(int i=0; isecond; }