From: Nicolás Dimov Date: Sun, 16 May 2004 22:57:30 +0000 (+0000) Subject: arranca B+, se va a poner aspera la cosa X-Git-Tag: svn_import_r684~239 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/8567a7085f7e311712244a69a1d1a45737a9ae32?ds=sidebyside arranca B+, se va a poner aspera la cosa --- diff --git a/emufs/b_plus.c b/emufs/b_plus.c index 052b112..7e2fa16 100644 --- a/emufs/b_plus.c +++ b/emufs/b_plus.c @@ -55,3 +55,8 @@ int emufs_b_plus_crear(INDICE *idx) { return 0; } + +/** Inserta una clave en el arbol */ +INDEX_DAT emufs_b_plus_insertar(CLAVE clave) +{ + INDEX_DAT insertado; diff --git a/emufs/b_plus.h b/emufs/b_plus.h index b498be6..fd96060 100644 --- a/emufs/b_plus.h +++ b/emufs/b_plus.h @@ -9,6 +9,12 @@ /** Estructura que define un nodo B+. Para los nodos hojas, el ultimo valor de hijo, será el nro * de nodo con el que se encadena el actual. (Lista de nodos a nivel hoja. Sequence Set). */ + +typedef struct _index_dat_ { + EMUFS_BLOCK_ID num_bloque; + CLAVE clave; +} INDEX_DAT; + typedef struct nodo_b_plus { int es_hoja; int nivel; /** Nivel del nodo */ @@ -20,8 +26,10 @@ typedef struct nodo_b_plus { /** TODO */ int emufs_b_plus_crear(INDICE *idx); -int emufs_b_plus_insertar(); -int emufs_b_plus_eliminar(); +INDEX_DAT emufs_b_plus_insertar(CLAVE clave); +INDEX_DAT emufs_b_plus_actualizar_nodo(CLAVE clave, EMUFS_BLOCK_ID num_bloque); + +int emufs_b_plus_eliminar(CLAVE clave); int emufs_b_plus_buscar(); int emufs_b_plus_destuir(); diff --git a/emufs/tipo3.c b/emufs/tipo3.c index ac73429..10d6f33 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -575,16 +575,27 @@ void emufs_tipo3_leer_bloque_raw(EMUFS *efs, EMUFS_BLOCK_ID id, char **actual, c (*size1) = (*size2) = (*size3) = efs->tam_bloque; } +CLAVE obtener_clave(void *ptr, INDICE indice) +{ + CLAVE clave; + + switch ( indice->tipo_dato ){ + case IDX_FLOAT: + memcpy(&clave, ptr+indice->offset, sizeof(float)); + break; + case IDX_INT: + memcpy(&clave, ptr+indice->offset, sizeof(int)); + } + return clave; +} + int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, CLAVE clave, int offset, EMUFS_BLOCK_ID num_bloque, int *err) { - FILE *f; - char f_name[255]; + /*FILE *f; + char f_name[255];*/ char *bloque; - int size; CLAVE clave_ant; - - strcpy(f_name, emu->nombre); - strcat(f_name, ".dat"); + bloque = emufs_tipo3_leer_bloque(emu, num_bloque, err); if (err){ diff --git a/emufs/tipo3.h b/emufs/tipo3.h index b141782..9e0311f 100644 --- a/emufs/tipo3.h +++ b/emufs/tipo3.h @@ -46,6 +46,7 @@ #include "did.h" #include "idx.h" #include "fsc.h" +#include "b_plus.h" /** Devuelve un puntero con la memoria reservada que contiene al registro solicitado * por el segundo parámetro \c ID, y almacena en \c reg_size el tamaño del