CFLAGS=-Wall -g -ansi -pedantic -DDEBUG
LDFLAGS=-lm
-EMUFS_COMMON=emufs.o tipo1.o tipo2.o tipo3.o idx.o did.o fsc.o common.o indices.o indice_b.o
+EMUFS_COMMON=emufs.o tipo1.o tipo2.o tipo3.o idx.o did.o fsc.o common.o indices.o indice_b.o b_plus.o
all: libemufs.a tipo1_main tipo2_main tipo3_main b_test
tipo3_main: tipo3_main.o $(EMUFS_COMMON)
+b_plus_test: b_plus_test.o $(EMUFS_COMMON)
+#b_plus_test: b_plus_test.o b_plus.o indices.o emufs.o
+
#b_test: b_test.o indice_b.o
libemufs.a: $(EMUFS_COMMON)
/** 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;
+}
#include <stdio.h>
#include <stdlib.h>
#include "emufs.h"
-typedef union _clave_b_plus {
- int num;
- /*fixme*/
-}CLAVE_B_PLUS;
-\r
+
+#define SIZE_B_PLUS_HEADER (sizeof(int)*3)
+
/** Estructura que define un nodo B+. Para los nodos hojas, el ultimo valor de hijo, serĂ¡ el nro\r
* de nodo con el que se encadena el actual. (Lista de nodos a nivel hoja. Sequence Set).\r
*/
typedef struct nodo_b_plus {
int es_hoja;\r
int nivel; /** Nivel del nodo */
- int cant; /** Cantidad de items en el nodo */\r
+ int cant_claves; /** Cantidad de claves en el nodo */\r
int *claves; /** Claves del nodo */\r
int *hijos; /** Para nodo interno, ref nodos sucesores. Nodo hoja, ref a nro bloque en .dat */
} NODO_B_PLUS;
-
/** TODO */
-int b_plus_crear();
-int b_plus_insertar();
-int b_plus_eliminar();
-int b_plus_buscar();
-int b_plus_destuir();
+int emufs_b_plus_crear(INDICE *idx);
+int emufs_b_plus_insertar();
+int emufs_b_plus_eliminar();
+int emufs_b_plus_buscar();
+int emufs_b_plus_destuir();
#endif
--- /dev/null
+
+#include "b_plus.h"
+
+int main(int argc, char* argv[]) {
+
+/* Creamos un handler EMUFS, luego un Indice B+ y testing... */
+EMUFS *emu = emufs_crear("testbplus",T3,512, 128);
+INDICE *indice = emufs_indice_crear(emu,"principal",0,0,0,0,sizeof(int)*12);
+emufs_b_plus_crear(indice);
+printf ("Yeiiiii\n");
+
+return 0;
+
+}