77 lines
1.7 KiB
C
77 lines
1.7 KiB
C
/**
|
|
* @file: src/hashtable.h
|
|
* @author: Jozef Nagy <schkwve@gmail.com>
|
|
* @copyright: MIT (See LICENSE.md)
|
|
* @brief: This file contains the routines for
|
|
* hashtable lookup for built-in commands.
|
|
*/
|
|
|
|
#ifndef __HASHTABLE_H_
|
|
#define __HASHTABLE_H_
|
|
|
|
#include <stddef.h>
|
|
|
|
#include "builtin.h"
|
|
|
|
typedef struct {
|
|
char *key;
|
|
builtin_func func_ptr;
|
|
} hashtable_entry_t;
|
|
|
|
typedef struct {
|
|
size_t size;
|
|
size_t count;
|
|
hashtable_entry_t **entry;
|
|
} hashtable_t;
|
|
|
|
extern hashtable_t *g_builtin_hashtable;
|
|
|
|
/**
|
|
* @brief This routine will allocate enough memory to store
|
|
* the hashtable and initialize it with NULL values.
|
|
*/
|
|
hashtable_t *hashtable_create();
|
|
|
|
/**
|
|
* @brief This routine inserts an entry into a hashtable.
|
|
*/
|
|
void hashtable_insert(hashtable_t *hashtable, const char *key,
|
|
builtin_func func_ptr);
|
|
|
|
/**
|
|
* @brief This routine creates an hashtable entry
|
|
*/
|
|
hashtable_entry_t *hashtable_new_entry(const char *key, builtin_func func_ptr);
|
|
|
|
/**
|
|
* @brief This routine searches for a key in a hashtable.
|
|
*/
|
|
builtin_func hashtable_search(hashtable_t *hashtable, const char *key);
|
|
|
|
/**
|
|
* @brief This routine calculates the hash of a key
|
|
* with basic collision mitigation
|
|
*/
|
|
int hashtable_get_hash(const char *key, const size_t hashmap_size,
|
|
const int att);
|
|
|
|
/**
|
|
* @brief This routine removes an entry from a hashtable.
|
|
*/
|
|
void hashtable_remove_entry(hashtable_t *hashtable, const char *key);
|
|
|
|
/**
|
|
* @brief This routine removes all entries from a hashtable and
|
|
* free()'s it.
|
|
*/
|
|
void hashtable_destroy(hashtable_t *hashtable);
|
|
|
|
/**
|
|
* @brief This routine hashes a key.
|
|
*
|
|
* @return Hash
|
|
*/
|
|
int _hashtable_hash(const char *key, const int a, const size_t size);
|
|
|
|
#endif // __HASHTABLE_H_
|