SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
HashUtil.cpp
1#pragma once
2
3#include "Game/Util/HashUtil.hpp"
4
5HashSortTable::HashSortTable(u32 cnt) {
6 mHashCodes = new u32[cnt];
7 _8 = new u32[cnt];
8 _C = new u32[0x80];
9 _10 = new u32[0x80];
10 _14 = 0;
11 _18 = cnt;
12 _0 = 0;
13}
14
15bool HashSortTable::add(const char *pName, u32 a2, bool noSkip) {
16 u32 hash = MR::getHashCode(pName);
17
18 if (!noSkip) {
19 return addOrSkip(hash, a2);
20 }
21 else {
22 return add(hash, a2);
23 }
24}
25
26bool HashSortTable::add(u32 a1, u32 a2) {
27 mHashCodes[_14] = a1;
28 _8[_14] = a2;
29 _14++;
30 return true;
31}
32
33bool HashSortTable::addOrSkip(u32 a1, u32 a2) {
34 for (u32 i = 0; i < _14; i++) {
35 if (a1 == mHashCodes[i]) {
36 return false;
37 }
38 }
39
40 mHashCodes[_14] = a1;
41 _8[_14] = a2;
42 _14++;
43 return true;
44}
45
46s32 HashSortTable::search(const char *pStr, u32 *a2) {
47 return search(MR::getHashCode(pStr), a2);
48}
49
50s32 HashSortTable::search(const char *pStr, const char *a2, u32 *a3) {
51 u32 hashCode = MR::getHashCode(pStr) + MR::getHashCode(a2);
52 return search(hashCode, a3);
53}
54
55namespace MR {
56 u32 getHashCode(const char *pStr) {
57 u32 val;
58 for (val = 0; *pStr != 0; pStr++) {
59 val = *pStr + (val * 31);
60 }
61
62 return val;
63 }
64
65};