File indexing completed on 2024-05-19 04:26:42
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_H 0008 #define __KIS_IMAGE_BARRIER_LOCK_H 0009 0010 #include <kis_types.h> 0011 #include <KisAdaptedLock.h> 0012 0013 template <typename ImagePointer, bool readOnly> 0014 class KisImageBarrierLockAdapterImpl { 0015 public: 0016 inline KisImageBarrierLockAdapterImpl(ImagePointer image) 0017 : m_image(image) 0018 { 0019 } 0020 0021 inline void lock() { 0022 m_image->barrierLock(readOnly); 0023 } 0024 0025 inline bool try_lock() { 0026 return m_image->tryBarrierLock(readOnly); 0027 } 0028 0029 inline void unlock() { 0030 m_image->unlock(); 0031 } 0032 0033 private: 0034 ImagePointer m_image; 0035 }; 0036 0037 0038 using KisImageBarrierLockAdapter = KisImageBarrierLockAdapterImpl<KisImageSP, false>; 0039 using KisImageReadOnlyBarrierLockAdapter = KisImageBarrierLockAdapterImpl<KisImageSP, true>; 0040 0041 using KisImageBarrierLockAdapterRaw = KisImageBarrierLockAdapterImpl<KisImage*, false>; 0042 using KisImageReadOnlyBarrierLockAdapterRaw = KisImageBarrierLockAdapterImpl<KisImage*, true>; 0043 0044 KIS_DECLARE_ADAPTED_LOCK(KisImageBarrierLock, KisImageBarrierLockAdapter) 0045 KIS_DECLARE_ADAPTED_LOCK(KisImageReadOnlyBarrierLock, KisImageReadOnlyBarrierLockAdapter) 0046 0047 KIS_DECLARE_ADAPTED_LOCK(KisImageBarrierLockRaw, KisImageBarrierLockAdapterRaw) 0048 KIS_DECLARE_ADAPTED_LOCK(KisImageReadOnlyBarrierLockRaw, KisImageReadOnlyBarrierLockAdapterRaw) 0049 0050 #endif /* __KIS_IMAGE_BARRIER_LOCK_H */