]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Creacion de archivo B+, con insercion de nodo raiz, basic stuff
authorAlan Kennedy <kennedya@3dgames.com.ar>
Sat, 15 May 2004 23:53:05 +0000 (23:53 +0000)
committerAlan Kennedy <kennedya@3dgames.com.ar>
Sat, 15 May 2004 23:53:05 +0000 (23:53 +0000)
emufs/Makefile
emufs/b_plus.c
emufs/b_plus.h
emufs/b_plus_test.c [new file with mode: 0644]

index f98675dcfa8e5ebd67fad73d59d52e9c76f4da84..7c7f81ed060ed8fbe8511d417c3376943e9191b5 100644 (file)
@@ -1,7 +1,7 @@
 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
 
@@ -11,6 +11,9 @@ tipo2_main: tipo2_main.o $(EMUFS_COMMON)
 
 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)
index 51a77e9edb3f975a8b05b0f8e8e49a0fa03fe2d0..052b1122d179ce53d226672ed7ecbc919c1f0c47 100644 (file)
@@ -1,4 +1,57 @@
 /** 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;
+}
index 16544d1b024d35cc50380a777fb474682312068f..b498be6b7bcf1ba978cb0abbf7c482fd98b9b505 100644 (file)
@@ -3,30 +3,27 @@
 #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
diff --git a/emufs/b_plus_test.c b/emufs/b_plus_test.c
new file mode 100644 (file)
index 0000000..a06eadd
--- /dev/null
@@ -0,0 +1,14 @@
+
+#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;
+
+}