]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Hago que se agregue una entrada en los restantes indices cuando se inserta ordenado...
authorAlan Kennedy <kennedya@3dgames.com.ar>
Mon, 31 May 2004 07:47:59 +0000 (07:47 +0000)
committerAlan Kennedy <kennedya@3dgames.com.ar>
Mon, 31 May 2004 07:47:59 +0000 (07:47 +0000)
emufs/tipo1.c

index ff437d01e8144d4695dd84805e20b0a763ec3029..43de0ee40e7785a0e8a5f4c6f5ce2baa8d2cb257 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;
@@ -1057,6 +1072,7 @@ int emufs_tipo1_eliminar_ordenado(EMUFS *emu, CLAVE clave, INDICE_DATO dato)
                        iter += tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER);
                        break;/*ya borre, corto aca*/
                }
+               else memcpy(&id, aux, sizeof(EMUFS_REG_ID)); 
                iter += tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER);
                aux += tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER);
        }
@@ -1082,6 +1098,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;
 }