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

0001 /*
0002  *  SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __KIS_IMAGE_BARRIER_LOCK_ADAPTER_H
0008 #define __KIS_IMAGE_BARRIER_LOCK_ADAPTER_H
0009 
0010 
0011 template <typename ImagePointer>
0012 class KisImageBarrierLockAdapterImpl {
0013 public:
0014     inline KisImageBarrierLockAdapterImpl(ImagePointer image, bool readOnly = false)
0015         : m_image(image),
0016           m_readOnly(readOnly)
0017     {
0018     }
0019 
0020     inline ~KisImageBarrierLockAdapterImpl() {
0021     }
0022 
0023     inline void lock() {
0024         m_image->barrierLock(m_readOnly);
0025     }
0026 
0027     // Qt syntax
0028     inline bool tryLock() {
0029         return m_image->tryBarrierLock(m_readOnly);
0030     }
0031 
0032     // Boost.Thread syntax
0033     inline bool try_lock() {
0034         return tryLock();
0035     }
0036 
0037     inline void unlock() {
0038         m_image->unlock();
0039     }
0040 
0041 private:
0042     KisImageBarrierLockAdapterImpl(const KisImageBarrierLockAdapterImpl<ImagePointer> &rhs);
0043     ImagePointer m_image;
0044     bool m_readOnly;
0045 };
0046 
0047 typedef KisImageBarrierLockAdapterImpl<KisImageSP> KisImageBarrierLockAdapter;
0048 typedef KisImageBarrierLockAdapterImpl<KisImage*> KisImageBarrierLockAdapterRaw;
0049 
0050 #endif /* __KIS_IMAGE_BARRIER_LOCK_ADAPTER_H */