/** 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;
+}