]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/writer.cpp
Add binary data format
[libs/datafile.git] / source / writer.cpp
diff --git a/source/writer.cpp b/source/writer.cpp
new file mode 100644 (file)
index 0000000..cdd78b6
--- /dev/null
@@ -0,0 +1,52 @@
+/* $Id$
+
+This file is part of libmspdatafile
+Copyright © 2006  Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#include "binarywriter.h"
+#include "statement.h"
+#include "textwriter.h"
+#include "writer.h"
+
+using namespace std;
+
+namespace Msp {
+namespace DataFile {
+
+Writer::Writer(ostream &o):
+       out(o),
+       mode(new TextWriter(out)),
+       binary(false)
+{ }
+
+void Writer::write(const Statement &st)
+{
+       mode->write(st);
+}
+
+void Writer::set_binary(bool b)
+{
+       if(b==binary)
+               return;
+
+       binary=b;
+
+       Statement st;
+       if(binary)
+               st.keyword="__bin";
+       else
+               st.keyword="__text";
+
+       mode->write(st);
+
+       delete mode;
+       if(binary)
+               mode=new BinaryWriter(out);
+       else
+               mode=new TextWriter(out);
+}
+
+} // namespace DataFile
+} // namespace Msp