]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/tipo1.c
Paso el fin de lĂ­nea a formato Unix (perdon tenia que verlo para estudiar :P).
[z.facultad/75.06/emufs.git] / emufs / tipo1.c
index ff437d01e8144d4695dd84805e20b0a763ec3029..1f4138dd272d9b93c1ac75019c86fcdfa41893b9 100644 (file)
@@ -783,6 +783,7 @@ EMUFS_REG_ID emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
        EMUFS_BLOCK_ID num_bloque; 
        EMUFS_TIPO1_REG_HEADER header;
        EMUFS_REG_SIZE tam_reg, move_size;
+       INDICE_DATO idx_data;
        INDEX_DAT query;
        EMUFS_FREE fs;
        char *bloque = 0, *aux, *new_bloque = 0;
@@ -841,10 +842,14 @@ EMUFS_REG_ID emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
                if ( num_bloque != emufs_create_new_block(emu) )        PERR("NUMEROS DE NUEVO BLOQUE DISTINTOS");
                /*grabo el bloque en el archivo*/ /* OJO CON LO DE FS = 0 */
                emufs_tipo1_grabar_bloque_fsc(emu, bloque, query.num_bloque, EMUFS_NOT_FOUND, err);
-               /*agrego la clave al arbol*/
+               /*agrego la clave al arbol bpus*/
                emufs_b_plus_insertar(emu->indices, &query);
                /*agrego el id a idx*/
                emufs_idx_agregar(emu, header.id, query.num_bloque);
+               /*agrego a los demas arboles que no sean bplus*/
+               idx_data.id = header.id;
+               idx_data.bloque = query.num_bloque;
+               emufs_indice_agregar(emu->indices->sig, ptr, idx_data);
                free(bloque);
                return header.id;
        } else { /*tengo que meter el registro en el bloque que me dijo el arbol*/
@@ -865,6 +870,9 @@ EMUFS_REG_ID emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
                        PERR("GRABO ORDENADO");                 
                        grabar_ordenado_en_bloque(emu, ptr, size, bloque, query.num_bloque, fs, err);
                        /*en teoria el nuevo registro no debe cambiar el ancla, por lo cual no actualizo el arbol*/
+                       idx_data.id = header.id;
+                       idx_data.bloque = query.num_bloque;
+                       emufs_indice_agregar(emu->indices->sig, ptr, idx_data);
                        free(bloque);
                        return header.id;
                } else { /* el registro no entra en el bloque, hay que crear uno nuevo y desparramar */
@@ -901,7 +909,10 @@ EMUFS_REG_ID emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
                                b_plus_actualizar_ids(emu, new_bloque, query.num_bloque);
                                /*actualizo el arbol con la nueva clave*/
                                query.clave = clave;
+                               idx_data.id = header.id;
+                               idx_data.bloque = query.num_bloque;
                                emufs_b_plus_insertar(emu->indices, &query);
+                               emufs_indice_agregar(emu->indices->sig, ptr, idx_data);
                                /*grabo el bloque original*/
                                emufs_tipo1_grabar_bloque_fsc(emu, bloque, num_bloque, EMUFS_NOT_FOUND, err);
                        } else {
@@ -925,7 +936,10 @@ EMUFS_REG_ID emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
                                grabar_ordenado_en_bloque(emu,ptr,size,bloque,num_bloque,fs+move_size,err);
                                /*actualizo el arbol con la menor clave del bloque nuevo*/
                                query.clave = emufs_indice_generar_clave(emu->indices, new_bloque+sizeof(EMUFS_TIPO1_REG_HEADER));
+                               idx_data.id = header.id;
+                               idx_data.bloque = query.num_bloque;
                                emufs_b_plus_insertar(emu->indices, &query);
+                               emufs_indice_agregar(emu->indices->sig, ptr, idx_data);
                        }
                        if(*err != 0){
                                PERR("NO SE PUDO GRABAR ORDENADO");
@@ -1011,6 +1025,7 @@ int emufs_tipo1_eliminar_ordenado(EMUFS *emu, CLAVE clave, INDICE_DATO dato)
 {
        char *bloque, *aux;
        INDEX_DAT query;
+       INDICE_DATO idx_data;
        int result, iter, cant_reg;
        EMUFS_REG_SIZE tam_reg;
        EMUFS_REG_ID id;
@@ -1056,7 +1071,7 @@ int emufs_tipo1_eliminar_ordenado(EMUFS *emu, CLAVE clave, INDICE_DATO dato)
                        /*me posiciono en el reg siguiente*/
                        iter += tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER);
                        break;/*ya borre, corto aca*/
-               }
+               }               
                iter += tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER);
                aux += tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER);
        }
@@ -1082,6 +1097,10 @@ int emufs_tipo1_eliminar_ordenado(EMUFS *emu, CLAVE clave, INDICE_DATO dato)
                }
        }
        emufs_idx_borrar(emu, id);
+       /* Elimino la entrada de los restantes arboles */                               
+       idx_data.id = id;
+       idx_data.bloque = query.num_bloque;
+       emufs_indice_borrar(emu->indices->sig, clave, idx_data);
        free(bloque);
        return 0;
 }