Kinoko
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
Archive.cc
1
#include "Archive.hh"
2
3
#include <algorithm>
4
#include <cstddef>
5
6
namespace
Kinoko::EGG
{
7
11
Archive::~Archive
() {
12
s_archiveList
.remove(
this
);
13
}
14
16
void
Archive::unmount() {
17
if
(--m_refCount <= 0) {
18
delete
this
;
19
}
20
}
21
23
s32 Archive::convertPathToEntryId(
const
char
*path)
const
{
24
return
m_handle.convertPathToEntryId(path);
25
}
26
28
void
*Archive::getFileFast(s32 entryId, Abstract::ArchiveHandle::FileInfo &info)
const
{
29
m_handle.open(entryId, info);
30
return
m_handle.getFileAddress(info);
31
}
32
37
Archive *
Archive::FindArchive
(
void
*archiveStart) {
38
ASSERT(archiveStart);
39
40
auto
*iter =
reinterpret_cast<
Archive *
>
(
s_archiveList
.getFirst());
41
42
while
(iter && iter->m_handle.startAddress() != archiveStart) {
43
iter =
reinterpret_cast<
Archive *
>
(
s_archiveList
.getNext(iter));
44
}
45
46
return
iter;
47
}
48
53
Archive *
Archive::Mount
(
void
*archiveStart) {
54
Archive *archive =
FindArchive
(archiveStart);
55
56
if
(!archive) {
57
// Create a new archive and add it to the list
58
archive =
new
Archive(archiveStart);
59
s_archiveList
.append(archive);
60
}
else
{
61
// It already exists, increase the reference count
62
archive->m_refCount++;
63
}
64
65
return
archive;
66
}
67
69
Archive::Archive(
void
*archiveStart) : m_handle(archiveStart) {}
70
71
Abstract::Memory::MEMList
Archive::s_archiveList
=
72
Abstract::Memory::MEMList
(Archive::GetLinkOffset());
73
74
}
// namespace Kinoko::EGG
Kinoko::EGG::Archive::~Archive
~Archive()
Removes the archive from the static list.
Definition
Archive.cc:11
Kinoko::EGG::Archive::s_archiveList
static Abstract::Memory::MEMList s_archiveList
The linked list of all mounted archives.
Definition
Archive.hh:50
Kinoko::EGG::Archive::Mount
static Archive * Mount(void *archiveStart)
Creates a new Archive object or increments the ref count for an already existing Archive.
Definition
Archive.cc:53
Kinoko::EGG::Archive::FindArchive
static Archive * FindArchive(void *archiveStart)
Checks to see if a given archive is already mounted.
Definition
Archive.cc:37
Kinoko::EGG
EGG core library.
Definition
Archive.cc:6
Kinoko::Abstract::Memory::MEMList
Intrusive doubly-linked list. Links are placed within the corresponding object.
Definition
List.hh:14
egg
core
Archive.cc
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.17.0