]> git.tdb.fi Git - gldbg.git/blob - source/tool.h
Track owners of breakpoints
[gldbg.git] / source / tool.h
1 /* $Id$
2
3 This file is part of gldbg
4 Copyright © 2010  Mikko Rasa, Mikkosoft Productions
5 Distributed under the GPL
6 */
7
8 #ifndef TOOL_H_
9 #define TOOL_H_
10
11 #include <list>
12
13 class GlDbg;
14
15 class Tool
16 {
17 public:
18         class Factory
19         {
20         protected:
21                 Factory();
22         public:
23                 virtual ~Factory() { }
24
25                 virtual Tool *create(GlDbg &) const = 0;
26         };
27
28 protected:
29         Tool() { }
30 public:
31         virtual ~Tool() { }
32
33         virtual void decode(const char *, unsigned) = 0;
34         virtual void process_started() { }
35         virtual void process_stopped(int) { }
36
37         static std::list<Factory *> &get_factories();
38 };
39
40
41 template<typename T>
42 class RegisteredTool: public Tool
43 {
44 protected:
45         class Factory: public Tool::Factory
46         {
47                 virtual Tool *create(GlDbg &g) const { return new T(g); }
48         };
49
50         static Factory factory;
51
52 protected:
53         // The no-op expression is necessary to instantiate the static member
54         RegisteredTool() { (void)factory; }
55 };
56
57 template<typename T>
58 typename RegisteredTool<T>::Factory RegisteredTool<T>::factory;
59
60 #endif