Mercurial > foo_out_sdl
comparison foosdk/sdk/pfc/synchro.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:e9bb126753e7 | 1:20d02a178406 |
|---|---|
| 1 #pragma once | |
| 2 | |
| 3 #include <type_traits> // std::remove_reference | |
| 4 | |
| 5 #ifdef _WIN32 | |
| 6 #include "synchro_win.h" | |
| 7 #else | |
| 8 #include "synchro_nix.h" | |
| 9 #endif | |
| 10 | |
| 11 namespace pfc { | |
| 12 class dummyLock { | |
| 13 public: | |
| 14 void enterRead() noexcept {} | |
| 15 void enterWrite() noexcept {} | |
| 16 void leaveRead() noexcept {} | |
| 17 void leaveWrite() noexcept {} | |
| 18 void enter() noexcept {} | |
| 19 void leave() noexcept {} | |
| 20 void lock() noexcept {} | |
| 21 void unlock() noexcept {} | |
| 22 }; | |
| 23 | |
| 24 template<typename mutex_t> | |
| 25 class mutexScope_ { | |
| 26 private: | |
| 27 typedef mutexScope_<mutex_t> self_t; | |
| 28 public: | |
| 29 mutexScope_( mutex_t * m ) noexcept : m_mutex(m) { m_mutex->enter(); } | |
| 30 mutexScope_( mutex_t & m ) noexcept : m_mutex(&m) { m_mutex->enter(); } | |
| 31 ~mutexScope_( ) noexcept {m_mutex->leave();} | |
| 32 private: | |
| 33 void operator=( const self_t & ) = delete; | |
| 34 mutexScope_(const self_t & ) = delete; | |
| 35 | |
| 36 mutex_t * m_mutex; | |
| 37 }; | |
| 38 typedef mutexScope_<mutexBase_t> mutexScope; | |
| 39 | |
| 40 template<typename lock_t> | |
| 41 class _readWriteLock_scope_read { | |
| 42 public: | |
| 43 _readWriteLock_scope_read( lock_t & lock ) noexcept : m_lock( lock ) { m_lock.enterRead(); } | |
| 44 ~_readWriteLock_scope_read() noexcept {m_lock.leaveRead();} | |
| 45 private: | |
| 46 _readWriteLock_scope_read( const _readWriteLock_scope_read &) = delete; | |
| 47 void operator=( const _readWriteLock_scope_read &) = delete; | |
| 48 lock_t & m_lock; | |
| 49 }; | |
| 50 template<typename lock_t> | |
| 51 class _readWriteLock_scope_write { | |
| 52 public: | |
| 53 _readWriteLock_scope_write( lock_t & lock ) noexcept : m_lock( lock ) { m_lock.enterWrite(); } | |
| 54 ~_readWriteLock_scope_write() noexcept {m_lock.leaveWrite();} | |
| 55 private: | |
| 56 _readWriteLock_scope_write( const _readWriteLock_scope_write &) = delete; | |
| 57 void operator=( const _readWriteLock_scope_write &) = delete; | |
| 58 lock_t & m_lock; | |
| 59 }; | |
| 60 } | |
| 61 | |
| 62 | |
| 63 #define PFC_INSYNC_READ( X ) ::pfc::_readWriteLock_scope_read<typename std::remove_reference<decltype(X)>::type > _asdf_l_readWriteLock_scope_read( X ) | |
| 64 #define PFC_INSYNC_WRITE( X ) ::pfc::_readWriteLock_scope_write<typename std::remove_reference<decltype(X)>::type > _asdf_l_readWriteLock_scope_write( X ) | |
| 65 | |
| 66 typedef pfc::mutexScope c_insync; | |
| 67 | |
| 68 #define PFC_INSYNC(X) pfc::mutexScope_< typename std::remove_reference<decltype(X)>::type > blah____sync(X) | |
| 69 | |
| 70 | |
| 71 | |
| 72 // Legacy macros | |
| 73 #define inReadSync( X ) PFC_INSYNC_READ(X) | |
| 74 #define inWriteSync( X ) PFC_INSYNC_WRITE(X) | |
| 75 #define insync( X ) PFC_INSYNC(X) | |
| 76 |
