aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/PSVita/PSVitaExtras/CustomMap.h
blob: 005d7b6eebba20658710053cd32da2e43686b9ef (plain)
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
#ifndef CustomMap_H
#define CustomMap_H
// AP - This replaces the std::unordered_map used in MobSpawner.h
// The problem with the original system is that it calls malloc for every insert it does. Not only is that expensive in itself but it also
// clashes with any other mallocs on other threads (specifically the large amount of mallocing being done in Level.h for the std::unordered_set)
// causing huge stalls.
// This isn't really a univeral replacement for std::unordered_map and is quite specific to MobSpawner.h

#include "../../../Minecraft.World/ChunkPos.h"

typedef struct SCustomMapNode
{
	unsigned int Hash;
	ChunkPos first;
	bool second;
	struct SCustomMapNode *Next;
} SCustomMapNode;

class CustomMap
{
private:
	SCustomMapNode **m_NodePool;
	int m_NodePoolSize;
	int m_NodePoolIndex;

	int m_HashSize;
	SCustomMapNode **m_HashTable;

public:
	CustomMap();
	~CustomMap();

	void clear();
	SCustomMapNode* find(const ChunkPos &Key);
	int end();
	SCustomMapNode* get(int index);
	void insert(const ChunkPos &Key, bool Value);

private:
	void resize();
};

#endif // CustomMap_H