Kinoko
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
List.cc
1
#include "List.hh"
2
3
namespace
Kinoko::Abstract::Memory {
4
5
MEMList::MEMList() :
MEMList
(0) {}
6
8
MEMList::MEMList(u16 offset) {
9
m_headObject =
nullptr
;
10
m_tailObject =
nullptr
;
11
m_numObjects = 0;
12
m_offset = offset;
13
}
14
16
void
MEMList::append(
void
*
object
) {
17
ASSERT(
object
);
18
19
if
(!m_headObject) {
20
setFirstObject(
object
);
21
}
else
{
22
MEMLink *link = getLink(
object
);
23
24
link->m_prevObject = m_tailObject;
25
link->m_nextObject =
nullptr
;
26
27
getLink(m_tailObject)->m_nextObject = object;
28
m_tailObject = object;
29
++m_numObjects;
30
}
31
}
32
34
void
MEMList::remove(
void
*
object
) {
35
ASSERT(
object
);
36
37
MEMLink *link = getLink(
object
);
38
39
if
(!link->m_prevObject) {
40
m_headObject = link->m_nextObject;
41
}
else
{
42
getLink(link->m_prevObject)->m_nextObject = link->m_nextObject;
43
}
44
45
if
(!link->m_nextObject) {
46
m_tailObject = link->m_prevObject;
47
}
else
{
48
getLink(link->m_nextObject)->m_prevObject = link->m_prevObject;
49
}
50
51
link->m_prevObject =
nullptr
;
52
link->m_nextObject =
nullptr
;
53
--m_numObjects;
54
}
55
56
void
*MEMList::getFirst() {
57
return
getNext(
nullptr
);
58
}
59
61
void
*MEMList::getNext(
void
*
object
) {
62
return
object
? getLink(
object
)->m_nextObject : m_headObject;
63
}
64
65
void
MEMList::setFirstObject(
void
*
object
) {
66
ASSERT(
object
);
67
68
MEMLink *link = getLink(
object
);
69
70
link->m_nextObject =
nullptr
;
71
link->m_prevObject =
nullptr
;
72
73
m_headObject = object;
74
m_tailObject = object;
75
++m_numObjects;
76
}
77
78
MEMLink *MEMList::getLink(
void
*
object
) {
79
return
reinterpret_cast<
MEMLink *
>
(GetAddrNum(
object
) + m_offset);
80
}
81
82
}
// namespace Kinoko::Abstract::Memory
Kinoko::Abstract::Memory::MEMList
Intrusive doubly-linked list. Links are placed within the corresponding object.
Definition
List.hh:14
abstract
memory
List.cc
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.17.0