+ /* Libero y devuelvo exitcode */
+ b_plus_destruir_nodo(nodo);
+ return(exitcode);
+}
+
+int b_plus_reemplazar_clave(INDICE *idx, CLAVE key, INDEX_DAT query)
+{
+ NODO_B_PLUS *nodo;
+ int i;
+ INDEX_DAT auxquery;
+ auxquery.clave = key;
+
+ /* Comienzo buscando la clave y obteniendo el nodo en donde esta */
+ if (b_plus_existe_clave(idx,&auxquery,0) == 1) {
+
+ /* Levanto el nodo y busco donde esta la clave */
+ printf("El reemplazar encontro la clave %i y en el nodo %i\n",auxquery.clave.i_clave,(int)auxquery.num_bloque);
+ nodo = b_plus_leer_nodo(idx,auxquery.num_bloque);
+ if (nodo == NULL) return -1;
+ i = nodo->cant_claves - 1;
+
+ /* Busco la clave y reemplazo */
+ while ( i >= 0 && key.i_clave != nodo->claves[i].i_clave ) --i;
+ if (i < 0) return -1; /* Error, no esta la clave */
+
+ /* Cheque por las dudas si es hoja o interno, aunque deberia ser hoja */
+ if (nodo->nivel > 0) {
+ nodo->claves[i] = query.clave;
+ } else {
+ nodo->claves[i] = query.clave;
+ nodo->hijos[i] = query.num_bloque;
+ }
+ b_plus_grabar_nodo(idx,nodo,auxquery.num_bloque);
+ b_plus_destruir_nodo(nodo);
+ return 0;
+ }
+ else return -1;