]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/binaryparser.cpp
Cosmetic changes
[libs/datafile.git] / source / binaryparser.cpp
index 051133f79a32cecb540c021f87b6930f5e168566..11e0badaaa5c148cd37e53659a8119114fae29d9 100644 (file)
@@ -1,10 +1,10 @@
 #include <limits>
-#include <sys/param.h>
 #include <msp/core/maputils.h>
 #include <msp/strings/format.h>
 #include "argumentstore.h"
 #include "binaryparser.h"
 #include "binfloat.h"
+#include "except.h"
 #include "input.h"
 #include "loaderaction.h"
 
@@ -13,31 +13,8 @@ using namespace std;
 namespace Msp {
 namespace DataFile {
 
-class bad_definition: public runtime_error
-{
-public:
-       bad_definition(const std::string &w):
-               runtime_error(w)
-       { }
-
-       virtual ~bad_definition() throw() { }
-};
-
-class nesting_error: public logic_error
-{
-public:
-       nesting_error(const std::string &w):
-               logic_error(w)
-       { }
-
-       virtual ~nesting_error() throw() { }
-};
-
-
 BinaryParser::BinaryParser(Input &i, const string &s):
-       ParserMode(i, s),
-       float_precision(32),
-       cur_info(0)
+       ParserMode(i, s)
 {
        dict[-1] = StatementInfo("__kwd", "iss");
        dict[-2] = StatementInfo("__str", "is");
@@ -48,7 +25,10 @@ Statement BinaryParser::parse()
 {
        const StatementKey *key;
        if(cur_info)
+       {
                key = &cur_info->key;
+               cur_info = nullptr;
+       }
        else
        {
                int id = parse_int();
@@ -79,20 +59,21 @@ Statement BinaryParser::parse()
                        result.args.push_back(parse_bool());
                        break;
                case SymbolType::signature:
-                       result.args.push_back(parse_symbol());
+                       result.args.push_back(Value(parse_symbol()));
                        break;
                }
        }
 
-       if(!sub_remaining.empty())
-               --sub_remaining.back();
+       unsigned upper_nsub = (sub_remaining.empty() ? 0 : sub_remaining.back());
 
        unsigned nsub = parse_int();
        for(unsigned j = 0; j<nsub; ++j)
                result.sub.push_back(parse());
 
+       if(upper_nsub>0)
+               sub_remaining.back() = upper_nsub-1;
+
        result.valid = true;
-       cur_info = 0;
 
        return result;
 }
@@ -107,8 +88,8 @@ void BinaryParser::process_control_statement(const Statement &st)
 
                const string &kw = st.args[1].get<const string &>();
                const string &args = st.args[2].get<const string &>();
-               for(string::const_iterator i=args.begin(); i!=args.end(); ++i)
-                       for(unsigned j=0; valid_signatures[j]!=*i; ++j)
+               for(char c: args)
+                       for(unsigned j=0; valid_signatures[j]!=c; ++j)
                                if(!valid_signatures[j])
                                        throw bad_definition("__kwd");
 
@@ -136,14 +117,14 @@ const StatementKey *BinaryParser::peek(unsigned level)
                for(unsigned i=sub_remaining.back(); i-->0; )
                        parse();
                sub_remaining.pop_back();
-               cur_info = 0;
+               cur_info = nullptr;
        }
 
        if(!sub_remaining.empty() && sub_remaining.back()==0)
        {
                // No more substatements on this level
-               cur_info = 0;
-               return 0;
+               cur_info = nullptr;
+               return nullptr;
        }
 
        if(cur_info)
@@ -151,7 +132,7 @@ const StatementKey *BinaryParser::peek(unsigned level)
 
        int id = parse_int();
        if(!in)
-               return 0;
+               return nullptr;
 
        cur_info = &get_item(dict, id);
        return &cur_info->key;
@@ -186,7 +167,7 @@ bool BinaryParser::parse_and_load(unsigned level, Loader &ldr, const LoaderActio
        if(!sub_remaining.empty())
                --sub_remaining.back();
        sub_remaining.push_back(parse_int());
-       cur_info = 0;
+       cur_info = nullptr;
 
        act.execute(ldr, args);
 
@@ -217,7 +198,7 @@ IntType::Store BinaryParser::parse_int()
 
 FloatType::Store BinaryParser::parse_float()
 {
-       UInt64 encoded = 0;
+       uint64_t encoded = 0;
        for(unsigned i=0; i<float_precision; i+=8)
        {
                int c = in.get();