]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/b_plus.c
Ya estaria el algoritmo para rotar a izquierda cuando se inserta en el B*.
[z.facultad/75.06/emufs.git] / emufs / b_plus.c
index 757a2573da50d05d558d356425953a75be3b1ba9..6b3193a5e35a996b5684f2ebd8e017e7c417c480 100644 (file)
@@ -1,5 +1,6 @@
 /** Arbol B+ */
 #include "b_plus.h"
+#include <math.h>
 
 /**#*#*#*#*#**#*#*#*#*#* Private prototypes*#*#*#*#*#**#*#*#*#*#**#*#*#*/
 /* numerando los bloques */
@@ -11,6 +12,7 @@ int b_plus_destruir_nodo(NODO_B_PLUS *nodo);
 int b_plus_split_child(INDEXSPECS *idx, NODO_B_PLUS *parent, int ithchild, NODO_B_PLUS *fullnode);
 int b_plus_insert_nonfull(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_nodo, INDEX_DAT *query);
 int b_plus_insertar(INDEXSPECS *idx, INDEX_DAT *query);
+int b_plus_get_num_nodo(INDEXSPECS *idx);
 /**#*#*#*#*#**#*#*#*#*#*FIN PROTOTYPES*#*#*#*#*#**#*#*#*#*#**#*#*#*#*#*/
 
 /** Crea un nuevo nodo y lo inicializa */
@@ -61,7 +63,7 @@ int emufs_b_plus_crear(INDEXSPECS *idx) {
 /* Inserta una nueva clave y reestructura el arbol para que quede como debe */
 int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query)
 {
-       NODO_B_PLUS *curnode, *padre, *new_nodo;
+       NODO_B_PLUS *curnode, *padre;
        int i,j, prox_nodo;
        /* Comienzo leyendo la raiz, entry point de toda funcion */
        curnode = b_plus_leer_nodo(idx,0);      
@@ -283,7 +285,7 @@ int b_plus_split_child(INDEXSPECS *idx, NODO_B_PLUS *parent, int ithchild, NODO_
 {
        /* locals */
        int minclaves = ceil(idx->size_hijos/sizeof(int)/2)-1;
-       int j = 0;
+       int numbrother,j = 0;
        int es_interno = 1;
        
        NODO_B_PLUS *brother = b_plus_crearnodo(idx);
@@ -309,7 +311,7 @@ int b_plus_split_child(INDEXSPECS *idx, NODO_B_PLUS *parent, int ithchild, NODO_
        fullnode->cant_claves = minclaves;
        /* Obtengo numero de nodo para brother, para encadenar */
        numbrother = b_plus_get_num_nodo(idx);
-       fullnode->hijos[idx->cant_claves+1] = numbrother;
+       fullnode->hijos[idx->size_hijos/sizeof(int)-1] = numbrother;
        
        /* Ahora fixeamos el padre, apuntando al nuevo hijo */
        for (j = parent->cant_claves; j > ithchild; --j)
@@ -320,6 +322,8 @@ int b_plus_split_child(INDEXSPECS *idx, NODO_B_PLUS *parent, int ithchild, NODO_
        for (j = parent->cant_claves-1; j >= ithchild; --j)
                parent->claves[j+1] = parent->claves[j];
        parent->claves[ithchild] = fullnode->claves[minclaves];
+       
+       return 0;
 }
 
 
@@ -373,11 +377,6 @@ int b_plus_insertar(INDEXSPECS *idx, INDEX_DAT *query)
     return 0;
 }
 
-int b_plus_split_child(INDEXSPECS *idx, NODO_B_PLUS *new_root, int i, NODO_B_PLUS* raiz)
-{
-    return 0;
-}
-
 int b_plus_get_num_nodo(INDEXSPECS *idx)
 {
        FILE *fp;