forked from matildeopbravo/shafa
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dynamic_arrays.h
139 lines (116 loc) · 3.12 KB
/
dynamic_arrays.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/**
* @file dynamic_arrays.h
* @author Alexandre Flores, Guilherme Fernandes, Maria Rita, Mariana Rodrigues,
Matilde Bravo e Miguel Gomes.
* @date 03 Janeiro 2021
* @brief Estruturas de arrays dinâmicos.
*/
#ifndef DYNAMIC_ARRAYS_H
#define DYNAMIC_ARRAYS_H
#include <assert.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
/**
\brief Símbolos relativos ao bloco sem compressão.
*/
typedef struct ByteVec {
uint8_t *vec; /**< Array dos símbolos. */
size_t used; /**< Número de elementos usados no array. */
size_t size; /**< Tamanho total do array. */
} ByteVec;
/**
\brief Array de caracteres dinâmico.
*/
typedef struct CharVec {
char *vec; /**< Array dos caracteres. */
size_t used; /**< Número de elementos usados no array. */
size_t size; /**< Tamanho total do array. */
} CharVec;
/**
\brief Compressão de um símbolo.
*/
typedef struct ByteTupple {
uint8_t byte; /**< Símbolo. */
uint8_t count; /**< Número de ocorrências. */
} ByteTupple;
/**
\brief Símbolos relativos ao bloco com compressão.
*/
typedef struct TuppleVec {
ByteTupple *vec; /**< Array dos símbolos. */
size_t used; /**< Número de elementos usados no array. */
size_t n_used; /**< Tamanho do array sem compressão. */
size_t size; /**< Tamanho total do array. */
} TuppleVec;
/**
\brief Função que devolve o tamanho do array dinâmico.
*/
size_t byte_vec_size(ByteVec const *);
/**
\brief Função que devolve o número de elementos do array dinâmico.
*/
size_t byte_vec_used(ByteVec const *);
/**
\brief Função que returna o elemento que no index dado.
*/
uint8_t byte_vec_index(ByteVec const *, size_t);
/**
\brief Função que elimina o último elemento do array.
\return Elemento eliminado.
*/
uint8_t byte_vec_pop(ByteVec *);
/**
\brief Inicializa uma array de caracteres dinâmico.
*/
CharVec char_vec_new();
/**
\brief Função que adiciona uma caracter ao array dinâmico.
*/
void char_vec_push(CharVec *self, char c);
/**
\brief Liberte o espaço alocado.
*/
void char_vec_del(CharVec *self);
/**
\brief Inicializa uma array de elementos dinâmico.
*/
ByteVec *byte_vec_new();
/**
\brief Função que adiciona o elemento dado ao array dinâmico.
*/
void byte_vec_push(ByteVec *, uint8_t);
/**
\brief Liberte o espaço alocado.
*/
void byte_vec_del(ByteVec *);
/**
\brief Função que devolve o tamanho do array dinâmico.
*/
size_t tupple_vec_size(TuppleVec const *);
/**
\brief Função que devolve o número de elementos do array dinâmico.
*/
size_t tupple_vec_used(TuppleVec const *);
/**
\brief Função que returna o elemento que no index dado.
*/
ByteTupple tupple_vec_index(TuppleVec const *, size_t);
/**
\brief Função que elimina o último elemento do array.
\return Elemento eliminado.
*/
ByteTupple tupple_vec_pop(TuppleVec *);
/**
\brief Inicializa uma array de elementos dinâmico.
*/
TuppleVec *tupple_vec_new();
/**
\brief Função que adiciona o elemento dado ao array dinâmico.
*/
void tupple_vec_push(TuppleVec *, uint8_t, uint8_t);
/**
\brief Liberte o espaço alocado.
*/
void tupple_vec_del(TuppleVec *);
#endif /* DYNAMIC_ARRAYS_H */