return EMUFS_OK;
}
-void* emufs_tipo1_leer_registro(EMUFS* efs, EMUFS_REG_ID reg_id,
+void* emufs_tipo1_leer_registro(EMUFS* efs, CLAVE clave,
EMUFS_REG_SIZE* reg_size, int *err)
{
char* block; /* bloque leido (en donde está el registro a leer) */
char* registro; /* 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_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 {
+ /* TODO ID de donde lo puedo sacar :-) , lo cargo en 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;
}
void emufs_tipo1_compactar(EMUFS* efs)
{
+#ifdef ARREGLAR
EMUFS_BLOCK_SIZE block_space /* tamaño para datos de un bloque */
= efs->tam_bloque - sizeof(EMUFS_TIPO1_REG_HEADER);
EMUFS_REG_ID total_ids; /* cantidad total de registros en el array */
emufs_fsc_truncate(efs, block_id);
}
}
+#endif
}
EMUFS_BLOCK_ID emufs_tipo1_grabar_bloque_fsc(EMUFS *efs, void *block,