summaryrefslogtreecommitdiff
path: root/src/f_pc/f_pc_fstcreate_req.cpp
blob: 8faa23bc45e34a71530f881513f7c01f6c89f933 (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
/**
 * f_pc_fstcreate_req.cpp
 * Framework - Process Fast Create Request
 */

#include "f_pc/f_pc_fstcreate_req.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "f_pc/f_pc_load.h"

/* 80023A48-80023A98 0050+00 s=1 e=3 z=52  None .text      fpcFCtRq_Do__FP19fast_create_request */
s32 fpcFCtRq_Do(fast_create_request* pFstCreateReq) {
    if (pFstCreateReq->mpFastCreateFunc != NULL &&
        pFstCreateReq->mpFastCreateFunc(pFstCreateReq->mBase.mpRes,
                                        pFstCreateReq->mpFastCreateData) == 0) {
        return 3;
    } else {
        return 4;
    }
}

/* 80023A98-80023AA0 0008+00 s=1 e=0 z=0  None .text      fpcFCtRq_Delete__FP19fast_create_request
 */
s32 fpcFCtRq_Delete(fast_create_request* pFstCreateReq) {
    return 1;
}

/* ############################################################################################## */
/* 803A3AE0-803A3AF0 000C+04 s=1 e=0 z=0  None .data      submethod$2214 */
create_request_method_class submethod = {(cPhs__Handler)fpcFCtRq_Do, NULL,
                                         (process_method_func)fpcFCtRq_Delete};

/* 80023AA0-80023B70 00D0+00 s=0 e=3 z=43  None .text
 * fpcFCtRq_Request__FP11layer_classsPFPvPv_iPvPv               */
base_process_class* fpcFCtRq_Request(layer_class* pLayer, s16 pProcTypeID,
                                     fstCreateFunc pFastCreateFunc, void* pFastCreateData,
                                     void* pData) {
    if (!fpcLd_Use(pProcTypeID)) {
        return NULL;
    } else {
        fast_create_request* request =
            (fast_create_request*)fpcCtRq_Create(pLayer, 0x50, &submethod);
        if (request != NULL) {
            base_process_class* proc;
            fpcLy_SetCurrentLayer(pLayer);
            proc = fpcBs_Create(pProcTypeID, fpcBs_MakeOfId(), pData);
            if (proc != NULL) {
                proc->mpCtRq = (struct create_request*)request;
                request->mBase.mpRes = proc;
                request->mBase.mBsPcId = proc->mBsPcId;
                if (fpcBs_SubCreate(proc) == 2) {
                    request->mpFastCreateFunc = pFastCreateFunc;
                    request->mpFastCreateData = pFastCreateData;
                    return proc;
                }
            }
            fpcCtRq_Cancel(&request->mBase);
        }
        return NULL;
    }
}