ibus-qt 1.3.4
Loading...
Searching...
No Matches
qibuspointer.h
1#ifndef __Q_IBUS_POINTER_H__
2#define __Q_IBUS_POINTER_H__
3
4#include <QObject>
5#include <QAtomicInt>
6
7namespace IBus {
8
9template <typename T>
11{
12public:
13 Pointer (T *object = 0) : p (0) {
14 set (object);
15 }
16
17 Pointer (const Pointer &src) : p (0) {
18 set (src.get ());
19 }
20
21 template <typename T1>
22 Pointer (const Pointer<T1> &src): p (0) {
23 set (dynamic_cast<T *> (src.get ()));
24 }
25
26 ~Pointer () {
27 set (0);
28 }
29
30 Pointer &operator= (T *object) {
31 set (object);
32 return *this;
33 }
34
35 Pointer &operator= (const Pointer &src) {
36 set (src.get ());
37 return *this;
38 }
39
40 template <typename T1>
41 Pointer &operator= (const Pointer<T1> &src) {
42 set (dynamic_cast<T *> (src.get ()));
43 return *this;
44 }
45
46 T &operator* () const {
47 return *get ();
48 }
49
50 T *operator-> () const {
51 return get ();
52 }
53
54 operator T* () const {
55 return get ();
56 }
57
58 operator bool () const {
59 return !isNull ();
60 }
61
62 T *get () const {
63 return p;
64 }
65
66 bool isNull () const {
67 return p == 0;
68 }
69
70protected:
71 T *p;
72
73 void set (T *object) {
74 if (p)
75 p->unref ();
76 if (object)
77 object->ref ();
78 p = object;
79 }
80};
81
82};
83#endif
Definition qibuspointer.h:11
Definition qibusattribute.cpp:3