ibus-qt
1.3.1
|
00001 #ifndef __Q_IBUS_OBJECT_H__ 00002 #define __Q_IBUS_OBJECT_H__ 00003 00004 #include <QObject> 00005 #include <QMetaType> 00006 #include "qibuspointer.h" 00007 00008 #ifdef QT_USE_NAMESPACE 00009 # undef QT_USE_NAMESPACE 00010 # define QT_USE_NAMESPACE IBus 00011 #endif 00012 00013 namespace IBus { 00014 00015 class Object; 00016 typedef Pointer <Object> ObjectPointer; 00017 00018 class Object : public QObject 00019 { 00020 Q_OBJECT 00021 template <typename T> friend class Pointer; 00022 00023 public: 00024 // Q_INVOKABLE Object () : m_referenced (false), m_refcount(1) {} 00025 Object () : m_referenced (false), m_refcount(1) {} 00026 virtual ~Object (); 00027 virtual void destroy (); 00028 00029 private: 00030 Object * ref () { 00031 if (m_referenced) { 00032 m_refcount.ref (); 00033 } 00034 else { 00035 m_referenced = true; 00036 } 00037 return this; 00038 } 00039 00040 void unref () { 00041 if (! m_refcount.deref ()) { 00042 delete this; 00043 } 00044 } 00045 00046 bool is_referenced () const { 00047 return m_referenced; 00048 } 00049 00050 bool m_referenced; 00051 QAtomicInt m_refcount; 00052 }; 00053 00054 }; 00055 00056 Q_DECLARE_METATYPE(IBus::ObjectPointer) 00057 00058 #endif