summaryrefslogtreecommitdiff
path: root/libs/JSystem/JGadget/linklist.cpp
blob: 39890480b6678ed9848fc092f05058e0b6ddf92a (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
132
133
134
135
136
//
// Generated By: dol2asm
// Translation Unit: linklist
//

#include "JSystem/JGadget/linklist.h"

template <typename T>
class TPRIsEqual_pointer_ {
public:
    TPRIsEqual_pointer_<T>(const T* p) { this->p_ = p; }

    bool operator()(const T& rSrc) const { return &rSrc == this->p_; }

private:
    const T* p_;
};

//
// Forward References:
//

extern "C" void __dt__Q27JGadget13TNodeLinkListFv();
extern "C" void erase__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iterator();
extern "C" void
erase__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorQ37JGadget13TNodeLinkList8iterator();
extern "C" void
splice__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorRQ27JGadget13TNodeLinkListQ37JGadget13TNodeLinkList8iterator();
extern "C" void
Insert__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorPQ27JGadget13TLinkListNode();
extern "C" void Erase__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode();
extern "C" void Remove__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode();

//
// External References:
//

extern "C" void __dl__FPv();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();

//
// Declarations:
//

/* 802DCA1C-802DCA58 2D735C 003C+00 1/1 6/6 0/0 .text            __dt__Q27JGadget13TNodeLinkListFv
 */
JGadget::TNodeLinkList::~TNodeLinkList() {}

/* 802DCA58-802DCAA0 2D7398 0048+00 0/0 2/2 0/0 .text
 * erase__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iterator */
JGadget::TNodeLinkList::iterator
JGadget::TNodeLinkList::erase(JGadget::TNodeLinkList::iterator it) {
    iterator next = it;
    ++next;
    return erase(it, next);
}

/* 802DCAA0-802DCB08 2D73E0 0068+00 1/1 0/0 0/0 .text
 * erase__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorQ37JGadget13TNodeLinkList8iterator
 */
JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::erase(iterator a, iterator b) {
    TLinkListNode* cur = a.node;
    TLinkListNode* end = b.node;
    TLinkListNode* next;

    for (; cur != end; cur = next) {
        next = cur->mNext;
        Erase(cur);
    }

    return b;
}

/* 802DCB08-802DCBA8 2D7448 00A0+00 1/1 0/0 0/0 .text
 * splice__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorRQ27JGadget13TNodeLinkListQ37JGadget13TNodeLinkList8iterator
 */
void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc, iterator itSrc) {
    iterator itSrcNext = itSrc;
    ++itSrcNext;

    if ((it == itSrc) || (it == itSrcNext)) {
        return;
    } else {
        TLinkListNode* const node = &(*itSrc);
        rSrc.Erase(node);
        Insert(it, node);
    }
}

/* 802DCBA8-802DCBD4 2D74E8 002C+00 1/1 7/7 0/0 .text
 * Insert__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorPQ27JGadget13TLinkListNode */
JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Insert(iterator it, TLinkListNode* p) {
    TLinkListNode* pIt = it.node;
    TLinkListNode* pItPrev = pIt->mPrev;

    p->mNext = pIt;
    p->mPrev = pItPrev;
    pIt->mPrev = p;
    pItPrev->mNext = p;
    count++;
    return iterator(p);
}

/* 802DCBD4-802DCBF8 2D7514 0024+00 2/2 4/4 0/0 .text
 * Erase__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode  */
JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Erase(TLinkListNode* p) {
    TLinkListNode* pNext = p->mNext;
    TLinkListNode* pPrev = p->mPrev;
    pNext->mPrev = pPrev;
    pPrev->mNext = pNext;
    count--;
    return iterator(pNext);
}

/* 802DCBF8-802DCCC8 2D7538 00D0+00 0/0 2/2 0/0 .text
 * Remove__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode */
// missing stack
#ifdef NONMATCHING
void JGadget::TNodeLinkList::Remove(TLinkListNode* p) {
    remove_if(TPRIsEqual_pointer_<TLinkListNode>(p));
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JGadget::TNodeLinkList::Remove(JGadget::TLinkListNode* param_0) {
    nofralloc
#include "asm/JSystem/JGadget/linklist/Remove__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode.s"
}
#pragma pop
#endif