]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs/indice_b.h
Insertar B+ en teoria fully working con encadenamiento en hojas y toda la mar en...
[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 #include <curses.h>
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         /** Dato guardado */
26         INDICE_DATO dato;
27         /** El ID de la hoja de depliega a la derecha */
28         int hijo_derecho;
29 } B_NodoEntry;
30
31 /** Crea un árbol */
32 void emufs_indice_b_crear(INDICE *idx);
33
34 /** Inserta un par clave-ubicacion */
35 int emufs_indice_b_insertar(INDICE *idx, CLAVE clave, INDICE_DATO dato);
36
37 /** Borra una entrada */
38 int emufs_indice_b_borrar(INDICE *idx, CLAVE k);
39
40 /** Busca una clave, retorna ubicacion o -1 si no existe */
41 INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave);
42
43 INDICE_DATO *emufs_indice_b_buscar_muchos(INDICE *idx, CLAVE clave, int *cant);
44
45 /* Private! */
46 /** Lee un nodo desde el archivo */
47 char *b_leer_nodo(INDICE *idx, int id);
48
49 /** Lee el header de un nodo y lo guarda en header */
50 void b_leer_header(char *src, B_NodoHeader *header);
51
52 /** Retorna el array de claves del nodo (esta data modifica directamente el bloque
53  *  por eso no es necesario usar un actualizar_claves 
54  */
55 B_NodoEntry *b_leer_claves(char *src, B_NodoHeader *header);
56
57 #endif
58