EHS
HashMap.h
Go to the documentation of this file.
1/*
2#pragma once
3
4#include "EHS.h"
5
6#include <type_traits>
7
8namespace ehs
9{
10 template<typename V>
11 class HashNode
12 {
13 private:
14 V value;
15 HashNode child;
16
17 public:
18 HashNode()
19 {
20 }
21
22 HashNode(const V value)
23 : value(value)
24 {
25 }
26
27 HashNode(const HashNode& node)
28 : value(node.value), child(node.child)
29 {
30 }
31
32 HashNode& operator==(const HashNode& node)
33 {
34 value = node.value;
35 child = node.child;
36
37 return *this;
38 }
39
40 void SetValue(const V value)
41 {
42 this->value = value;
43 }
44
45 V GetValue() const
46 {
47 return value;
48 }
49
50 void SetChild(const HashNode child)
51 {
52 this->child = child;
53 }
54
55 HashNode* GetChild()
56 {
57 return &child;
58 }
59 };
60
62 template<typename V, typename N = USize>
63 class HashMap
64 {
65 private:
66 HashNode<V>** data;
67 N size;
68
69 public:
70 ~HashMap()
71 {
72 if (data)
73 {
74 delete[] data;
75 data = nullptr;
76 size = 0;
77 }
78 }
79
80 HashMap()
81 : data(nullptr), size(0)
82 {
83 }
84
85 HashMap(const N size)
86 : data(new HashNode<V>(size)), size(size)
87 {
88 }
89
90 HashMap(const HashMap& map)
91 : data(new HashNode<V>*(map.size)), size(map.size)
92 {
93 for (N i = 0; i < map.size; ++i)
94 data[i] = map.data[i];
95 }
96
97 HashMap& operator=(const HashMap& map)
98 {
99 if (this == &map)
100 return *this;
101
102 data = new HashNode<V>*(map.size);
103 size = map.size;
104
105 for (N i = 0; i < size; ++i)
106 data[i] = map.data[i];
107
108 return *this;
109 }
110
111 template<typename K>
112 void Insert(const K key, const V value)
113 {
114
115 }
116
117 template<>
118 void Insert(const Str_8& key, const V value)
119 {
120 N hash = 0;
121
122 for (N i = 0; i < key.Size(); ++i)
123 hash += key[i];
124
125 hash %= size;
126
127 if (data[hash])
128 {
129 HashNode<V> child = data[hash]->GetChild();
130 if (child)
131
132 }
133 else
134 {
135 data[hash] = new HashNode<V>(value);
136 }
137 }
138
139 private:
140 SetChildRecursive()
141 {
142
143 }
144 };
145}
146*/