| 370ab52 by Jos van den Oever at 2009-09-14 |
1 |
#ifndef INTROSPECTION_H |
|
2 |
#define INTROSPECTION_H |
|
3 |
|
| 127a508 by Jos van den Oever at 2009-11-05 |
4 |
// define TREEINTROSPECTION to let objects have a pointer to their parents |
|
5 |
#define TREEINTROSPECTION |
|
6 |
|
| 370ab52 by Jos van den Oever at 2009-09-14 |
7 |
#include <QtCore/QVariant> |
| 56bd8e4 by Jos van den Oever at 2009-11-04 |
8 |
#include <QtCore/QVector> |
| 7ab8751 by Jos van den Oever at 2010-01-12 |
9 |
#include <stdint.h> |
| 370ab52 by Jos van den Oever at 2009-09-14 |
10 |
|
|
11 |
class Introspectable; |
|
12 |
|
| 5c794b7 by Jos van den Oever at 2009-09-18 |
13 |
Q_DECLARE_METATYPE(QVector<quint16>); |
|
14 |
Q_DECLARE_METATYPE(QVector<quint32>); |
|
15 |
|
| 370ab52 by Jos van den Oever at 2009-09-14 |
16 |
class Introspection { |
|
17 |
public: |
|
18 |
const QString name; |
|
19 |
const int numberOfMembers; |
|
20 |
const QString* const names; |
|
21 |
int (* const * const numberOfInstances)(const Introspectable*); |
|
22 |
QVariant (* const * const value)(const Introspectable*, int position); |
|
23 |
const Introspectable* (* const * const introspectable)(const Introspectable*, int position); |
|
24 |
|
|
25 |
Introspection(const QString& n, |
|
26 |
const int nOM, |
|
27 |
const QString* const ns, |
|
28 |
int (* const * const mC)(const Introspectable*), |
|
29 |
QVariant (* const * const vG)(const Introspectable*, int), |
|
30 |
const Introspectable* (* const * const i)(const Introspectable*, int)) |
|
31 |
:name(n), numberOfMembers(nOM), names(ns), |
|
32 |
numberOfInstances(mC), value(vG), introspectable(i) {} |
|
33 |
|
|
34 |
// convenience |
|
35 |
static int zero(const Introspectable*) { return 0; } |
|
36 |
static int one(const Introspectable*) { return 1; } |
|
37 |
static const Introspectable* null(const Introspectable*, int) { return NULL; } |
|
38 |
static QVariant nullValue(const Introspectable*, int) { return QVariant(); } |
|
39 |
}; |
|
40 |
|
|
41 |
class Introspectable { |
|
42 |
public: |
| 124a9d4 by Jos van den Oever at 2010-01-12 |
43 |
uint32_t streamOffset; |
| 127a508 by Jos van den Oever at 2009-11-05 |
44 |
#ifdef TREEINTROSPECTION |
|
45 |
Introspectable const * parent; // one more 'const' would be nice ... |
|
46 |
|
| 124a9d4 by Jos van den Oever at 2010-01-12 |
47 |
Introspectable(const Introspectable* p) |
|
48 |
:streamOffset(999999), parent(p) {} |
| 127a508 by Jos van den Oever at 2009-11-05 |
49 |
#else |
| 124a9d4 by Jos van den Oever at 2010-01-12 |
50 |
Introspectable(const Introspectable* = 0) |
|
51 |
:streamOffset(999999) { |
|
52 |
} |
| 127a508 by Jos van den Oever at 2009-11-05 |
53 |
#endif |
|
54 |
|
| 370ab52 by Jos van den Oever at 2009-09-14 |
55 |
virtual ~Introspectable() {} |
|
56 |
virtual const Introspection* getIntrospection() const = 0; |
|
57 |
}; |
|
58 |
|
|
59 |
|
|
60 |
#endif |