Files
ds/ds.h
2025-08-16 18:25:33 -04:00

132 lines
2.8 KiB
C

#ifndef _DS_LOADED
#define _DS_LOADED
typedef struct _sll {
struct _sll *next;
void *data;
} ds_sll_t;
typedef struct _dll {
struct _dll *next;
struct _dll *prev;
void *data;
} ds_dll_t;
typedef struct {
ds_sll_t **data;
unsigned data_len;
} ds_hmp_t;
typedef struct {
char *key;
void *val;
} _ds_hmp_kv_t;
#define ds_ll_foreach(t, ll) for (t *cur = ll; cur; cur = cur->next)
/**
* @brief create a new allocated node for a singly linked list
*
* @param data the data you want to store
* @return the node
*/
ds_sll_t *ds_sll_new_node(void *data);
/**
* @brief create a new allocated node for a doubly linked list
*
* @param data the data you want to store
* @return the node
*/
ds_dll_t *ds_dll_new_node(void *data);
/**
* @brief data to insert into a singly linked list. This will use
* ds_sll_new_node to create the node for you.
*
* @param ll singly linked list
* @param data data you want to add
*/
void ds_sll_insert(ds_sll_t *ll, void *data);
/**
* @brief data to insert into a doubly linked list. This will use
* ds_sll_new_node to create the node for you.
*
* @param ll doubly linked list
* @param data data you want to add
*/
void ds_dll_insert(ds_dll_t *ll, void *data);
/**
* @brief remove an index from a singly linked list
*
* @param ll singly linked list
* @param idx the node
* @return the data in the node
*/
void *ds_sll_remove(ds_sll_t **ll, unsigned idx);
/**
* @brief remove an index from a doubly linked list
*
* @param ll doubly linked list
* @param idx the node
* @return the data in the node
*/
void *ds_dll_remove(ds_dll_t **ll, unsigned idx);
/**
* @brief initialize a new hashmap
*
* @param data_len the amount of slots in the array
* @return the hashmap
*/
ds_hmp_t *ds_hmp_init(int data_len);
/**
* @brief free all data allocated by ds_hmp_init and ds_hmp_insert
*
* @param hmp pointer to the hashmap
*/
void ds_hmp_free(ds_hmp_t **hmp);
/**
* @brief generate a numerical hash from a given string. You shouldn't need to
* use this, but it's available just incase.
*
* @param str
* @return the hash
*/
int _ds_hmp_gen_hash(char *str);
/**
* @brief insert data at key (which will be hashed using _ds_hmp_gen_hash). You
* are responsible for freeing the key later.
*
* @param hmp the hashmap to insert into
* @param key the key
* @param data the data
*/
void ds_hmp_insert(ds_hmp_t *hmp, char *key, void *data);
/**
* @brief get something from a hashmap using it's key
*
* @param hmp the hashmap
* @param key the key where it's stored
* @return the data stored at the key
*/
void *ds_hmp_get(ds_hmp_t *hmp, char *key);
/**
* @brief remove something from a hashmap using it's key
*
* @param hmp the hashmap
* @param key the key where it's stored
* @return the data stored at the key
*/
void *ds_hmp_remove(ds_hmp_t *hmp, char *key);
#endif