File indexing completed on 2024-05-12 15:56:58

0001 /*
0002  *  SPDX-FileCopyrightText: 2006 Cyrille Berger <cberger@cberger.net>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef _KIS_SHARED_H_
0008 #define _KIS_SHARED_H_
0009 
0010 #include <QAtomicInt>
0011 #include "kritaglobal_export.h"
0012 
0013 class KRITAGLOBAL_EXPORT KisShared
0014 {
0015 private:
0016     KisShared(const KisShared& );
0017     KisShared& operator=(const KisShared& );
0018 protected:
0019     KisShared();
0020     ~KisShared();
0021 public:
0022     int refCount() {
0023         return _ref;
0024     }
0025     bool ref() {
0026         return _ref.ref();
0027     }
0028     bool deref() {
0029         Q_ASSERT(_ref > 0);
0030         return _ref.deref();
0031     }
0032 
0033     // see note in kis_shared.cpp
0034     QAtomicInt* sharedWeakReference() {
0035         if(!_sharedWeakReference) {
0036             _sharedWeakReference = new QAtomicInt();
0037             _sharedWeakReference->ref();
0038         }
0039 
0040         return _sharedWeakReference;
0041     }
0042 
0043 private:
0044     QAtomicInt _ref;
0045     QAtomicInt *_sharedWeakReference;
0046 };
0047 
0048 #endif