EMUFS_BLOCK_SIZE offset; /* offset del bloque leído */
EMUFS_REG_ID reg_id;
EMUFS_TIPO1_REG_HEADER curr_reg_header; /* cabecera del registro a leer */
-
- block_id = emufs_idx_buscar_registro(efs, reg_id);
+ INDICE_DATO dato;
+
+ if (efs->indices != NULL) {
+ /* TODO : Verificar donde esta el indice primario */
+ dato = efs->indices->existe_entrada(efs->indices, clave);
+ block_id = dato.bloque;
+ reg_id = dato.id;
+ } else {
+ reg_id = clave.i_clave;
+ block_id = emufs_idx_buscar_registro(efs, reg_id);
+ }
if (block_id == EMUFS_NOT_FOUND) {
PERR("Registro no encontrado");
*err = EMUFS_NOT_FOUND;
EMUFS_BLOCK_ID curr_block_id;
/* tamaño de la porción de registro que se guarda */
EMUFS_REG_SIZE chunk_size = 0;
+ INDICE_DATO idx_data;
/* obtengo identificador que corresponderá al registro */
header.id = emufs_idx_get_new_id(efs, err);
PERR("No se pudo agregar idx");
return EMUFS_NOT_FOUND;
}
+ idx_data.id = header.id;
+ idx_data.bloque = block_id;
+ emufs_indice_agregar(efs->indices, reg, idx_data);
return header.id;
}
-int emufs_tipo1_borrar_registro(EMUFS* efs, EMUFS_REG_ID reg_id)
+int emufs_tipo1_borrar_registro(EMUFS* efs, CLAVE k)
{
char* block; /* bloque leido (en donde está el registro a leer) */
EMUFS_BLOCK_ID block_id; /* id del bloque en donde esta el registro a leer */
EMUFS_BLOCK_SIZE offset; /* offset del bloque leído */
EMUFS_TIPO1_REG_HEADER curr_reg_header; /* cabecera del registro a leer */
+ EMUFS_REG_ID reg_id;
+ INDICE_DATO dato;
int err = 0; /* para almacenar código de error */
- block_id = emufs_idx_buscar_registro(efs, reg_id);
- if (block_id == EMUFS_NOT_FOUND) {
- PERR("Registro no encontrado");
- return EMUFS_NOT_FOUND;
+ if (efs->indices != NULL) {
+ dato = efs->indices->existe_entrada(efs->indices, k);
+ block_id = dato.bloque; /*emufs_idx_buscar_registro(emu, ID);*/
+ reg_id = dato.id;
+ } else {
+ reg_id = k.i_clave;
+ block_id = emufs_idx_buscar_registro(efs, reg_id);
+ if (block_id == EMUFS_NOT_FOUND) {
+ PERR("Registro no encontrado");
+ return EMUFS_NOT_FOUND;
+ }
}
+
+ if (reg_id == -1) return EMUFS_NOT_FOUND;
+
if (!(block = (char*) emufs_tipo1_leer_bloque(efs, block_id, &err))) {
PERR("no se pudo reservar memoria");
return err;
return block_id;
}
-EMUFS_REG_ID emufs_tipo1_modificar_registro(EMUFS* efs, EMUFS_REG_ID id,
+EMUFS_REG_ID emufs_tipo1_modificar_registro(EMUFS* efs, CLAVE k,
void *data, EMUFS_REG_SIZE size, int* err)
{
- emufs_tipo1_borrar_registro(efs, id);
+ emufs_tipo1_borrar_registro(efs, k);
return emufs_tipo1_grabar_registro(efs, data, size, err);
}