]> git.tdb.fi Git - gldbg.git/blobdiff - source/tracer.cpp
Make gldbg interactive
[gldbg.git] / source / tracer.cpp
diff --git a/source/tracer.cpp b/source/tracer.cpp
new file mode 100644 (file)
index 0000000..7ce00fe
--- /dev/null
@@ -0,0 +1,61 @@
+/* $Id$
+
+This file is part of gldbg
+Copyright © 2009  Mikko Rasa, Mikkosoft Productions
+Distributed under the GPL
+*/
+
+#include <msp/io/print.h>
+#include "glprint.h"
+#include "tracer.h"
+
+using namespace Msp;
+
+Tracer::Tracer():
+       glprint(new GlPrint(0, 16384)),
+       out(0),
+       delete_out(true),
+       enabled(true)
+{ }
+
+Tracer::~Tracer()
+{
+       if(delete_out)
+               delete out;
+}
+
+void Tracer::set_output(IO::Base *o)
+{
+       if(delete_out)
+               delete out;
+       out = o;
+       delete_out = true;
+}
+
+void Tracer::set_output(IO::Base &o)
+{
+       set_output(&o);
+       delete_out = false;
+}
+
+void Tracer::enable()
+{
+       if(!out)
+               throw InvalidState("Output is not set");
+       enabled = true;
+}
+
+void Tracer::disable()
+{
+       enabled = false;
+}
+
+int Tracer::decode(const char *data, unsigned len)
+{
+       if(!enabled || !out)
+               return 0;
+       int ret = glprint->decode(data, len);
+       if(ret>=0)
+               IO::print(*out, "%s\n", glprint->get_buffer());
+       return ret;
+}