From: Alan Kennedy Date: Thu, 27 May 2004 00:58:51 +0000 (+0000) Subject: b_plus_insertar_clave, deprecated and removed from source X-Git-Tag: svn_import_r684~172 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/613cc40875512c05124f15dae55e9bb7767c1ea2?ds=inline b_plus_insertar_clave, deprecated and removed from source --- diff --git a/emufs/b_plus.c b/emufs/b_plus.c index 863f070..a46e8b3 100644 --- a/emufs/b_plus.c +++ b/emufs/b_plus.c @@ -59,71 +59,6 @@ int emufs_b_plus_crear(INDEXSPECS *idx) { return error; } -/* 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; - int i,j, prox_nodo = 0; - - /* Comienzo leyendo la raiz, entry point de toda funcion */ - curnode = b_plus_leer_nodo(idx,0); - if (curnode == NULL) return -1; - padre = curnode; - while ( curnode->nivel > 0 && curnode ) { - for(i=0; icant_claves; i++){ - /* me fijo que si es mayor */ - if ( (query->clave.i_clave > curnode->claves[i])) { - if ( curnode->cant_claves != i ) /* si no es la ultima clave del nodo */ - continue; /*paso a la siguiente*/ - else { /* si era la ultima, la clave deberia ir ahi */ - /*cargo el proximo nodo*/ - prox_nodo = curnode->hijos[i+1]; - break; /*salgo del for*/ - } - } else { /*si no es mayor o igual es menor*/ - prox_nodo = curnode->hijos[i]; - break; - } - } - padre = curnode; - curnode = b_plus_leer_nodo(idx, prox_nodo); - } - /* aca tengo el nodo donde deberia ir la clave, y su padre */ - - 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); - 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]; - hijos_aux[i] = curnode->hijos[i]; - i++; - } - curnode->cant_claves++; - claves_aux[i] = query->clave.i_clave; - hijos_aux[i] = query->num_bloque; - for (j=i+1; jcant_claves; j++){ - claves_aux[j] = curnode->claves[j-1]; - hijos_aux[j] = curnode->hijos[j-1]; - } - free(curnode->claves); - free(curnode->hijos); - curnode->claves = claves_aux; - curnode->hijos = hijos_aux; - printf ("Prox Nodo es: %i\n",prox_nodo); - 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 ) - { - /**FIXME**/ - } - return 0; -} /** Busca el nro de bloque donde se debe guardar un reg con clave X. * Posibilidades: return 0 - Encontro un bloque potencial diff --git a/emufs/b_plus.h b/emufs/b_plus.h index c37cb4e..8a78100 100644 --- a/emufs/b_plus.h +++ b/emufs/b_plus.h @@ -38,7 +38,6 @@ int emufs_b_plus_insertar(INDEXSPECS *idx, INDEX_DAT *query); int emufs_b_plus_actualizar_nodo(INDEX_DAT *dataset); int emufs_b_plus_buscar(); int emufs_b_plus_destuir(); -int b_plus_insertar_clave(INDEXSPECS *, INDEX_DAT *); NODO_B_PLUS *b_plus_leer_nodo(INDEXSPECS *idx, int num); #endif