summaryrefslogtreecommitdiff
path: root/src/f_pc/f_pc_create_req.cpp
blob: a9e6f2b120273432b9c8565dcf1501050879ac09 (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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 */
s32 fpcCtRq_Handler() {
    return 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;
}