A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
Archive.cc
1#include "Archive.hh"
2
3#include <algorithm>
4#include <cstddef>
5
6namespace EGG {
7
12 s_archiveList.remove(this);
13}
14
16void Archive::unmount() {
17 if (--m_refCount <= 0) {
18 delete this;
19 }
20}
21
23s32 Archive::convertPathToEntryId(const char *path) const {
24 return m_handle.convertPathToEntryId(path);
25}
26
28void *Archive::getFileFast(s32 entryId, Abstract::ArchiveHandle::FileInfo &info) const {
29 m_handle.open(entryId, info);
30 return m_handle.getFileAddress(info);
31}
32
37Archive *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
53Archive *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
69Archive::Archive(void *archiveStart) : m_handle(archiveStart) {}
70
72 Abstract::Memory::MEMList(Archive::GetLinkOffset());
73
74} // namespace EGG
static Abstract::Memory::MEMList s_archiveList
The linked list of all mounted archives.
Definition Archive.hh:48
static Archive * FindArchive(void *archiveStart)
Checks to see if a given archive is already mounted.
Definition Archive.cc:37
~Archive()
Removes the archive from the static list.
Definition Archive.cc:11
static Archive * Mount(void *archiveStart)
Creates a new Archive object or increments the ref count for an already existing Archive.
Definition Archive.cc:53
EGG core library.
Definition Archive.cc:6
Intrusive doubly-linked list. Links are placed within the corresponding object.
Definition List.hh:14