From: Nicolás Dimov Date: Wed, 12 May 2004 16:21:50 +0000 (+0000) Subject: subo algunas ideas que no se si prosperaran pero supongo que es en lo que trabajaremo... X-Git-Tag: svn_import_r684~255 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/f62c69db84c4f3b567bd5dbd1eede1490b48b534?ds=inline subo algunas ideas que no se si prosperaran pero supongo que es en lo que trabajaremos con Alan mañana --- diff --git a/emufs/b_plus.c b/emufs/b_plus.c new file mode 100644 index 0000000..51a77e9 --- /dev/null +++ b/emufs/b_plus.c @@ -0,0 +1,4 @@ +/** Arbol B+ */ +#include "b_plus.h" + + diff --git a/emufs/b_plus.h b/emufs/b_plus.h new file mode 100644 index 0000000..0b6d035 --- /dev/null +++ b/emufs/b_plus.h @@ -0,0 +1,37 @@ +#ifndef _B_PLUS_H_ +#define _B_PLUS_H_ +#include +#include +#include "emufs.h" +typedef union _clave_b_plus { + int num; + /*fixme*/ +}CLAVE_B_PLUS; + +typedef struct nodo_b_plus { + int nivel; /** Nivel del nodo */ + int cant; /** Cantidad de items en el nodo */ + int right /** Referencia al nodo derecho */ + int left; /** Referencia al nodo izquierdo */ + CLAVE_B_PLUS clave; /** Clave de busqueda e insercion */ +} NODO_B_PLUS; + +typedef struct nodo_b_plus_hoja { + int nivel; /** Nivel del nodo */ + int cant; /** Cantidad de claves en el nodo */ + int offset; /** Distancia hasta el comiezo de la clave */ + EMUFS_BLOCK_ID bloque; /** Referencia al bloque */ + EMUFS_REG_ID id_reg; /** Identificador del registro */ + EMUFS_FREE free_space; /** Espacio libre del bloque */ + void *dato; /** Cadena contenedora del dato */ +} NODO_B_PLUS_HOJA; + +/** TODO */ +int b_plus_crear(); +int b_plus_insertar(); +int b_plus_eliminar(); +int b_plus_buscar(); +int b_plus_destuir(); + + +#endif diff --git a/emufs/tipo3.c b/emufs/tipo3.c index a1d0f19..c9bddec 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -547,3 +547,17 @@ void emufs_tipo3_leer_bloque_raw(EMUFS *efs, EMUFS_BLOCK_ID id, char **actual, c } (*size1) = (*size2) = (*size3) = efs->tam_bloque; } + +int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, CLAVE clave, int *err) +{ + FILE *f; + char f_name[255]; + char *bloque; + + strcpy(f_name, emu->nombre); + strcat(f_name, ".dat"); + + + + return 0; +} diff --git a/emufs/tipo3.h b/emufs/tipo3.h index c47c97f..c4b860e 100644 --- a/emufs/tipo3.h +++ b/emufs/tipo3.h @@ -78,7 +78,7 @@ void* emufs_tipo3_leer_bloque(EMUFS *emu, EMUFS_BLOCK_ID block_id, int *err); * \param ptr Cadena de datos que contiene el registro a grabar. * \param err Codigo de error devuelto en caso de falla. */ -EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE, int *err); +EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE reg_size, int *err); /** Graba el bloque apuntado por \c ptr en el archivo * \param emu Esructura para manejar los archivos. @@ -134,4 +134,11 @@ void emufs_tipo3_compactar(EMUFS *emu); */ void emufs_tipo3_leer_bloque_raw(EMUFS *emu, EMUFS_BLOCK_ID block_id, char **actual, char **anterior, char **siguiente, EMUFS_BLOCK_SIZE *size1, EMUFS_BLOCK_SIZE *size2, EMUFS_BLOCK_SIZE *size3); +/** Inserta un registro ordenado segun el Arbol B+ lo indique + * \param emu Esructura para manejar los archivos. + * \param ptr Cadena de datos contenedora del registro. + * \param clave Clave de ordenamiento. + */ +int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, CLAVE clave, int *err); + #endif /* _EMUFS_TIPO3_H_ */