~lidaobing/ibus/ibus-qt

« back to all changes in this revision

Viewing changes to src/qibuspointer.h

  • Committer: LI Daobing
  • Date: 2009-07-28 14:30:44 UTC
  • Revision ID: lidaobing@gmail.com-20090728143044-2swzp2fwuu7p8xae
importĀ 1.2.0.20090728

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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