Started hash table
This commit is contained in:
parent
fb4fe5ad66
commit
404588d491
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Kyler Olsen
|
||||||
|
// YREA SLS
|
||||||
|
// Hash Table Header
|
||||||
|
// November 2025
|
||||||
|
|
||||||
|
#ifndef SLS_HASH_TABLE_H
|
||||||
|
#define SLS_HASH_TABLE_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include "sls/string.h"
|
||||||
|
|
||||||
|
typedef struct Bucket {
|
||||||
|
size_t key_hash_b;
|
||||||
|
void *item;
|
||||||
|
struct Bucket *next;
|
||||||
|
} Bucket;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
size_t buckets_count;
|
||||||
|
Bucket *buckets;
|
||||||
|
} HashTable;
|
||||||
|
|
||||||
|
// Initializes a HashTable with buckets_count number of buckets. Returns NULL on Memory Allocation Error.
|
||||||
|
HashTable *init_hash_table(size_t buckets_count);
|
||||||
|
// Frees memory owned by the HashTable.
|
||||||
|
void del_hash_table(HashTable *ht);
|
||||||
|
|
||||||
|
// The hash functions used by HashTable. Returns the hash of the string.
|
||||||
|
// static size_t sls_hash_a(SlsStr key); // For bucket index (in HashTable).
|
||||||
|
// static size_t sls_hash_b(SlsStr key); // For bucket key_id (in Bucket).
|
||||||
|
// Calculates the bucket index based on the number of buckets in the HashTable and the hash (a) of the string.
|
||||||
|
// static size_t bucket_index(const HashTable *ht, SlsStr key);
|
||||||
|
|
||||||
|
// Inserts an item into the HashTable based on its key. Returns FALSE on Memory Allocation Error.
|
||||||
|
Boolean hash_table_put(HashTable *ht, SlsStr key, void *item);
|
||||||
|
// Gets the item associated with the given key. Returns default item if not found.
|
||||||
|
void *hash_table_get(const HashTable *ht, SlsStr key, void *default_item);
|
||||||
|
// Deletes the item associated with the given key. Returns FALSE if item is not found.
|
||||||
|
Boolean hash_table_del(HashTable *ht, SlsStr key);
|
||||||
|
|
||||||
|
#endif // SLS_HASH_TABLE_H
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#include "sls/lexer.h"
|
#include "sls/lexer.h"
|
||||||
|
#include "sls/hash_table.h"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
STACK_IDENTIFIER,
|
STACK_IDENTIFIER,
|
||||||
|
|
@ -48,12 +49,12 @@ typedef struct StackItem {
|
||||||
Boolean boolean;
|
Boolean boolean;
|
||||||
TokenString token_string;
|
TokenString token_string;
|
||||||
};
|
};
|
||||||
StackItem *next;
|
struct StackItem *next;
|
||||||
} StackItem;
|
} StackItem;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
StackItem *stack;
|
StackItem *stack;
|
||||||
|
HashTable functions;
|
||||||
} InterpreterState;
|
} InterpreterState;
|
||||||
|
|
||||||
#endif // SLS_INTERPRETER_H
|
#endif // SLS_INTERPRETER_H
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
// Kyler Olsen
|
||||||
|
// YREA SLS
|
||||||
|
// Hash Table
|
||||||
|
// November 2025
|
||||||
|
|
||||||
|
#include "sls/hash_table.h"
|
||||||
Loading…
Reference in New Issue