styyx-util 1.0
Utility Header for SKSE Plugin development
Loading...
Searching...
No Matches
st-debug.h
Go to the documentation of this file.
1//
2// Created by styyx on 11/03/2026.
3//
4
5#pragma once
6#include <windows.h>
7#include <shared_mutex>
8
10{
11
12
13#ifdef NDEBUG
14
15 struct ScopedSharedLock {
16 explicit ScopedSharedLock(std::shared_mutex& mtx) : lock(mtx) {}
17 void unlock() { lock.unlock(); }
18 void close() {lock.lock();}
19 private:
20 std::shared_lock<std::shared_mutex> lock;
21 };
22
23 struct ScopedUniqueLock {
24 explicit ScopedUniqueLock(std::shared_mutex& mtx) : lock(mtx) {}
25 void unlock() { lock.unlock(); }
26 void close() {lock.lock();}
27 private:
28 std::unique_lock<std::shared_mutex> lock;
29 };
30
31#else
32
34 explicit ScopedSharedLock(std::shared_timed_mutex& mtx) : lock(mtx, std::defer_lock) {
35 if (!lock.try_lock_for(std::chrono::seconds(5))) {
36 SKSE::log::critical("DEADLOCK DETECTED");
37 DebugBreak();
38 }
39 }
40 void unlock() { lock.unlock(); }
41 void close() {lock.lock();}
42private:
43 std::shared_lock<std::shared_timed_mutex> lock;
44};
45
47 explicit ScopedUniqueLock(std::shared_timed_mutex& mtx) : lock(mtx, std::defer_lock) {
48 if (!lock.try_lock_for(std::chrono::seconds(5))) {
49 SKSE::log::critical("DEADLOCK DETECTED");
50 DebugBreak();
51 }
52 }
53 void unlock() { lock.unlock(); }
54 void close() {lock.lock();}
55private:
56 std::unique_lock<std::shared_timed_mutex> lock;
57};
58
59#endif
60}
Definition st-debug.h:10
Definition st-debug.h:33
void unlock()
Definition st-debug.h:40
std::shared_lock< std::shared_timed_mutex > lock
Definition st-debug.h:43
void close()
Definition st-debug.h:41
ScopedSharedLock(std::shared_timed_mutex &mtx)
Definition st-debug.h:34
Definition st-debug.h:46
ScopedUniqueLock(std::shared_timed_mutex &mtx)
Definition st-debug.h:47
std::unique_lock< std::shared_timed_mutex > lock
Definition st-debug.h:56
void unlock()
Definition st-debug.h:53
void close()
Definition st-debug.h:54