]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs/indice_b.h
7093de2a080eb9de11955fe73bfe358d2f13bbc8
[z.facultad/75.06/emufs.git] / emufs / indice_b.h
1
2
3 #ifndef _ARBOL_B_
4 #define _ARBOL_B_ 1
5
6 #include <stdio.h>
7 #include <stdlib.h>
8
9 #include "common.h"
10 #include "indices.h"
11
12 typedef struct _b_nodo_header_ {
13         int nivel; /* Numero de nivel. Si es hoja debe ser 0 */
14         int cant; /* Cantidad de items en el nivel */
15         int padre;
16         
17         /* Nodo al que debo ir si la clave a insertar/buscar/borrar
18          * es menor que la primera del nodo
19          */
20         int hijo_izquierdo;
21 } B_NodoHeader;
22
23 typedef struct _b_nodo_entry_ {
24         CLAVE clave;
25         /* Si el nivel del nodo == 0, quiere decir que es el 
26          * bloque del archivo de datos donde esta el registro.
27          * Si el nivel != 0, es el siguiente bloque dentro 
28          * del archivo de indice donde buscar
29          */
30         INDICE_DATO dato;
31         /* El ID de la hoja de depliega a la derecha */
32         int hijo_derecho;
33 } B_NodoEntry;
34
35 /* Crea un arbol */
36 void emufs_indice_b_crear(INDICE *idx);
37
38 /* Inserta un par clave-ubicacion */
39 int emufs_indice_b_insertar(INDICE *idx, CLAVE clave, INDICE_DATO dato);
40
41 /* Busca una clave, retorna ubicacion o -1 si no existe */
42 INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave);
43
44 INDICE_DATO *emufs_indice_b_buscar_muchos(INDICE *idx, CLAVE clave, int *cant);
45
46 #endif
47