Mercurial > foo_out_sdl
view 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 |
line wrap: on
line source
#pragma once #include <type_traits> // std::remove_reference #ifdef _WIN32 #include "synchro_win.h" #else #include "synchro_nix.h" #endif namespace pfc { class dummyLock { public: void enterRead() noexcept {} void enterWrite() noexcept {} void leaveRead() noexcept {} void leaveWrite() noexcept {} void enter() noexcept {} void leave() noexcept {} void lock() noexcept {} void unlock() noexcept {} }; template<typename mutex_t> class mutexScope_ { private: typedef mutexScope_<mutex_t> self_t; public: mutexScope_( mutex_t * m ) noexcept : m_mutex(m) { m_mutex->enter(); } mutexScope_( mutex_t & m ) noexcept : m_mutex(&m) { m_mutex->enter(); } ~mutexScope_( ) noexcept {m_mutex->leave();} private: void operator=( const self_t & ) = delete; mutexScope_(const self_t & ) = delete; mutex_t * m_mutex; }; typedef mutexScope_<mutexBase_t> mutexScope; template<typename lock_t> class _readWriteLock_scope_read { public: _readWriteLock_scope_read( lock_t & lock ) noexcept : m_lock( lock ) { m_lock.enterRead(); } ~_readWriteLock_scope_read() noexcept {m_lock.leaveRead();} private: _readWriteLock_scope_read( const _readWriteLock_scope_read &) = delete; void operator=( const _readWriteLock_scope_read &) = delete; lock_t & m_lock; }; template<typename lock_t> class _readWriteLock_scope_write { public: _readWriteLock_scope_write( lock_t & lock ) noexcept : m_lock( lock ) { m_lock.enterWrite(); } ~_readWriteLock_scope_write() noexcept {m_lock.leaveWrite();} private: _readWriteLock_scope_write( const _readWriteLock_scope_write &) = delete; void operator=( const _readWriteLock_scope_write &) = delete; lock_t & m_lock; }; } #define PFC_INSYNC_READ( X ) ::pfc::_readWriteLock_scope_read<typename std::remove_reference<decltype(X)>::type > _asdf_l_readWriteLock_scope_read( X ) #define PFC_INSYNC_WRITE( X ) ::pfc::_readWriteLock_scope_write<typename std::remove_reference<decltype(X)>::type > _asdf_l_readWriteLock_scope_write( X ) typedef pfc::mutexScope c_insync; #define PFC_INSYNC(X) pfc::mutexScope_< typename std::remove_reference<decltype(X)>::type > blah____sync(X) // Legacy macros #define inReadSync( X ) PFC_INSYNC_READ(X) #define inWriteSync( X ) PFC_INSYNC_WRITE(X) #define insync( X ) PFC_INSYNC(X)
