X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/63f9cc2172df9d346457685096b4de200c084e9e..e8fa2ccccf10bdfcff1aedbaf919f3bc823f1ecf:/emufs/indice_b.c?ds=sidebyside diff --git a/emufs/indice_b.c b/emufs/indice_b.c index abbdfbc..9a9e9fe 100644 --- a/emufs/indice_b.c +++ b/emufs/indice_b.c @@ -1,5 +1,6 @@ #include "indice_b.h" +#include "common.h" /* Cantidad de claves por nodo */ #define CANT_HIJOS(x) ((x->tam_bloque-sizeof(B_NodoHeader))/sizeof(B_NodoEntry)) @@ -29,6 +30,12 @@ void emufs_indice_b_crear(INDICE *idx) header.hijo_izquierdo = -1; fp = fopen(idx->filename, "w"); + PERR("Creando indice"); + fprintf(stderr, "Archivo = (%s)\n", idx->filename); + if (fp == NULL) { + PERR("Error al crear el archivo"); + return; + } /* Creo el archivo con el Nodo raiz */ bloque = (char *)malloc(idx->tam_bloque); @@ -64,21 +71,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; } } } @@ -114,7 +111,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); } @@ -265,6 +262,8 @@ static void b_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, int n } tmp_claves[i].clave = clave; tmp_claves[i].dato = dato; + tmp_claves[i].hijo_derecho = hijo1; + tmp_claves[i+1].hijo_derecho = hijo2; while (i < nodo_header.cant) { tmp_claves[i+1] = claves[i]; i++; @@ -291,7 +290,7 @@ static void b_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, int n if (nodo_id != 0) { clave = tmp_claves[total/2].clave; - dato.bloque = nuevo_id; + /* XXX dato.bloque = nuevo_id; */ b_grabar_nodo(idx, nodo_id, nodo); b_grabar_nodo(idx, nuevo_id, nuevo); @@ -314,7 +313,7 @@ static void b_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, int n nodo = tmp_nuevo; clave = tmp_claves[total/2].clave; - dato.bloque = nuevo_id; + /* XXX dato.bloque = nuevo_id; */ b_grabar_nodo(idx, nuevo_id+1, nodo); b_grabar_nodo(idx, nuevo_id, nuevo); @@ -352,7 +351,8 @@ static void b_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, int n nodo_header.cant++; claves[i].clave = clave; claves[i].dato = dato; - nodo_header.hijo_izquierdo = b_elegir_izquierdo(idx, nodo_header.hijo_izquierdo, hijo1); + claves[i].hijo_derecho = hijo2; + nodo_header.hijo_izquierdo = hijo1; /*b_elegir_izquierdo(idx, nodo_header.hijo_izquierdo, hijo1);*/ b_actualizar_header(nodo, &nodo_header); b_grabar_nodo(idx, nodo_id, nodo);