[phrases] Adding num_keys attribute to trie
This commit is contained in:
22
src/trie.c
22
src/trie.c
@@ -56,6 +56,8 @@ static trie_t *trie_new_empty(uint8_t *alphabet, uint32_t alphabet_size) {
|
||||
|
||||
self->alphabet_size = alphabet_size;
|
||||
|
||||
self->num_keys = 0;
|
||||
|
||||
for (int i = 0; i < self->alphabet_size; i++) {
|
||||
self->alpha_map[alphabet[i]] = i;
|
||||
log_debug("setting alpha_map[%d] = %d\n", alphabet[i], i);
|
||||
@@ -657,6 +659,7 @@ bool trie_add_at_index(trie_t *self, uint32_t node_id, char *key, size_t len, ui
|
||||
}
|
||||
}
|
||||
|
||||
self->num_keys++;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -915,14 +918,13 @@ I/O methods
|
||||
*/
|
||||
|
||||
bool trie_write(trie_t *self, FILE *file) {
|
||||
if (!file_write_uint32(file, TRIE_SIGNATURE))
|
||||
return false;
|
||||
if (!file_write_uint32(file, (uint32_t)self->alphabet_size))
|
||||
return false;
|
||||
if (!file_write_chars(file, (char *)self->alphabet, self->alphabet_size))
|
||||
return false;
|
||||
if (!file_write_uint32(file, (uint32_t)self->nodes->n))
|
||||
if (!file_write_uint32(file, TRIE_SIGNATURE) ||
|
||||
!file_write_uint32(file, (uint32_t)self->alphabet_size)||
|
||||
!file_write_chars(file, (char *)self->alphabet, self->alphabet_size) ||
|
||||
!file_write_uint32(file, self->num_keys) ||
|
||||
!file_write_uint32(file, (uint32_t)self->nodes->n)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int i;
|
||||
trie_node_t node;
|
||||
@@ -1002,6 +1004,12 @@ trie_t *trie_read(FILE *file) {
|
||||
if (!trie)
|
||||
goto exit_file_read;
|
||||
|
||||
uint32_t num_keys;
|
||||
if (!file_read_uint32(file, &num_keys))
|
||||
goto exit_file_read;
|
||||
|
||||
trie->num_keys = num_keys;
|
||||
|
||||
uint32_t num_nodes;
|
||||
|
||||
if (!file_read_uint32(file, &num_nodes))
|
||||
|
||||
@@ -75,6 +75,7 @@ typedef struct trie {
|
||||
char *alphabet;
|
||||
uint8_t alpha_map[NUM_CHARS];
|
||||
int alphabet_size;
|
||||
uint32_t num_keys;
|
||||
} trie_t;
|
||||
|
||||
trie_t *trie_new_alphabet(uint8_t *alphabet, uint32_t alphabet_size);
|
||||
|
||||
Reference in New Issue
Block a user