X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/35c84de4b6d96cf3505ad2c075ff3998be04441b..40435bfb0df998d2d97ec9010535ca9a6cdffcd3:/emufs/indice_b.c?ds=inline diff --git a/emufs/indice_b.c b/emufs/indice_b.c index 2e0ff5d..96ada55 100644 --- a/emufs/indice_b.c +++ b/emufs/indice_b.c @@ -16,7 +16,8 @@ static void b_leer_header(char *src, B_NodoHeader *header); static void b_actualizar_header(char *src, B_NodoHeader *header); static B_NodoEntry *b_leer_claves(char *src, B_NodoHeader *header); static void b_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, int nodo_id, char *nodo, int hijo1, int hijo2); -const int b_elegir_izquierdo(INDICE *idx, int a, int b); +static int b_elegir_izquierdo(INDICE *idx, int a, int b); +static void b_borrar_clave(INDICE *idx, char *nodo, int nodo_id, CLAVE k); void emufs_indice_b_crear(INDICE *idx) { @@ -71,21 +72,11 @@ int emufs_indice_b_insertar(INDICE *idx, CLAVE clave, INDICE_DATO dato) return 0; } else { if (i == 0) { - if (header.nivel != 0) { - nodo = b_leer_nodo(idx, header.hijo_izquierdo); - nodo_id = header.hijo_izquierdo; - } else { - nodo = NULL; - nodo_id = -1; - } + nodo = b_leer_nodo(idx, header.hijo_izquierdo); + nodo_id = header.hijo_izquierdo; } else { - if (header.nivel != 0) { - nodo = b_leer_nodo(idx, claves[i-1].dato.bloque); - nodo_id = claves[i-1].dato.bloque; - } else { - nodo = NULL; - nodo_id = -1; - } + nodo = b_leer_nodo(idx, claves[i-1].hijo_derecho); + nodo_id = claves[i-1].hijo_derecho; } } } @@ -121,7 +112,7 @@ INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave) if (i == 0) { nodo = b_leer_nodo(idx, header.hijo_izquierdo); } else { - nodo = b_leer_nodo(idx, claves[i-1].dato.bloque); + nodo = b_leer_nodo(idx, claves[i-1].hijo_derecho); } free(tmp); } @@ -132,6 +123,50 @@ INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave) return ret; } +int emufs_indice_b_borrar(INDICE *idx, CLAVE k) +{ + /* Busco el nodo que contiene la clave,si es que esta existe */ + char *nodo; + int nodo_id, i; + char encontrado=0; + B_NodoHeader header; + B_NodoEntry *claves; + + nodo_id = 0; /* Tomo la raiz */ + nodo = b_leer_nodo(idx, nodo_id); + PERR("Buscando clave a borrar"); + while (nodo && !encontrado) { + /* Obtengo los datos del nodo */ + b_leer_header(nodo, &header); + claves = b_leer_claves(nodo, &header); + + i=0; + while ((i= MIN_HIJOS(idx)) { + PERR("Borrar completo sin fundir"); + return; + } + + /* Tengo que pasar datos o fundir nodos :-( */ + PERR("TODO : FUNDIR NODOS!!!!\n"); +} +