acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
hash_table.h
1
// From map_base.h by camilo on 2022-09-12 04:01 <3ThomasBorregaardSorensen!!
2
#pragma once
3
4
5
#include "set_node.h"
6
7
8
template
<
typename
ITEM, const ::i32 DEFAULT_HASH_TABLE_SIZE = 17 >
9
class
set_dynamic_hash_table
10
{
11
public
:
12
13
14
using
BASE_NODE = set_node < ITEM >;
15
16
using
BASE_ITEM =
ITEM
;
17
18
using
ITEM_POINTER =
ITEM
*;
19
20
using
iterator = ::list_iterator < ITEM_POINTER >;
21
22
23
BASE_NODE * m_pHashDefault[DEFAULT_HASH_TABLE_SIZE];
24
BASE_NODE ** m_ppHash;
25
::u32 m_nHashTableSize;
26
27
28
set_dynamic_hash_table()
29
{
30
31
m_ppHash =
nullptr
;
32
33
m_nHashTableSize = DEFAULT_HASH_TABLE_SIZE;
34
35
}
36
37
38
::u32 GetHashTableSize()
const
39
{
40
41
return
m_nHashTableSize;
42
43
}
44
45
46
void
InitHashTable(::u32 nHashSize,
bool
bAllocNow =
true
)
47
{
48
49
if
(nHashSize <= 0)
50
{
51
52
throw
"Hash table size must be greater than 0"
;
53
54
}
55
56
if
(m_ppHash !=
nullptr
&& m_ppHash != m_pHashDefault && m_nHashTableSize > DEFAULT_HASH_TABLE_SIZE)
57
{
58
59
delete
[] m_ppHash;
60
61
}
62
63
m_ppHash =
nullptr
;
64
65
if
(bAllocNow)
66
{
67
68
if
(nHashSize <= DEFAULT_HASH_TABLE_SIZE)
69
{
70
71
m_ppHash = m_pHashDefault;
72
73
}
74
else
75
{
76
77
m_ppHash = øraw_new BASE_NODE *[nHashSize];
78
79
ENSURE(m_ppHash !=
nullptr
);
80
81
}
82
83
::zero(m_ppHash,
sizeof
(iterator) * nHashSize);
84
85
}
86
87
m_nHashTableSize = nHashSize;
88
89
}
90
91
92
void
erase_all()
93
{
94
95
if
(m_ppHash !=
nullptr
&& m_ppHash != m_pHashDefault && m_nHashTableSize > DEFAULT_HASH_TABLE_SIZE)
96
{
97
98
delete
[] m_ppHash;
99
100
}
101
102
m_ppHash =
nullptr
;
103
104
}
105
106
107
};
108
109
110
template
< ::i32 m_nHashTableSize,
typename
PAYLOAD >
111
class
set_fixed_hash_table
112
{
113
public
:
114
115
116
typedef
set_node < PAYLOAD > node;
117
118
119
node * m_ppHash[m_nHashTableSize];
120
121
122
set_fixed_hash_table()
123
{
124
125
ASSERT(m_nHashTableSize > 0);
126
127
zero(m_ppHash,
sizeof
(m_ppHash));
128
129
}
130
131
132
::u32 GetHashTableSize()
const
133
{
134
135
return
m_nHashTableSize;
136
137
}
138
139
140
void
InitHashTable(::u32 hashSize,
bool
bAllocNow =
true
) { }
141
142
143
void
erase_all()
144
{
145
146
zero(m_ppHash,
sizeof
(m_ppHash));
147
148
}
149
150
151
};
152
153
154
ITEM
prototype
collection
hash_table.h
Generated by
1.17.0