-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhash.h
More file actions
72 lines (56 loc) · 2.6 KB
/
hash.h
File metadata and controls
72 lines (56 loc) · 2.6 KB
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
#ifndef HASH_H
#define HASH_H
#ifdef __cplusplus
#include <cstddef>
#include <cstdint>
// This must be included here, so that the static stream objects are created
// before any function can be called.
#include <iostream>
#else
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#endif
#ifdef __cplusplus
namespace jnp1 {
extern "C" {
#endif
typedef unsigned long table_id_t; // Id jakiejś tablicy haszującej.
typedef uint64_t element_t; // Liczba całkowita, element ciągu.
typedef element_t const *const_sequence_t; // Ciąg liczb całkowitych.
typedef size_t hash_value_t; // Wartość zwracana przez funkcję haszującą.
typedef hash_value_t (*hash_function_t)(const_sequence_t,
size_t); // Funkcja haszująca ciągi.
/// Tworzy tablicę haszującą i zwraca jej identyfikator.
table_id_t hash_create(hash_function_t f);
/// Usuwa tablicę haszującą o identyfikatorze id, o ile ona istnieje. W
/// przeciwnym przypadku nic nie robi.
void hash_delete(table_id_t id);
/// Daje liczbę ciągów przechowywanych w tablicy haszującej o
/// identyfikatorze id lub 0, jeśli taka tablica nie istnieje.
size_t hash_size(table_id_t id);
/// Wstawia do tablicy haszującej o identyfikatorze id ciąg liczb całkowitych
/// seq o długości size. Wynikiem jest informacja, czy operacja się powiodła.
/// Operacja się nie powiedzie, jeśli nie ma takiej tablicy haszującej, jeśli
/// tablica haszująca zawiera już taki ciąg, jeśli parametr seq ma wartość NULL
/// lub parametr size ma wartość 0.
bool hash_insert(table_id_t id, const_sequence_t seq, size_t size);
/// Usuwa z tablicy haszującej o identyfikatorze id ciąg liczb całkowitych
/// seq o długości size. Wynikiem jest informacja, czy operacja się
/// powiodła. Operacja się nie powiedzie, jeśli nie ma takiej tablicy
/// haszującej, jeśli tablica haszująca nie zawiera takiego ciągu,
/// jeśli parametr seq ma wartość NULL lub parametr size ma wartość 0.
bool hash_remove(table_id_t id, const_sequence_t seq, size_t size);
/// Jeśli tablica haszująca o identyfikatorze id istnieje i nie jest pusta,
/// to usuwa z niej wszystkie elementy. W przeciwnym przypadku nic nie robi.
void hash_clear(table_id_t id);
/// Daje wynik true, jeśli istnieje tablica haszująca o identyfikatorze id
/// i zawiera ona ciąg liczb całkowitych seq o długości size. Daje wynik
/// false w przeciwnym przypadku oraz gdy parametr seq ma wartość NULL lub
/// parametr size ma wartość 0.
bool hash_test(table_id_t id, const_sequence_t seq, size_t size);
#ifdef __cplusplus
} // extern
} // namespace
#endif
#endif