diff options
| author | Luke Street <luke.street@encounterpc.com> | 2023-09-10 00:42:26 -0400 |
|---|---|---|
| committer | Luke Street <luke.street@encounterpc.com> | 2023-09-10 00:48:55 -0400 |
| commit | adb95b135c3d7498eba29bbd9728d345eed5a407 (patch) | |
| tree | 655575b939c12067569263171b68c079b1a232c8 /src/f_pc/f_pc_create_req.cpp | |
| parent | 81ac53f1317dafb3506ae3ed8b2820d40645c3c8 (diff) | |
Import project
Original repository: https://github.com/encounter/ww
Diffstat (limited to 'src/f_pc/f_pc_create_req.cpp')
| -rw-r--r-- | src/f_pc/f_pc_create_req.cpp | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/f_pc/f_pc_create_req.cpp b/src/f_pc/f_pc_create_req.cpp new file mode 100644 index 00000000..b2d7b8e2 --- /dev/null +++ b/src/f_pc/f_pc_create_req.cpp @@ -0,0 +1,131 @@ +// +// Generated by dtk +// Translation Unit: f_pc_create_req.cpp +// + +#include "f_pc/f_pc_create_req.h" +#include "SSystem/SComponent/c_malloc.h" +#include "f_pc/f_pc_base.h" +#include "f_pc/f_pc_create_iter.h" +#include "f_pc/f_pc_deletor.h" +#include "f_pc/f_pc_executor.h" +#include "f_pc/f_pc_layer.h" +#include "f_pc/f_pc_layer_iter.h" + +/* 8003CD0C-8003CD28 .text fpcCtRq_isCreatingByID__FP10create_tagPUi */ +bool fpcCtRq_isCreatingByID(create_tag* i_createTag, unsigned int* i_procID) { + create_request* pReq = static_cast<create_request*>(i_createTag->mBase.mpTagData); + return pReq->mBsPcId == *i_procID; +} + +/* 8003CD28-8003CD60 .text fpcCtRq_IsCreatingByID__FUi */ +BOOL fpcCtRq_IsCreatingByID(unsigned int i_id) { + return fpcCtIt_Judge((fpcLyIt_JudgeFunc)fpcCtRq_isCreatingByID, &i_id) != NULL ? TRUE : FALSE; +} + +/* 8003CD60-8003CD9C .text fpcCtRq_CreateQTo__FP14create_request */ +void fpcCtRq_CreateQTo(create_request* i_request) { + fpcCtTg_CreateQTo(&i_request->mBase); + fpcLy_CreatedMesg(i_request->mpLayer); + fpcLy_CancelQTo(&i_request->mMtdTg); +} + +/* 8003CD9C-8003CDE0 .text fpcCtRq_ToCreateQ__FP14create_request */ +void fpcCtRq_ToCreateQ(create_request* i_request) { + fpcLy_CreatingMesg(i_request->mpLayer); + fpcLy_ToCancelQ(i_request->mpLayer, &i_request->mMtdTg); + fpcCtTg_ToCreateQ(&i_request->mBase); +} + +/* 8003CDE0-8003CE54 .text fpcCtRq_Delete__FP14create_request */ +BOOL fpcCtRq_Delete(create_request* i_request) { + fpcCtRq_CreateQTo(i_request); + if (i_request->mpCtRqMtd != NULL && fpcMtd_Method(i_request->mpCtRqMtd->mpDelete, i_request) == 0) { + return 0; + } else { + if (i_request->mpRes) { + i_request->mpRes->mpCtRq = NULL; + } + cMl::free(i_request); + return 1; + } +} + +/* 8003CE54-8003CEEC .text fpcCtRq_Cancel__FP14create_request */ +BOOL fpcCtRq_Cancel(create_request* i_request) { + base_process_class* pProc; + if (i_request != NULL && !i_request->mbIsCancelling) { + i_request->mbIsCancelling = TRUE; + pProc = i_request->mpRes; + + if (pProc != NULL && !fpcDt_Delete(pProc)) + return FALSE; + + if (i_request->mpCtRqMtd != NULL && !fpcMtd_Method(i_request->mpCtRqMtd->mpCancel, i_request)) + return FALSE; + + return fpcCtRq_Delete(i_request); + } else { + return TRUE; + } +} + +/* 8003CEEC-8003CF08 .text fpcCtRq_IsDoing__FP14create_request */ +s32 fpcCtRq_IsDoing(create_request* i_request) { + if (i_request != NULL) + return i_request->mbIsCreating; + else + return FALSE; +} + +/* 8003CF08-8003CFC4 .text fpcCtRq_Do__FP14create_request */ +BOOL fpcCtRq_Do(create_request* i_request) { + s32 phase = cPhs_COMPLEATE_e; + + if (i_request->mpCtRqMtd != NULL) { + cPhs__Handler pHandler = i_request->mpCtRqMtd->mpHandler; + if (pHandler != NULL) { + i_request->mbIsCreating = TRUE; + phase = pHandler(i_request); + i_request->mbIsCreating = FALSE; + } + } + + switch (phase) { + case cPhs_COMPLEATE_e: { + s32 success = fpcEx_ToExecuteQ(i_request->mpRes); + if (success == 0) + return fpcCtRq_Cancel(i_request); + else + return fpcCtRq_Delete(i_request); + } + case 3: + case cPhs_ERROR_e: + return fpcCtRq_Cancel(i_request); + } + + return 1; +} + +/* 8003CFC4-8003CFF0 .text fpcCtRq_Handler__Fv */ +void fpcCtRq_Handler() { + fpcCtIt_Method((fpcCtIt_MethodFunc)fpcCtRq_Do, NULL); +} + +/* 8003CFF0-8003D078 .text fpcCtRq_Create__FP11layer_classUlP27create_request_method_class */ +create_request* fpcCtRq_Create(layer_class* i_layer, u32 i_size, create_request_method_class* i_CtRqMethods) { + create_request* pReq = (create_request*)cMl::memalignB(-4, i_size); + + if (pReq != NULL) { + fpcCtTg_Init(&pReq->mBase, pReq); + fpcMtdTg_Init(&pReq->mMtdTg, (process_method_tag_func)fpcCtRq_Cancel, pReq); + pReq->mpLayer = i_layer; + pReq->mpCtRqMtd = i_CtRqMethods; + pReq->mBsPcId = fpcBs_MakeOfId(); + pReq->mpRes = NULL; + pReq->mbIsCancelling = FALSE; + fpcCtRq_ToCreateQ(pReq); + } + + return pReq; +} |
