]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/binaryparser.cpp
Move all exception classes to a common header
[libs/datafile.git] / source / binaryparser.cpp
index 051133f79a32cecb540c021f87b6930f5e168566..4ed2877a4424c2389c890473a0e71918418516ba 100644 (file)
@@ -5,6 +5,7 @@
 #include "argumentstore.h"
 #include "binaryparser.h"
 #include "binfloat.h"
+#include "except.h"
 #include "input.h"
 #include "loaderaction.h"
 
@@ -13,27 +14,6 @@ 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),
@@ -48,7 +28,10 @@ Statement BinaryParser::parse()
 {
        const StatementKey *key;
        if(cur_info)
+       {
                key = &cur_info->key;
+               cur_info = 0;
+       }
        else
        {
                int id = parse_int();
@@ -84,15 +67,16 @@ Statement BinaryParser::parse()
                }
        }
 
-       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;
 }