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