]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/b_plus.c
Creacion de archivo B+, con insercion de nodo raiz, basic stuff
[z.facultad/75.06/emufs.git] / emufs / b_plus.c
index 51a77e9edb3f975a8b05b0f8e8e49a0fa03fe2d0..052b1122d179ce53d226672ed7ecbc919c1f0c47 100644 (file)
@@ -1,4 +1,57 @@
 /** Arbol B+ */
 #include "b_plus.h"
 
 /** Arbol B+ */
 #include "b_plus.h"
 
+/** Crea un nuevo nodo y lo inicializa */
+NODO_B_PLUS emufs_b_plus_crearnodo(INDICE *idx, int es_hoja) {
+       
+       NODO_B_PLUS nodo;
+       int nonheader_bytes = 0;
+       int size_claves = 0;
+       int size_hijos = 0;
+       
+       nodo.es_hoja = es_hoja;
+       nodo.nivel = 0;
+       nodo.cant_claves = 0;
 
 
+    /* Calculamos lo que ocupan las cadenas de bytes claves + hijos */
+       nonheader_bytes = idx->tam_bloque - sizeof(int)*3;      
+       size_claves = (nonheader_bytes - sizeof(int))/2;
+       size_hijos = size_claves + sizeof(int);
+       nodo.claves = (int*) malloc(size_claves);
+       nodo.hijos = (int*) malloc(size_hijos);
+       memset(nodo.claves,'1',size_claves);
+       memset(nodo.hijos,'9',size_hijos);
+       
+    return nodo;       
+}
+
+/** Crea el archivo indice B+ */
+int emufs_b_plus_crear(INDICE *idx) {
+       
+       FILE *fp;
+       NODO_B_PLUS raiz;
+       int size_claves = (idx->tam_bloque - SIZE_B_PLUS_HEADER - sizeof(int))/2;
+       int size_hijos = size_claves + sizeof(int);
+               
+       /* Creamos el archivo que contendra el indice */
+       fp = fopen(idx->filename, "w");
+       PERR("Creando indice");
+       fprintf(stderr, "Archivo = (%s)\n", idx->filename);
+       if (fp == NULL) {
+               PERR("Error al crear el archivo");
+               return -1;
+       }
+       
+       /* Creamos el nodo raiz y lo guardamos el en indice */
+       raiz = emufs_b_plus_crearnodo(idx,0);
+       fwrite(&raiz,SIZE_B_PLUS_HEADER,1,fp);
+       fwrite(raiz.claves,size_claves,1,fp);
+       fwrite(raiz.hijos,size_hijos,1,fp);
+       fclose(fp);
+       
+       /* Liberamos areas de memoria reservadas para claves e hijos */
+       free(raiz.claves);
+       free(raiz.hijos);
+       
+       return 0;
+}