]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/writer.h
Add an abstraction layer for output
[libs/datafile.git] / source / writer.h
index 756e19a22c41668cea43fb5387944b90b84a4721..df308266d976810217be152efec93d8f2a75b77a 100644 (file)
@@ -1,16 +1,9 @@
-/* $Id$
-
-This file is part of libmspdatafile
-Copyright © 2006  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_DATAFILE_WRITER_H_
 #define MSP_DATAFILE_WRITER_H_
 
 #include <map>
-#include <ostream>
-#include "binarydict.h"
+#include <msp/io/base.h>
+#include "output.h"
 
 namespace Msp {
 namespace DataFile {
@@ -18,17 +11,38 @@ namespace DataFile {
 class Statement;
 class WriterMode;
 
+/**
+Frontend for writing data.
+*/
 class Writer
 {
 private:
-       std::ostream &out;
+       Output out;
        WriterMode *mode;
        bool binary;
 
 public:
-       Writer(std::ostream &);
-       void write(const Statement &);
-       void set_binary(bool);
+       Writer(IO::Base &o);
+       ~Writer();
+
+       /**
+       Writes a statement to the output.  This function always writes a complete
+       statement, so it's not possible to add substatements later.
+       */
+       void write(const Statement &st);
+
+       /**
+       Sets binary or text mode.  While it is possible to enter and exit binary
+       mode multiple times, doing so produces sub-optimal output.
+
+       @param  b  true for binary mode, false for text
+       */
+       void set_binary(bool b);
+
+       /** Sets the precision of floating point numbers in bits.  Depending on the
+       mode not all values may be valid, but any value between 16 and 64 that is
+       divisible by 8 is guaranteed to work. */
+       void set_float_precision(unsigned);
 };
 
 } // namespace DataFile