]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/indice_b.c
primera parte del insertar
[z.facultad/75.06/emufs.git] / emufs / indice_b.c
index 893a814ef1ed3ab0150eb37e00aedebf323ccc13..9a5118dabc05a223b8d952cf6b38b8e4ddd83b2b 100644 (file)
@@ -71,8 +71,6 @@ void emufs_indice_b_crear(INDICE *idx)
        header.hijo_izquierdo = -1;
 
        fp = fopen(idx->filename, "w");
        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;
        if (fp == NULL) {
                PERR("Error al crear el archivo");
                return;
@@ -144,10 +142,6 @@ int emufs_indice_b_insertar(INDICE *idx, CLAVE clave, INDICE_DATO dato)
                 */
                dummy.id = -1;
                dato.id = b_insertar_dup_en_pos(idx, dummy, dato);
                 */
                dummy.id = -1;
                dato.id = b_insertar_dup_en_pos(idx, dummy, dato);
-               if (dato.id != -1)
-                       PERR("NODO INSERTADO EN POS GENERADA NUEVA");
-       PERR("Ahora inserto");
-       fprintf(stderr, "Nombre del coso = %s\n", idx->nombre);
        }
 
        b_insertar_en_nodo(idx, clave, dato, nodo_id, nodo, -1, -1);
        }
 
        b_insertar_en_nodo(idx, clave, dato, nodo_id, nodo, -1, -1);
@@ -164,10 +158,8 @@ INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave)
        int nodo_id;
        
        /* Leo la raiz */
        int nodo_id;
        
        /* Leo la raiz */
-       PERR("LEO LA RAIZ");
        nodo = b_leer_nodo(idx, 0);
        nodo_id = 0;
        nodo = b_leer_nodo(idx, 0);
        nodo_id = 0;
