/* #pragma once #include "EHS.h" #include <type_traits> namespace ehs { template<typename V> class HashNode { private: V value; HashNode child; public: HashNode() { } HashNode(const V value) : value(value) { } HashNode(const HashNode& node) : value(node.value), child(node.child) { } HashNode& operator==(const HashNode& node) { value = node.value; child = node.child; return *this; } void SetValue(const V value) { this->value = value; } V GetValue() const { return value; } void SetChild(const HashNode child) { this->child = child; } HashNode* GetChild() { return &child; } }; /// 1000 template<typename V, typename N = USize> class HashMap { private: HashNode<V>** data; N size; public: ~HashMap() { if (data) { delete[] data; data = nullptr; size = 0; } } HashMap() : data(nullptr), size(0) { } HashMap(const N size) : data(new HashNode<V>(size)), size(size) { } HashMap(const HashMap& map) : data(new HashNode<V>*(map.size)), size(map.size) { for (N i = 0; i < map.size; ++i) data[i] = map.data[i]; } HashMap& operator=(const HashMap& map) { if (this == &map) return *this; data = new HashNode<V>*(map.size); size = map.size; for (N i = 0; i < size; ++i) data[i] = map.data[i]; return *this; } template<typename K> void Insert(const K key, const V value) { } template<> void Insert(const Str_8& key, const V value) { N hash = 0; for (N i = 0; i < key.Size(); ++i) hash += key[i]; hash %= size; if (data[hash]) { HashNode<V> child = data[hash]->GetChild(); if (child) } else { data[hash] = new HashNode<V>(value); } } private: SetChildRecursive() { } }; } */