X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/d95cfe00c7dfecac65e0105a92d65f877a4a8e4f..ad2c7ad2d8e8e460bc0f9d790da9b7f315bc0125:/emufs/indice_b.c diff --git a/emufs/indice_b.c b/emufs/indice_b.c index d2d2242..f18312a 100644 --- a/emufs/indice_b.c +++ b/emufs/indice_b.c @@ -43,7 +43,7 @@ static void b_pasar_clave_a_izquierda(INDICE*, char*, int, char*, int, int, B_No /** Junta 2 nodos y hace uno solo */ static void b_fundir_nodo(INDICE *,char *, int, char *, int, char *, int, int); /** Crea 3 nodos a partir de 2 llenos */ -static void b_partir_dos_nodos_en_tres(INDICE*, int nodo_izq, int nodo_der, int padre, B_NodoEntry nuevo_entry); +static void b_partir_dos_nodos_en_tres(INDICE* idx, int nodo_izq, int nodo_der, B_NodoEntry padre_entry, B_NodoEntry nuevo_entry, int id_padre); static EMUFS_REG_ID b_insertar_dup_en_pos(INDICE *idx, INDICE_DATO pos, INDICE_DATO nuevo); @@ -1073,9 +1073,83 @@ static void desabreviar_claves(INDICE *idx, B_NodoEntry *array, B_NodoHeader *he free(primera); } -static void b_partir_dos_nodos_en_tres(INDICE* idx, int nodo_izq, int nodo_der, int padre, B_NodoEntry nuevo_entry) +void insertar_ordenado(INDICE *idx, B_NodoEntry *buffer, int cant, B_NodoEntry nuevo_entry) +{ + int i, pos; + for(i=0; (ipos; i--) + buffer[i] = buffer[i-1]; + + buffer[pos] = nuevo_entry; +} + +static void b_partir_dos_nodos_en_tres(INDICE* idx, int nodo_izq, int nodo_der, B_NodoEntry padre_entry, B_NodoEntry nuevo_entry, int id_padre) { PERR("PARTIR 2 EN 3"); + B_NodoEntry *buffer; + char *izq, *der, *padre, *nuevo; + B_NodoEntry *c_der, *c_izq, *c_nuevo, prom1, prom2; + B_NodoHeader h_der, h_izq, h_nuevo; + int i, j, nodo_nuevo; + int cant_claves; + + /* Leo los nodos y los datos */ + der = b_leer_nodo(idx, nodo_der); + izq = b_leer_nodo(idx, nodo_izq); + + b_leer_header(der, &h_der); + b_leer_header(izq, &h_izq); + + c_der = b_leer_claves(der, &h_der); + c_izq = b_leer_claves(izq, &h_izq); + + cant_claves = 2*CANT_HIJOS(idx)+2; + buffer = malloc(cant_claves*sizeof(B_NodoEntry)); + + for(i=0, j=0; i