-       PERR("VAMOS");
        while (nodo) {
                b_leer_header(nodo, &header);
                claves = b_leer_claves(nodo, &header);
        while (nodo) {
                b_leer_header(nodo, &header);
                claves = b_leer_claves(nodo, &header);
@@ -208,7 +200,6 @@ int emufs_indice_b_borrar(INDICE *idx, CLAVE k)
 
        nodo_id = 0; /* Tomo la raiz */
        nodo = b_leer_nodo(idx, nodo_id);
 
        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);
        while (nodo && !encontrado) {
                /* Obtengo los datos del nodo */
                b_leer_header(nodo, &header);
@@ -379,16 +370,25 @@ static void b_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, int n
                        i=0;
                        /* Creo una lista ordenada de los nodos a partir */
                        tmp_claves = (B_NodoEntry *)malloc(sizeof(B_NodoEntry)*(nodo_header.cant+1));
                        i=0;
                        /* Creo una lista ordenada de los nodos a partir */
                        tmp_claves = (B_NodoEntry *)malloc(sizeof(B_NodoEntry)*(nodo_header.cant+1));
-                       total = nodo_header.cant;
+                       total = nodo_header.cant+1;
                        while ((i<nodo_header.cant) && (emufs_indice_es_menor(idx, claves[i].clave, clave))) {
                                tmp_claves[i] = claves[i];
                                i++;
                        }
                        tmp_claves[i].clave = clave;
                        tmp_claves[i].dato = dato;
                        while ((i<nodo_header.cant) && (emufs_indice_es_menor(idx, claves[i].clave, clave))) {
                                tmp_claves[i] = claves[i];
                                i++;
                        }
                        tmp_claves[i].clave = clave;
                        tmp_claves[i].dato = dato;
-                       tmp_claves[i].hijo_derecho = hijo1;
-                       if (i<nodo_header.cant)
-                               tmp_claves[i+1].hijo_derecho = hijo2;
+                       /*tmp_claves[i].hijo_derecho = hijo1;*/
+                       if (i==0) {
+                               nodo_header.hijo_izquierdo = hijo1;
+                               tmp_claves[i].hijo_derecho = hijo2;
+                       } else {
+                               tmp_claves[i-1].hijo_derecho = hijo1;
+                               tmp_claves[i].hijo_derecho = hijo2;
+                       }
+/*                     if (i == 0)
+                               nodo_header.hijo_izquierdo = hijo2;
+                       else
+                               tmp_claves[i+1].hijo_derecho = hijo2;*/
                        while (i < nodo_header.cant) {
                                tmp_claves[i+1] = claves[i];
                                i++;
                        while (i < nodo_header.cant) {
                                tmp_claves[i+1] = claves[i];
                                i++;
@@ -398,8 +398,8 @@ static void b_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, int n
                        b_leer_header(nuevo, &nuevo_header);
 
                        nuevo_header.nivel = nodo_header.nivel;
                        b_leer_header(nuevo, &nuevo_header);
 
                        nuevo_header.nivel = nodo_header.nivel;
-                       nodo_header.cant = total/2;
-                       nuevo_header.cant = total - nodo_header.cant;
+                       nodo_header.cant = total/2-1;
+                       nuevo_header.cant = (total-1) - nodo_header.cant;
 
                        memset(claves, '*', idx->tam_bloque-sizeof(B_NodoHeader));
                        for(j=0; j<nodo_header.cant; j++)
 
                        memset(claves, '*', idx->tam_bloque-sizeof(B_NodoHeader));
                        for(j=0; j<nodo_header.cant; j++)
@@ -408,7 +408,7 @@ static void b_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, int n
                        claves_nuevo = b_leer_claves(nuevo, &nuevo_header);
                        memset(claves_nuevo, '*', idx->tam_bloque-sizeof(B_NodoHeader));
                        for(j=0; j<nuevo_header.cant; j++)
                        claves_nuevo = b_leer_claves(nuevo, &nuevo_header);
                        memset(claves_nuevo, '*', idx->tam_bloque-sizeof(B_NodoHeader));
                        for(j=0; j<nuevo_header.cant; j++)
-                               claves_nuevo[j] = tmp_claves[j+total/2+1];
+                               claves_nuevo[j] = tmp_claves[j+total/2];
 
                        b_actualizar_header(nodo, &nodo_header);
                        b_actualizar_header(nuevo, &nuevo_header);
 
                        b_actualizar_header(nodo, &nodo_header);
                        b_actualizar_header(nuevo, &nuevo_header);
@@ -489,8 +489,14 @@ void b_insertar_en_nodo_con_lugar(INDICE *idx, CLAVE clave, INDICE_DATO dato, in
        nodo_header.cant++;
        claves[i].clave = clave;
        claves[i].dato = dato;
        nodo_header.cant++;
        claves[i].clave = clave;
        claves[i].dato = dato;
-       claves[i].hijo_derecho = hijo2;
-       nodo_header.hijo_izquierdo = b_elegir_izquierdo(idx, nodo_header.hijo_izquierdo, hijo1);
+       if (i==0) {
+               nodo_header.hijo_izquierdo = hijo1;
+               claves[i].hijo_derecho = hijo2;
+       } else {
+               claves[i-1].hijo_derecho = hijo1;
+               claves[i].hijo_derecho = hijo2;
+       }
+       /*b_elegir_izquierdo(idx, nodo_header.hijo_izquierdo, hijo1);*/
 
        b_actualizar_header(nodo, &nodo_header);
        b_grabar_nodo(idx, nodo_id, nodo);
 
        b_actualizar_header(nodo, &nodo_header);
        b_grabar_nodo(idx, nodo_id, nodo);
@@ -585,7 +591,6 @@ INDICE_DATO *emufs_indice_b_buscar_muchos(INDICE *idx, CLAVE clave, int *cant)
        ret = malloc(sizeof(INDICE_DATO)*(*cant));
        memcpy(ret, leido+sizeof(int), (*cant)*sizeof(INDICE_DATO));
        free(leido);
        ret = malloc(sizeof(INDICE_DATO)*(*cant));
        memcpy(ret, leido+sizeof(int), (*cant)*sizeof(INDICE_DATO));
        free(leido);
-       fprintf(stderr, "TENGO QUE ESTA CLAVE TIENE %d ITEMS\n", *cant);
        return ret;
 }
 
        return ret;
 }
 
@@ -937,7 +942,6 @@ static void desabreviar_claves(INDICE *idx, B_NodoEntry *array, B_NodoHeader *he
                }
                iguales = strtol(actual, &resto, 10);
                if ((iguales > 0) && (*resto == '|')) {
                }
                iguales = strtol(actual, &resto, 10);
                if ((iguales > 0) && (*resto == '|')) {
-                       fprintf(stderr, "%s %s %d\n", primera, actual, iguales); 
                        strncpy(salvar, primera, iguales);
                        salvar[iguales] = '\0';
                        strcat(salvar, resto+1); /* +1 para saltar el separador */
                        strncpy(salvar, primera, iguales);
                        salvar[iguales] = '\0';
                        strcat(salvar, resto+1); /* +1 para saltar el separador */