Prakticke aspekty vývoje softwaru: Projekt 1 – Testování  1.0
Projekt zaměřený na osvojení praktik testování včetně technik test driven development, black box testing a white box testing.
white_box_code.h
Zobrazit dokumentaci tohoto souboru.
1 //======== Copyright (c) 2023, FIT VUT Brno, All rights reserved. ============//
2 //
3 // Purpose: White Box - hash map class code
4 //
5 // $NoKeywords: $ivs_project_1 $white_box_code.h
6 // $Authors: Karel Ondřej <ondrej@fit.vutbr.cz>
7 // Martin Dočekal <idocekal@fit.vutbr.cz>
8 // $Date: $2023-02-15
9 //============================================================================//
22 #ifndef HASH_MAP_H_
23 #define HASH_MAP_H_
24 
25 #include <stdlib.h>
26 #include <string.h>
27 #include <stddef.h>
28 #include <stdbool.h>
29 
31 #define HASH_MAP_INIT_SIZE 8
32 
33 #define HASH_MAP_PERTURB_SHIFT 5
34 
35 #define HASH_MAP_REALLOCATION_THRESHOLD 3/5.
36 
37 #define HASH_FUNCTION_PARAM_A 1794967309
38 
39 #define HASH_FUNCTION_PARAM_B 7
40 
41 // Informace pro C++ překladač, aby použil "C" linker pro následující funkce.
42 extern "C" {
43 
44 /*******************************************************************************
45  * Inicializace, deinicializace & alokace paměti
46  ******************************************************************************/
55 typedef enum {
56  OK,
57  MEMORY_ERROR,
62 
76 typedef struct hash_map_item
77 {
78  char* key;
79  size_t hash;
80  int value;
81  struct hash_map_item* next;
82  struct hash_map_item* prev;
84 
92 typedef struct hash_map
93 {
97 
99  size_t allocated;
100  size_t used;
101 } hash_map_t;
102 
103 /*******************************************************************************
104  * Inicializace, deinicializace & alokace paměti
105  ******************************************************************************/
126 
144 void hash_map_dtor(hash_map_t* self);
145 
151 void hash_map_clear(hash_map_t* self);
152 
178 
179 /*******************************************************************************
180  * Metody pro přístup k hašovací tabulce
181  ******************************************************************************/
191 size_t hash_map_size(hash_map_t* self);
192 
207 size_t hash_map_capacity(hash_map_t* self);
208 
221 bool hash_map_contains(hash_map_t* self, const char* key);
222 
245 hash_map_state_code_t hash_map_put(hash_map_t* self, const char* key,
246  int value);
247 
268 hash_map_state_code_t hash_map_get(hash_map_t* self, const char* key,
269  int* value);
270 
297 hash_map_state_code_t hash_map_pop(hash_map_t* self, const char* key,
298  int* value);
299 
323 hash_map_state_code_t hash_map_remove(hash_map_t* self, const char* key);
324 
325 } // extern "C" ending
326 
327 #endif // HASH_MAP_H_
328 
329 /*** Konec souboru white_box_code.h ***/
hash_map_dtor
void hash_map_dtor(hash_map_t *self)
Destruktor hašovací tabulky.
Definition: white_box_code.cpp:169
hash_map::used
size_t used
Počet vložených položek (velikost seznamu)
Definition: white_box_code.h:100
hash_map_put
hash_map_state_code_t hash_map_put(hash_map_t *self, const char *key, int value)
Vloží klíč a hodnotu do tabulky.
Definition: white_box_code.cpp:242
hash_map_state_code_t
hash_map_state_code_t
Výčet návratových hodnot.
Definition: white_box_code.h:55
KEY_ALREADY_EXISTS
@ KEY_ALREADY_EXISTS
Klíč již v hašovací tabulce existuje.
Definition: white_box_code.h:62
hash_map_reserve
hash_map_state_code_t hash_map_reserve(hash_map_t *self, size_t size)
Realokace rezervovaného místa pro index.
Definition: white_box_code.cpp:179
hash_map_ctor
hash_map_t * hash_map_ctor()
Konstruktor hašovací tabulky.
Definition: white_box_code.cpp:134
hash_map_clear
void hash_map_clear(hash_map_t *self)
Dealokace vytvořeních položek a vymazání indexu.
Definition: white_box_code.cpp:145
hash_map_item::next
struct hash_map_item * next
Následující položka.
Definition: white_box_code.h:81
hash_map_item::key
char * key
Klíč
Definition: white_box_code.h:78
hash_map::index
hash_map_item_t ** index
Index hašovací tabulky.
Definition: white_box_code.h:94
hash_map_capacity
size_t hash_map_capacity(hash_map_t *self)
Vrací alokované místa pro tabulku.
Definition: white_box_code.cpp:230
OK
@ OK
Vše v pořádku.
Definition: white_box_code.h:58
hash_map
Datový typ hašovací tabulky.
Definition: white_box_code.h:92
hash_map_item_t
struct hash_map_item hash_map_item_t
Záznam v hašovací tabulce.
hash_map_pop
hash_map_state_code_t hash_map_pop(hash_map_t *self, const char *key, int *value)
Uloží hodnotu z hašovací tabulky a odstraní záznam.
Definition: white_box_code.cpp:320
hash_map_item::hash
size_t hash
Hash.
Definition: white_box_code.h:79
hash_map_item::prev
struct hash_map_item * prev
Předcházející položka.
Definition: white_box_code.h:82
VALUE_ERROR
@ VALUE_ERROR
Neplatná hodnota argumentu.
Definition: white_box_code.h:60
hash_map_remove
hash_map_state_code_t hash_map_remove(hash_map_t *self, const char *key)
Odstranění položky z hašovací tabulky.
Definition: white_box_code.cpp:314
hash_map::first
hash_map_item_t * first
První položka v seznamu.
Definition: white_box_code.h:95
hash_map_item::value
int value
Uložená hodnota.
Definition: white_box_code.h:80
hash_map_contains
bool hash_map_contains(hash_map_t *self, const char *key)
Obsahuje tabulka záznam s daným klíčem?
Definition: white_box_code.cpp:235
MEMORY_ERROR
@ MEMORY_ERROR
Problém při alokaci paměti.
Definition: white_box_code.h:59
hash_map_size
size_t hash_map_size(hash_map_t *self)
Vrací počet vložených záznamů do tabulky.
Definition: white_box_code.cpp:225
hash_map::last
hash_map_item_t * last
Poslední položka v seznamu.
Definition: white_box_code.h:96
hash_map::allocated
size_t allocated
Alokované místo (velikost indexu)
Definition: white_box_code.h:99
KEY_ERROR
@ KEY_ERROR
Přístup ke klíči který není vložen v tabulce.
Definition: white_box_code.h:61
hash_map_get
hash_map_state_code_t hash_map_get(hash_map_t *self, const char *key, int *value)
Uloží hodnotu asociovanou se zadaným klíčem na určené místo v paměti.
Definition: white_box_code.cpp:298
hash_map_t
struct hash_map hash_map_t
Datový typ hašovací tabulky.
hash_map_item
Záznam v hašovací tabulce.
Definition: white_box_code.h:76
hash_map::dummy
hash_map_item_t * dummy
Při odstranění je položka v indexu nahrazena tímto ukazatelem.
Definition: white_box_code.h:98