-/* $Id$
-
-This file is part of libmspdatafile
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#ifndef MSP_DATAFILE_BINARYPARSER_H_
#define MSP_DATAFILE_BINARYPARSER_H_
#include <map>
-#include "binarydict.h"
#include "parsermode.h"
+#include "type.h"
namespace Msp {
namespace DataFile {
+/**
+Parses data in binary format.
+*/
class BinaryParser: public ParserMode
{
private:
- typedef std::map<unsigned, DictEntry> Dictionary;
- typedef std::map<unsigned, std::string> EnumMap;
+ typedef std::map<int, StatementInfo> Dictionary;
+ typedef std::map<unsigned, std::string> StringMap;
Dictionary dict;
- EnumMap enums;
- bool first;
+ StringMap strings;
+ unsigned float_precision;
+ StatementInfo *cur_info;
+ std::vector<unsigned> sub_remaining;
public:
BinaryParser(Input &i, const std::string &s);
- Statement parse();
+
+ virtual Statement parse();
+ virtual void process_control_statement(const Statement &);
+
+ virtual const StatementKey *peek(unsigned);
+ virtual bool parse_and_load(unsigned, Loader &, const LoaderAction &);
+
private:
- Statement parse_statement();
- long long parse_int();
- float parse_float();
- std::string parse_string();
- bool parse_bool();
- std::string parse_enum();
+ IntType::Store parse_int();
+ FloatType::Store parse_float();
+ StringType::Store parse_string();
+ BoolType::Store parse_bool();
+ SymbolType::Store parse_symbol();
};
} // namespace DataFile