blob: a591dc105256a4a46212938c9d67eeac5f7731e7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#pragma once
#include <Havok/Common/Base/System/StackTracer/hkStackTracer.h>
#include <Havok/Common/Base/hkBase.h>
class hkCriticalSection;
class hkMultiThreadCheck {
public:
HK_DECLARE_CLASS_ALLOCATOR(hkMultiThreadCheck)
HK_DECLARE_REFLECTION()
enum AccessType {
HK_ACCESS_IGNORE = 0,
HK_ACCESS_RO = 1,
HK_ACCESS_RW = 2,
};
enum ReadMode {
THIS_OBJECT_ONLY,
RECURSIVE,
};
enum : hkUint32 {
MARKED_RO = 0xffffffe1, // and all children
MARKED_RO_SELF_ONLY = 0xffffffc1,
UNMARKED = 0xfffffff1
};
HK_FORCE_INLINE hkMultiThreadCheck();
HK_FORCE_INLINE void init();
HK_FORCE_INLINE void markForRead(ReadMode mode = RECURSIVE) {}
HK_FORCE_INLINE void markForWrite() {}
HK_FORCE_INLINE bool isMarkedForWrite() { return true; }
HK_FORCE_INLINE bool isMarkedForReadRecursive() { return true; }
HK_FORCE_INLINE void unmarkForRead() {}
HK_FORCE_INLINE void unmarkForWrite() {}
hkUint32 m_threadId;
static hkStackTracer s_stackTracer;
static hkStackTracer::CallTree* s_stackTree;
int m_stackTraceId;
hkUint16 m_markCount;
static hkCriticalSection* m_criticalSection;
static void globalCriticalSectionLock();
static void globalCriticalSectionUnlock();
protected:
hkUint16 m_markBitStack;
};
inline hkMultiThreadCheck::hkMultiThreadCheck() : m_threadId(UNMARKED), m_markCount(0x8000) {}
inline void hkMultiThreadCheck::init() {
m_threadId = UNMARKED;
m_markCount = 0x8000;
}
|