-
Notifications
You must be signed in to change notification settings - Fork 0
/
hash.h
76 lines (58 loc) · 2.13 KB
/
hash.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifndef HASH_H
#define HASH_H
#include <stdbool.h>
#include <stddef.h>
// Los structs deben llamarse "hash" y "hash_iter".
struct hash;
struct hash_iter;
typedef struct hash hash_t;
typedef struct hash_iter hash_iter_t;
// tipo de función para destruir dato
typedef void (*hash_destruir_dato_t)(char**);
/* Crea el hash
*/
hash_t *hash_crear(hash_destruir_dato_t destruir_dato);
/* Guarda un elemento en el hash, si la clave ya se encuentra en la
* estructura, la reemplaza. De no poder guardarlo devuelve false.
* Pre: La estructura hash fue inicializada
* Post: Se almacenó el par (clave, dato)
*/
bool hash_guardar(hash_t *hash, const char *clave, void *dato);
/* Borra un elemento del hash y devuelve el dato asociado. Devuelve
* NULL si el dato no estaba.
* Pre: La estructura hash fue inicializada
* Post: El elemento fue borrado de la estructura y se lo devolvió,
* en el caso de que estuviera guardado.
*/
void *hash_borrar(hash_t *hash, const char *clave);
/* Obtiene el valor de un elemento del hash, si la clave no se encuentra
* devuelve NULL.
* Pre: La estructura hash fue inicializada
*/
void *hash_obtener(const hash_t *hash, const char *clave);
/* Determina si clave pertenece o no al hash.
* Pre: La estructura hash fue inicializada
*/
bool hash_pertenece(const hash_t *hash, const char *clave);
/* Devuelve la cantidad de elementos del hash.
* Pre: La estructura hash fue inicializada
*/
size_t hash_cantidad(const hash_t *hash);
/* Destruye la estructura liberando la memoria pedida y llamando a la función
* destruir para cada par (clave, dato).
* Pre: La estructura hash fue inicializada
* Post: La estructura hash fue destruida
*/
void hash_destruir(hash_t *hash);
/* Iterador del hash */
// Crea iterador
hash_iter_t *hash_iter_crear(const hash_t *hash);
// Avanza iterador
bool hash_iter_avanzar(hash_iter_t *iter);
// Devuelve clave actual, esa clave no se puede modificar ni liberar.
const char *hash_iter_ver_actual(const hash_iter_t *iter);
// Comprueba si terminó la iteración
bool hash_iter_al_final(const hash_iter_t *iter);
// Destruye iterador
void hash_iter_destruir(hash_iter_t* iter);
#endif // HASH_H