util
ksharedobject.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef KSHAREDOBJECT_H
00020 #define KSHAREDOBJECT_H
00021
00022 #include <KDE/KSharedPtr>
00023 #include <QtCore/QObject>
00024
00034 namespace KDevelop {
00035
00036 struct FakeAtomic {
00037 inline FakeAtomic(QObject& object, QSharedData& real) : m_object(object), m_real(real) {
00038 }
00039 inline operator int() const {
00040 if(!m_real.ref)
00041 return 1;
00042 return m_real.ref;
00043 }
00044
00045 inline bool ref() {
00046 return m_real.ref.ref();
00047 }
00048
00049 inline bool deref() {
00050 bool ret = m_real.ref.deref();
00051 if(!ret)
00052 m_object.deleteLater();
00053
00054 return true;
00055 }
00056
00057 QObject& m_object;
00058 QSharedData& m_real;
00059 };
00060
00061 struct KSharedObject : public KShared {
00062 inline KSharedObject(QObject& object) : ref(object, *this) {
00063 }
00064
00065 mutable FakeAtomic ref;
00066 };
00067
00068 }
00069
00070 #endif