diff options
Diffstat (limited to 'vendor/codeberg.org/gruf/go-mutexes/mutex.go')
-rw-r--r-- | vendor/codeberg.org/gruf/go-mutexes/mutex.go | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/vendor/codeberg.org/gruf/go-mutexes/mutex.go b/vendor/codeberg.org/gruf/go-mutexes/mutex.go deleted file mode 100644 index 3841c9423..000000000 --- a/vendor/codeberg.org/gruf/go-mutexes/mutex.go +++ /dev/null @@ -1,105 +0,0 @@ -package mutexes - -import ( - "sync" -) - -// Mutex defines a wrappable mutex. By forcing unlocks -// via returned function it makes wrapping much easier -type Mutex interface { - // Lock performs a mutex lock, returning an unlock function - Lock() (unlock func()) -} - -// RWMutex defines a wrappable read-write mutex. By forcing -// unlocks via returned functions it makes wrapping much easier -type RWMutex interface { - Mutex - - // RLock performs a mutex read lock, returning an unlock function - RLock() (runlock func()) -} - -// New returns a new base Mutex implementation -func New() Mutex { - return &baseMutex{} -} - -// NewRW returns a new base RWMutex implementation -func NewRW() RWMutex { - return &baseRWMutex{} -} - -// WithFunc wraps the supplied Mutex to call the provided hooks on lock / unlock -func WithFunc(mu Mutex, onLock, onUnlock func()) Mutex { - return &fnMutex{mu: mu, lo: onLock, un: onUnlock} -} - -// WithFuncRW wrapps the supplied RWMutex to call the provided hooks on lock / rlock / unlock/ runlock -func WithFuncRW(mu RWMutex, onLock, onRLock, onUnlock, onRUnlock func()) RWMutex { - return &fnRWMutex{mu: mu, lo: onLock, rlo: onRLock, un: onUnlock, run: onRUnlock} -} - -// baseMutex simply wraps a sync.Mutex to implement our Mutex interface -type baseMutex sync.Mutex - -func (mu *baseMutex) Lock() func() { - (*sync.Mutex)(mu).Lock() - return (*sync.Mutex)(mu).Unlock -} - -// baseRWMutex simply wraps a sync.RWMutex to implement our RWMutex interface -type baseRWMutex sync.RWMutex - -func (mu *baseRWMutex) Lock() func() { - (*sync.RWMutex)(mu).Lock() - return (*sync.RWMutex)(mu).Unlock -} - -func (mu *baseRWMutex) RLock() func() { - (*sync.RWMutex)(mu).RLock() - return (*sync.RWMutex)(mu).RUnlock -} - -// fnMutex wraps a Mutex to add hooks for Lock and Unlock -type fnMutex struct { - mu Mutex - lo func() - un func() -} - -func (mu *fnMutex) Lock() func() { - unlock := mu.mu.Lock() - mu.lo() - return func() { - mu.un() - unlock() - } -} - -// fnRWMutex wraps a RWMutex to add hooks for Lock, RLock, Unlock and RUnlock -type fnRWMutex struct { - mu RWMutex - lo func() - rlo func() - un func() - run func() -} - -func (mu *fnRWMutex) Lock() func() { - unlock := mu.mu.Lock() - mu.lo() - return func() { - mu.un() - unlock() - } -} - -func (mu *fnRWMutex) RLock() func() { - unlock := mu.mu.RLock() - mu.rlo() - return func() { - mu.run() - unlock() - } -} |