ibus-qt  1.3.1
 All Classes Namespaces Functions Enumerations Enumerator
/builddir/build/BUILD/ibus-qt-1.3.1-Source/src/qibusobject.h
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