]> git.tdb.fi Git - gldbg.git/blob - source/tracer.cpp
Make gldbg interactive
[gldbg.git] / source / tracer.cpp
1 /* $Id$
2
3 This file is part of gldbg
4 Copyright © 2009  Mikko Rasa, Mikkosoft Productions
5 Distributed under the GPL
6 */
7
8 #include <msp/io/print.h>
9 #include "glprint.h"
10 #include "tracer.h"
11
12 using namespace Msp;
13
14 Tracer::Tracer():
15         glprint(new GlPrint(0, 16384)),
16         out(0),
17         delete_out(true),
18         enabled(true)
19 { }
20
21 Tracer::~Tracer()
22 {
23         if(delete_out)
24                 delete out;
25 }
26
27 void Tracer::set_output(IO::Base *o)
28 {
29         if(delete_out)
30                 delete out;
31         out = o;
32         delete_out = true;
33 }
34
35 void Tracer::set_output(IO::Base &o)
36 {
37         set_output(&o);
38         delete_out = false;
39 }
40
41 void Tracer::enable()
42 {
43         if(!out)
44                 throw InvalidState("Output is not set");
45         enabled = true;
46 }
47
48 void Tracer::disable()
49 {
50         enabled = false;
51 }
52
53 int Tracer::decode(const char *data, unsigned len)
54 {
55         if(!enabled || !out)
56                 return 0;
57         int ret = glprint->decode(data, len);
58         if(ret>=0)
59                 IO::print(*out, "%s\n", glprint->get_buffer());
60         return ret;
61 }