From 59919f765235b85942e36bfb4f49cca55e509073 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicol=C3=A1s=20Dimov?= Date: Tue, 25 May 2004 21:34:00 +0000 Subject: [PATCH] arreglos de la primera parte --- emufs/b_plus.c | 28 +++++++++++-------- emufs/b_plus.h | 75 +++++++++++++++++++++++++------------------------- 2 files changed, 54 insertions(+), 49 deletions(-) diff --git a/emufs/b_plus.c b/emufs/b_plus.c index ab84026..80b8f40 100644 --- a/emufs/b_plus.c +++ b/emufs/b_plus.c @@ -8,8 +8,9 @@ int b_plus_grabar_nodo(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_node); NODO_B_PLUS *b_plus_crearnodo(INDEXSPECS *idx); int b_plus_destruir_nodo(NODO_B_PLUS *nodo); /*int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query);*/ -int b_plus_insert_nonfull(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_nodo, int num_nodo_padre, CLAVE clave); -int b_plus_split_child(INDEXSPECS *idx,NODO_B_PLUS *new_root, int ,NODO_B_PLUS* raiz); +int b_plus_insert_nonfull(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_nodo, INDEX_DAT *query); +int b_plus_split_child(INDEXSPECS *idx,NODO_B_PLUS *new_root, int i, NODO_B_PLUS* raiz); +int b_plus_insertar(INDEXSPECS *idx, INDEX_DAT *query); /**#*#*#*#*#**#*#*#*#*#*FIN PROTOTYPES*#*#*#*#*#**#*#*#*#*#**#*#*#*#*#*/ /** Crea un nuevo nodo y lo inicializa */ @@ -278,39 +279,39 @@ int b_plus_destruir_nodo(NODO_B_PLUS *nodo) return 0; } -int b_plus_insert_nonfull(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_nodo, int num_nodo_padre, CLAVE clave) +int b_plus_insert_nonfull(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_nodo, INDEX_DAT *query) { int i, num_nodo_hijo; NODO_B_PLUS *hijo; i = nodo->cant_claves; if ( nodo->nivel == 0 ){ - while ( i >= 1 && clave.i_clave < nodo->claves[i] ){ + while ( i >= 1 && query->clave.i_clave < nodo->claves[i] ){ nodo->claves[i+1] = nodo->claves[i]; i--; } - nodo->claves[i+1] = clave.i_clave; + nodo->claves[i+1] = query->clave.i_clave; nodo->cant_claves++; b_plus_destruir_nodo(nodo); b_plus_grabar_nodo(idx, nodo, num_nodo); } else { - while ( i >= 1 && clave.i_clave < nodo->claves[i] ) + while ( i >= 1 && query->clave.i_clave < nodo->claves[i] ) i--; i++; num_nodo_hijo = nodo->hijos[i-1]; hijo = b_plus_leer_nodo(idx, num_nodo_hijo); if ( hijo->cant_claves == idx->size_claves/sizeof(int) ) { b_plus_split_child(idx, nodo, i, hijo); - if ( clave.i_clave > nodo->claves[i] ) + if ( query->clave.i_clave > nodo->claves[i] ) i++; } - b_plus_insert_nonfull(idx, hijo, num_nodo_hijo, num_nodo_padre); + b_plus_insert_nonfull(idx, hijo, num_nodo_hijo, query); } b_plus_destruir_nodo(hijo); return 0; } -int b_tree_insertar(INDEXSPECS *idx, CLAVE clave) +int b_plus_insertar(INDEXSPECS *idx, INDEX_DAT *query) { NODO_B_PLUS *raiz; @@ -322,12 +323,17 @@ int b_tree_insertar(INDEXSPECS *idx, CLAVE clave) b_plus_grabar_nodo(idx, raiz, new_root->hijos[0]); b_plus_grabar_nodo(idx, new_root, 0); b_plus_split_child(idx, new_root, 1, raiz); - b_plus_insert_nonfull(idx, new_root, 0, clave); - } else b_plus_insert_nonfull(idx, raiz, 0, clave); + b_plus_insert_nonfull(idx, new_root, 0, query); + } else b_plus_insert_nonfull(idx, raiz, 0, query); return 0; } +int b_plus_split_child(INDEXSPECS *idx, NODO_B_PLUS *new_root, int i, NODO_B_PLUS* raiz) +{ + return 0; +} + int b_plus_get_num_nodo(INDEXSPECS *idx) { FILE *fp; diff --git a/emufs/b_plus.h b/emufs/b_plus.h index 076f2b1..70dae0c 100644 --- a/emufs/b_plus.h +++ b/emufs/b_plus.h @@ -1,43 +1,42 @@ -#ifndef _B_PLUS_H_ -#define _B_PLUS_H_ -#include -#include -#include "emufs.h" - -#define SIZE_B_PLUS_HEADER (sizeof(int)*2) - +#ifndef _B_PLUS_H_ +#define _B_PLUS_H_ +#include +#include +#include "emufs.h" + +#define SIZE_B_PLUS_HEADER (sizeof(int)*2) + /** 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 _indexspecs_ { - unsigned int tam_bloque; - unsigned int size_claves; - unsigned int size_hijos; - char *filename; -} INDEXSPECS; - -typedef struct _index_dat_ { - EMUFS_BLOCK_ID num_bloque; - EMUFS_BLOCK_ID num_nuevo_bloque; - CLAVE clave; -} INDEX_DAT; - + */ + +typedef struct _indexspecs_ { + unsigned int tam_bloque; + unsigned int size_claves; + unsigned int size_hijos; + char *filename; +} INDEXSPECS; + +typedef struct _index_dat_ { + EMUFS_BLOCK_ID num_bloque; + CLAVE clave; +} INDEX_DAT; + typedef struct nodo_b_plus { - int nivel; /** Nivel del nodo */ + int nivel; /** Nivel del nodo */ int cant_claves; /** Cantidad de claves en el nodo */ int *claves; /** Claves del nodo */ - int *hijos; /** Para nodo interno, ref nodos sucesores. Nodo hoja, ref a nro bloque en .dat */ -} NODO_B_PLUS; - - -/** TODO */ -int emufs_b_plus_crear(INDEXSPECS *idx); -int emufs_b_plus_get_bloque(INDEXSPECS *idx, INDEX_DAT *dataset); -int emufs_b_plus_actualizar_nodo(INDEX_DAT *dataset); -int emufs_b_plus_buscar(); -int emufs_b_plus_destuir(); -int b_plus_insertar_clave(INDEXSPECS *, INDEX_DAT *); -NODO_B_PLUS *b_plus_leer_nodo(INDEXSPECS *idx, int num); - -#endif + int *hijos; /** Para nodo interno, ref nodos sucesores. Nodo hoja, ref a nro bloque en .dat */ +} NODO_B_PLUS; + + +/** TODO */ +int emufs_b_plus_crear(INDEXSPECS *idx); +int emufs_b_plus_get_bloque(INDEXSPECS *idx, INDEX_DAT *dataset); +int emufs_b_plus_actualizar_nodo(INDEX_DAT *dataset); +int emufs_b_plus_buscar(); +int emufs_b_plus_destuir(); +int b_plus_insertar_clave(INDEXSPECS *, INDEX_DAT *); +NODO_B_PLUS *b_plus_leer_nodo(INDEXSPECS *idx, int num); + +#endif -- 2.43.0