Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsreadwritelocker.cpp 3 : : ------------------------- 4 : : begin : September 2018 5 : : copyright : (C) 2018 by Matthias Kuhn 6 : : email : matthias@opengis.ch 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #include "qgsreadwritelocker.h" 19 : : 20 : 6802 : QgsReadWriteLocker::QgsReadWriteLocker( QReadWriteLock &lock, QgsReadWriteLocker::Mode mode ) 21 : 6802 : : mLock( lock ) 22 : 6802 : , mMode( mode ) 23 : : { 24 : 6802 : if ( mode == Read ) 25 : 2692 : mLock.lockForRead(); 26 : 4110 : else if ( mode == Write ) 27 : 3160 : mLock.lockForWrite(); 28 : 6802 : } 29 : : 30 : 1052 : void QgsReadWriteLocker::changeMode( QgsReadWriteLocker::Mode mode ) 31 : : { 32 : 1052 : if ( mode == mMode ) 33 : 23 : return; 34 : : 35 : 1029 : unlock(); 36 : : 37 : 1029 : mMode = mode; 38 : : 39 : 1029 : if ( mMode == Read ) 40 : 0 : mLock.lockForRead(); 41 : 1029 : else if ( mMode == Write ) 42 : 1029 : mLock.lockForWrite(); 43 : 1052 : } 44 : : 45 : 7919 : void QgsReadWriteLocker::unlock() 46 : : { 47 : 7919 : if ( mMode != Unlocked ) 48 : 6881 : mLock.unlock(); 49 : : 50 : 7919 : mMode = Unlocked; 51 : 7919 : } 52 : : 53 : 6802 : QgsReadWriteLocker::~QgsReadWriteLocker() 54 : : { 55 : 6802 : unlock(); 56 : 6802 : }