ibus-qt  1.3.3
qibuspointer.h
1 #ifndef __Q_IBUS_POINTER_H__
2 #define __Q_IBUS_POINTER_H__
3 
4 #include <QObject>
5 #include <QAtomicInt>
6 
7 namespace IBus {
8 
9 template <typename T>
10 class Pointer
11 {
12 public:
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 
70 protected:
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