#pragma once
#ifndef HW_LIB_HASH_TABLE_H
#define HW_LIB_HASH_TABLE_H
#ifdef __cplusplus
extern "C" {
#endif

#define HT_PRIME_1 151
#define HT_PRIME_2 163
#define HT_INITIAL_BASE_SIZE 53


typedef struct Hash_Item
{
    char* key;
    char* value;
} Hash_Item_t;

typedef struct Hash_Table
{
    int base_size;
    int size;
    int count;
    Hash_Item_t** items;
} Hash_Table_t;

Hash_Table_t* ht_new();
void ht_del_hash_table(Hash_Table_t* ht);
void ht_insert(Hash_Table_t* ht, const char* key, const char* value);
char* ht_search(Hash_Table_t* ht, const char* key);
void ht_delete(Hash_Table_t* h, const char* key);

#ifdef __cplusplus
}
#endif
#endif //HW_LIB_HASH_TABLE_H