-/* $Id$
-
-This file is part of libmspdatafile
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#ifndef MSP_DATAFILE_BINARYWRITER_H_
#define MSP_DATAFILE_BINARYWRITER_H_
#include <map>
-#include "binarydict.h"
+#include "statement.h"
+#include "type.h"
#include "writermode.h"
namespace Msp {
namespace DataFile {
+/**
+Writes data in binary format.
+*/
class BinaryWriter: public WriterMode
{
private:
- typedef std::map<DictEntry, unsigned> Dictionary;
- typedef std::map<std::string, unsigned> EnumMap;
+ typedef std::map<StatementKey, int> Dictionary;
+ typedef std::map<std::string, unsigned> StringMap;
Dictionary dict;
- unsigned next_st_id;
- EnumMap enums;
- unsigned next_enum_id;
+ unsigned next_kwd_id = 1;
+ StringMap strings;
+ unsigned next_str_id = 1;
+ unsigned float_precision = 32;
public:
- BinaryWriter(std::ostream &o);
- void write(const Statement &st);
+ BinaryWriter(Output &o);
+
+ void set_float_precision(unsigned) override;
+ void write(const Statement &st) override;
private:
void write_(const Statement &st);
- DictEntry create_entry(const Statement &st);
void collect_keywords(const Statement &st);
- void write_int(long long n);
- void write_string(const std::string &s);
- void write_float(float f);
- void write_enum(const std::string &e);
+ void write_int(IntType::Store n);
+ void write_string(const StringType::Store &s);
+ void write_float(FloatType::Store f);
+ void write_symbol(const SymbolType::Store &s);
};
} // namespace DataFile