-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathHashtable.d
More file actions
88 lines (69 loc) · 2.05 KB
/
Hashtable.d
File metadata and controls
88 lines (69 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class HT_Array {
var int array;
var int numalloc;
var int numinarray;
}; instance HT@(HT_Array) {
};
func void HT_Array_Archiver(var HT_Array this) {
PM_SaveInt("length", this.numAlloc); // Hate to do it this way, but that's how I implemented it back then :/
PM_SaveInt("elements", this.numInArray);
var int ctr; ctr = 0;
var int k; k = 0;
repeat(k, this.numAlloc/4);
var int ptr; ptr = MEM_ReadInt(this.array+k*4);
if (!ptr) { continue; };
PM_SaveClassPtr(IntToString(ctr), ptr, "zCArray");
PM_SaveInt(ConcatStrings("pos", IntToString(ctr)), k);
ctr += 1;
end;
PM_SaveInt("subArrays", ctr);
};
func void HT_Array_Unarchiver(var HT_Array this) {
this.numAlloc = PM_Load("length");
this.numInArray = PM_Load("elements");
this.array = MEM_Alloc(this.numAlloc);
var int k; k = 0;
repeat(k, PM_Load("subArrays"));
var int pos; pos = PM_Load(ConcatStrings("pos", IntToString(k)));
MEM_WriteInt(this.array+pos*4, PM_Load(IntToString(k)));
end;
};
func void HT_Array_delete(var HT_Array ht) {
_HT_Destroy(_@(ht));
};
func int HT_CreateSized(var int size) {
return wrap(HT@, _HT_CreatePtr(size));
};
func int HT_Create() {
return +HT_CreateSized(HT_SIZE);
};
func void HT_Insert(var int hndl, var int val, var int key) {
_HT_Insert(getPtr(hndl), val, key);
};
func void HT_Resize(var int hndl, var int size) {
_HT_Resize(getPtr(hndl), size);
};
func int HT_Get(var int hndl, var int key) {
return _HT_Get(getPtr(hndl), key);
};
func int HT_Has(var int hndl, var int key) {
return _HT_Has(getPtr(hndl), key);
};
func void HT_Remove(var int hndl, var int key) {
_HT_Remove(getPtr(hndl), key);
};
func void HT_Change(var int hndl, var int val, var int key) {
_HT_Change(getPtr(hndl), val, key);
};
func void HT_InsertOrChange(var int hndl, var int val, var int key) {
_HT_InsertOrChange(getPtr(hndl), val, key);
};
func int HT_GetNumber(var int hndl) {
return _HT_GetNumber(getPtr(hndl));
};
func void HT_ForEach(var int hndl, var func fnc) {
_HT_ForEach(getPtr(hndl), fnc);
};
func void HT_Destroy(var int hndl) {
delete(hndl);
};