]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/b_plus.c
* BUGFIX : un error de orden de condiciones hacia que las claves multiples
[z.facultad/75.06/emufs.git] / emufs / b_plus.c
index 1c1c083066aec443295d7ea41b014d4719512be7..61e7b4ccd4609e3ad0fe9c011bf1d2c8b6fe8c5b 100644 (file)
@@ -4,10 +4,10 @@
 /**#*#*#*#*#**#*#*#*#*#* Private prototypes*#*#*#*#*#**#*#*#*#*#**#*#*#*/
 /* numerando los bloques */
 int b_plus_grabar_nodo(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_node);
 /**#*#*#*#*#**#*#*#*#*#* Private prototypes*#*#*#*#*#**#*#*#*#*#**#*#*#*/
 /* numerando los bloques */
 int b_plus_grabar_nodo(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_node);
-NODO_B_PLUS *b_plus_leer_nodo(INDEXSPECS *idx, int num_node);
+/*NODO_B_PLUS *b_plus_leer_nodo(INDEXSPECS *idx, int num_node);*/
 NODO_B_PLUS *b_plus_crearnodo(INDEXSPECS *idx);
 int b_plus_destruir_nodo(NODO_B_PLUS *nodo);
 NODO_B_PLUS *b_plus_crearnodo(INDEXSPECS *idx);
 int b_plus_destruir_nodo(NODO_B_PLUS *nodo);
-int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query);
+/*int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query);*/
 
 /**#*#*#*#*#**#*#*#*#*#*FIN PROTOTYPES*#*#*#*#*#**#*#*#*#*#**#*#*#*#*#*/
 
 
 /**#*#*#*#*#**#*#*#*#*#*FIN PROTOTYPES*#*#*#*#*#**#*#*#*#*#**#*#*#*#*#*/
 
@@ -86,9 +86,11 @@ int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query)
        } 
        /* aca tengo el nodo donde deberia ir la clave, y su padre */ 
        
        } 
        /* aca tengo el nodo donde deberia ir la clave, y su padre */ 
        
-       if ( curnode->cant_claves < idx->size_claves ){
+       if ( curnode->cant_claves < idx->size_claves/sizeof(int) ){
                int *claves_aux = (int*)malloc(idx->size_claves);
                int *hijos_aux = (int*)malloc(idx->size_hijos);
                int *claves_aux = (int*)malloc(idx->size_claves);
                int *hijos_aux = (int*)malloc(idx->size_hijos);
+               memset(claves_aux,-1,idx->size_claves);
+               memset(hijos_aux,-1,idx->size_hijos);
                i = 0;
                while ( (curnode->claves[i] < query->clave.i_clave) && (i < curnode->cant_claves)){
                        claves_aux[i] = curnode->claves[i];
                i = 0;
                while ( (curnode->claves[i] < query->clave.i_clave) && (i < curnode->cant_claves)){
                        claves_aux[i] = curnode->claves[i];
@@ -109,9 +111,7 @@ int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query)
                b_plus_grabar_nodo(idx, curnode, prox_nodo);
                b_plus_destruir_nodo(curnode);
        }
                b_plus_grabar_nodo(idx, curnode, prox_nodo);
                b_plus_destruir_nodo(curnode);
        }
-                       
-       
-       
+               
        /* si el nodo esta lleno tengo que splitear */
        if ( curnode->cant_claves == idx->size_claves ) 
        {
        /* si el nodo esta lleno tengo que splitear */
        if ( curnode->cant_claves == idx->size_claves ) 
        {
@@ -149,7 +149,7 @@ int emufs_b_plus_get_bloque(INDEXSPECS *idx, INDEX_DAT *query) {
                b_plus_destruir_nodo(curnode);
                return 0;
        } 
                b_plus_destruir_nodo(curnode);
                return 0;
        } 
-       
+       PERR("TENGO LA HOJA");  
        /* Mientras no encontre la hoja con la clave, busco.. */
        /* RECORDAR QUE LAS CLAVES DEBEN ESTAR ORDENADAS PARA QUE ESTO FUNCIONE !! */ 
        while (curnode->nivel > 0 && curnode){  
        /* Mientras no encontre la hoja con la clave, busco.. */
        /* RECORDAR QUE LAS CLAVES DEBEN ESTAR ORDENADAS PARA QUE ESTO FUNCIONE !! */ 
        while (curnode->nivel > 0 && curnode){  
@@ -194,6 +194,7 @@ int emufs_b_plus_get_bloque(INDEXSPECS *idx, INDEX_DAT *query) {
                                /* Llamo a la funcion que mete una clave nueva en el arbol y le paso el bloque a donde 
                                   tiene que apuntar */
                                b_plus_insertar_clave(idx, query);
                                /* Llamo a la funcion que mete una clave nueva en el arbol y le paso el bloque a donde 
                                   tiene que apuntar */
                                b_plus_insertar_clave(idx, query);
+                               b_plus_destruir_nodo(curnode);
                                return 1; /* SE INSERTO NODO NUEVO */
                        } else {
                                query->num_bloque = curnode->hijos[i-1];
                                return 1; /* SE INSERTO NODO NUEVO */
                        } else {
                                query->num_bloque = curnode->hijos[i-1];