-
Notifications
You must be signed in to change notification settings - Fork 0
/
b_estrela.h
60 lines (47 loc) · 1.86 KB
/
b_estrela.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
// Organização de Arquivos (SCC0215) - Trabalho 2
// Gabriel da Costa Merlin [12544420] & Pedro Augusto Monteiro Delgado [13672766]
/*
Este módulo contém a declaração das structs e das funções relacionadas à árvore-b*, como alocação, desalocação,
busca, leitura, escrita e inserção.
*/
#define ORDEM 5
#define TAM_PAGINA 76
#include "dados.h"
// Define um registro de cabeçalho de árvore-b*.
typedef struct _arv_cabecalho arv_cabecalho;
struct _arv_cabecalho {
char status;
int no_raiz;
int prox_rrn;
int nro_niveis;
int nro_chaves;
char lixo[59];
} ;
// Define uma chave (chave de busca + byte offset no registro de dados).
typedef struct _chave chave;
struct _chave {
int chave_busca;
long int byte_offset;
} ;
// Define uma página de disco.
typedef struct _pagina pagina;
struct _pagina {
int nivel;
int qntd_chaves;
int ponteiros[ORDEM];
chave chaves[ORDEM - 1];
} ;
// Aloca registro de cabeçalho da árvore-b*.
arv_cabecalho *alocar_arv_cabecalho();
// Desaloca registro de cabeçalho da árvore-b*.
void desalocar_arv_cabecalho(arv_cabecalho **C_arv);
// Lê, campo a campo, o registro de cabeçalho da árvore-b* a partir de um arquivo.
void ler_arv_cabecalho(FILE *arq_arv, arv_cabecalho *C_arv);
// Retorna o byte offset de uma chave buscada em uma árvore-b*. Retorna -1, caso não encontre.
long int encontrar_byte_offset(FILE *arq_arv, int rrn_raiz, int chave_buscada);
// Escreve, campo a campo, o registro de cabeçalho da árvore-b* num arquivo.
void escrever_arv_cabecalho(FILE *arq_arv, arv_cabecalho *C_arv);
// Inicializa os campos do registro de cabeçalho da árvore-b*.
void inicializar_arv_cabecalho(arv_cabecalho *C_arv);
// Indexa um registro de dados, inserindo-o em um arquivo de árvore-b*.
void inserir_b_estrela(FILE *arq_arv, arv_cabecalho *C_arv, reg_dados *D, long int byte_offset);