Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
JKRThread.h
Go to the documentation of this file.
1#ifndef JKRTHREAD_H
2#define JKRTHREAD_H
3
5#include <dolphin/os.h>
6#include <dolphin/os.h>
7
14 char* name;
15};
16
17class JUTConsole;
18
23class JKRThread : public JKRDisposer {
24public:
25 class TLoad {
26 public:
28 clear();
29 mValid = false;
30 mThreadId = 0;
31 }
32
33 bool isValid() const { return mValid; }
34 u32 getCost() const { return mCost; }
35 u32 getCount() const { return mSwitchCount; }
36 s32 getId() const { return mThreadId; }
37
38 void setValid(bool valid) { mValid = valid; }
39 void setId(s32 id) { mThreadId = id; }
41
42 void resetCost() { mCost = 0; }
43 void resetCount() { mSwitchCount = 0; }
44
45 void incCount() { mSwitchCount++; }
47
48 void clear() {
49 resetCount();
50 resetCost();
51 mLastTick = 0;
52 }
53
54 private:
55 /* 0x00 */ bool mValid;
56 /* 0x01 */ u8 padding_0x61[3];
57 /* 0x04 */ u32 mCost;
58 /* 0x08 */ u32 mSwitchCount;
59 /* 0x0C */ OSTick mLastTick;
60 /* 0x10 */ s32 mThreadId;
61 };
62
63 JKRThread(u32 stack_size, int message_count, int param_3);
64 JKRThread(JKRHeap* heap, u32 stack_size, int message_count, int param_4);
65 JKRThread(OSThread* thread, int message_count);
66 virtual ~JKRThread();
67
68 /* vt[03] */ virtual void* run() { return NULL; }
69
70 void setCommon_mesgQueue(JKRHeap* heap, int message_count);
71 void setCommon_heapSpecified(JKRHeap* heap, u32 stack_size, int param_3);
72
74 void* getStack() const { return mStackMemory; }
75 TLoad* getLoadInfo() { return &mLoadInfo; }
76 JKRHeap* getCurrentHeap() const { return mCurrentHeap; }
78
79 void setCurrentHeap(JKRHeap* heap) {
80 mCurrentHeap = heap ? heap : JKRHeap::getCurrentHeap();
81 }
82
85 return OSSendMessage(&mMessageQueue, message, OS_MESSAGE_NOBLOCK);
86 }
92 OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_NOBLOCK);
93 return message;
94 }
95
98 BOOL rv = OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_NOBLOCK);
99 if (received) {
100 *received = rv;
101 }
102 return message;
103 }
106 OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_BLOCK);
107 return message;
108 }
110 OSJamMessage(&mMessageQueue, message, OS_MESSAGE_BLOCK);
111 }
112
113private:
114 /* 0x00 */ // vtable
115 /* 0x04 */ // JKRDisposer
117 /* 0x28 */ JKRHeap* mHeap;
121 /* 0x54 */ s32 mMessageCount;
122 /* 0x58 */ void* mStackMemory;
123 /* 0x5C */ u32 mStackSize;
124 /* 0x60 */ TLoad mLoadInfo;
127
128public:
129 static void* start(void* param_1);
130 static JKRThread* searchThread(OSThread* thread);
132
134 // static u8 sThreadList[12];
135};
136
137class JKRIdleThread : public JKRThread {
138public:
139 virtual void destroy() {}
140 virtual ~JKRIdleThread() { sThread = NULL; }
141 virtual void* run() { while (true); }
142
143 static void* sThread;
144};
145
148
154public:
156 virtual void draw(JKRThreadName_* param_1, JUTConsole* param_2);
157 virtual void draw(JKRThreadName_* thread_name_list) { draw(thread_name_list, NULL); }
158 virtual ~JKRThreadSwitch() {}
159
161
162 JKRThread* enter(JKRThread* param_1, int param_2);
163 static void callback(OSThread* param_1, OSThread* param_2);
164
165 static JKRThreadSwitch* getManager() { return sManager; }
166 static u32 getTotalCount() { return sTotalCount; }
167
168private:
174
175private:
176 /* 0x00 */ // vtable
177 /* 0x04 */ JKRHeap* mHeap;
178 /* 0x08 */ bool mSetNextHeap;
179 /* 0x09 */ u8 field_0x9[3];
180 /* 0x0C */ u32 field_0xC;
181 /* 0x10 */ u32 field_0x10;
182 /* 0x14 */ u8 field_0x14[4];
183 /* 0x18 */ s64 field_0x18;
184 /* 0x20 */ u32 field_0x20;
185 /* 0x24 */ u32 field_0x24;
186};
187
188class JKRTask : public JKRThread {
189public:
190 virtual ~JKRTask();
191 virtual void* run();
192
193 int check();
194
196 static u8 sEndMesgQueue[32];
197
199 /* 0x8C */ u8 field_0x8c[0x94 - 0x8C];
201};
202
203#endif /* JKRTHREAD_H */
const u32 stack_size
Definition JKRAram.cpp:14
void(* JKRThreadSwitch_PreCallback)(OSThread *current, OSThread *next)
Definition JKRThread.h:146
void(* JKRThreadSwitch_PostCallback)(OSThread *current, OSThread *next)
Definition JKRThread.h:147
Definition JKRDisposer.h:12
Definition JKRHeap.h:23
static JKRHeap * getCurrentHeap()
Definition JKRHeap.h:166
Definition JKRThread.h:137
static void * sThread
Definition JKRThread.h:143
virtual ~JKRIdleThread()
Definition JKRThread.h:140
virtual void * run()
Definition JKRThread.h:141
virtual void destroy()
Definition JKRThread.h:139
Definition JKRThread.h:188
virtual void * run()
Definition JKRThread.cpp:292
OSMessageQueue * field_0x94
Definition JKRThread.h:200
virtual ~JKRTask()
Definition JKRThread.cpp:288
int check()
Definition JKRThread.cpp:312
JSULink< JKRTask > mTaskLink
Definition JKRThread.h:198
static JSUList< JKRTask > sTaskList
Definition JKRThread.h:195
u8 field_0x8c[0x94 - 0x8C]
Definition JKRThread.h:199
static u8 sEndMesgQueue[32]
Definition JKRThread.h:196
Definition JKRThread.h:153
virtual ~JKRThreadSwitch()
Definition JKRThread.h:158
JKRThreadSwitch(JKRHeap *)
Definition JKRThread.cpp:110
static u64 sTotalStart
Definition JKRThread.h:171
JKRThread * enter(JKRThread *param_1, int param_2)
Definition JKRThread.cpp:139
u8 field_0x9[3]
Definition JKRThread.h:179
s64 field_0x18
Definition JKRThread.h:183
u32 field_0xC
Definition JKRThread.h:180
static JKRThreadSwitch * sManager
Definition JKRThread.h:169
static JKRThreadSwitch_PostCallback mUserPostCallback
Definition JKRThread.h:173
u32 field_0x20
Definition JKRThread.h:184
virtual void draw(JKRThreadName_ *thread_name_list)
Definition JKRThread.h:157
bool mSetNextHeap
Definition JKRThread.h:178
virtual void draw(JKRThreadName_ *param_1, JUTConsole *param_2)
Definition JKRThread.cpp:230
u32 field_0x10
Definition JKRThread.h:181
u8 field_0x14[4]
Definition JKRThread.h:182
u32 field_0x24
Definition JKRThread.h:185
static void callback(OSThread *param_1, OSThread *param_2)
Definition JKRThread.cpp:162
static JKRThreadSwitch * createManager(JKRHeap *heap)
Definition JKRThread.cpp:123
static JKRThreadSwitch * getManager()
Definition JKRThread.h:165
static u32 getTotalCount()
Definition JKRThread.h:166
JKRHeap * mHeap
Definition JKRThread.h:177
static u32 sTotalCount
Definition JKRThread.h:170
static JKRThreadSwitch_PreCallback mUserPreCallback
Definition JKRThread.h:172
Definition JKRThread.h:25
s32 mThreadId
Definition JKRThread.h:60
void resetCount()
Definition JKRThread.h:43
bool isValid() const
Definition JKRThread.h:33
OSTick mLastTick
Definition JKRThread.h:59
void setId(s32 id)
Definition JKRThread.h:39
u32 getCount() const
Definition JKRThread.h:35
u32 getCost() const
Definition JKRThread.h:34
TLoad()
Definition JKRThread.h:27
void setCurrentTime()
Definition JKRThread.h:40
u32 mSwitchCount
Definition JKRThread.h:58
u8 padding_0x61[3]
Definition JKRThread.h:56
void resetCost()
Definition JKRThread.h:42
void incCount()
Definition JKRThread.h:45
u32 mCost
Definition JKRThread.h:57
void clear()
Definition JKRThread.h:48
void addCurrentCost()
Definition JKRThread.h:46
s32 getId() const
Definition JKRThread.h:36
void setValid(bool valid)
Definition JKRThread.h:38
bool mValid
Definition JKRThread.h:55
Definition JKRThread.h:23
void * mStackMemory
Definition JKRThread.h:122
static JSUList< JKRThread > & getList()
Definition JKRThread.h:131
s32 mCurrentHeapError
Definition JKRThread.h:126
TLoad * getLoadInfo()
Definition JKRThread.h:75
static JKRThread * searchThread(OSThread *thread)
Definition JKRThread.cpp:94
OSMessage waitMessageBlock()
Definition JKRThread.h:104
void * getStack() const
Definition JKRThread.h:74
s32 mMessageCount
Definition JKRThread.h:121
OSMessage * mMesgBuffer
Definition JKRThread.h:120
JSULink< JKRThread > mThreadListLink
Definition JKRThread.h:116
virtual void * run()
Definition JKRThread.h:68
void sendMessageBlock(OSMessage message)
Definition JKRThread.h:87
void jamMessageBlock(OSMessage message)
Definition JKRThread.h:109
BOOL sendMessage(OSMessage message)
Definition JKRThread.h:84
OSThread * getThreadRecord() const
Definition JKRThread.h:73
JKRHeap * mHeap
Definition JKRThread.h:117
static JSUList< JKRThread > sThreadList
Definition JKRThread.h:133
void setCommon_heapSpecified(JKRHeap *heap, u32 stack_size, int param_3)
Definition JKRThread.cpp:79
JKRHeap * mCurrentHeap
Definition JKRThread.h:125
TLoad mLoadInfo
Definition JKRThread.h:124
u32 mStackSize
Definition JKRThread.h:123
JKRThread(u32 stack_size, int message_count, int param_3)
Definition JKRThread.cpp:24
OSMessage waitMessage()
Definition JKRThread.h:90
void setCurrentHeap(JKRHeap *heap)
Definition JKRThread.h:79
virtual ~JKRThread()
Definition JKRThread.cpp:53
OSMessage waitMessage(BOOL *received)
Definition JKRThread.h:96
void setCommon_mesgQueue(JKRHeap *heap, int message_count)
Definition JKRThread.cpp:67
s32 getCurrentHeapError() const
Definition JKRThread.h:77
OSMessageQueue mMessageQueue
Definition JKRThread.h:119
void resume()
Definition JKRThread.h:83
JKRHeap * getCurrentHeap() const
Definition JKRThread.h:76
OSThread * mThreadRecord
Definition JKRThread.h:118
Definition JSUList.h:96
Definition JUTConsole.h:27
static void message(do_class *i_this)
Definition d_a_do.cpp:2182
static u16 const id[4]
Definition d_a_obj_smtile.cpp:269
static u32 next
Definition CARDUnlock.c:29
int OSReceiveMessage(OSMessageQueue *mq, void *msg, s32 flags)
Definition OSMessage.c:33
int OSSendMessage(OSMessageQueue *mq, void *msg, s32 flags)
Definition OSMessage.c:13
int OSJamMessage(OSMessageQueue *mq, void *msg, s32 flags)
Definition OSMessage.c:54
void * OSMessage
Definition OSMessage.h:13
s32 OSResumeThread(OSThread *thread)
Definition OSThread.c:584
asm OSTick OSGetTick(void)
Definition OSTime.c:29
u32 OSTick
Definition os.h:20
int BOOL
Definition types.h:33
unsigned long u32
Definition types.h:12
signed long long int s64
Definition types.h:13
unsigned long long int u64
Definition types.h:14
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8
@ start
Definition strtold.c:23
Definition JKRThread.h:12
s32 id
Definition JKRThread.h:13
char * name
Definition JKRThread.h:14
Definition OSMessage.h:18
Definition OSThread.h:42