6 #include "indice_bplus.h"
7 int no_esta(int num, int* vec, int len)
12 if ( vec[i] == num ) res = 0;
17 void ver_arbol(EMUFS *emu)
20 int num_nodo, num_nodo_ant,i, tecla;
24 nodo = b_plus_leer_nodo(emu->indices, num_nodo);
25 printf("NODO: (hijo)clave\n");
26 printf("Nivel: %d\n", nodo->nivel);
27 for (i=0; i<nodo->cant_claves; i++)
28 printf("(%d)%d", nodo->hijos[i], nodo->claves[i]);
29 printf("(%d)",nodo->hijos[i]);
31 printf("Ingrese proximo nodo a explorar, o -1 para salir: ");
34 if ( tecla!=0 &&((no_esta(tecla, nodo->hijos, nodo->cant_claves+1) == -1) || (nodo->nivel==0)) ){
35 num_nodo = num_nodo_ant;
36 printf("El nodo no existe o es nivel cero\n");
38 else num_nodo_ant = num_nodo = tecla;
39 b_plus_destruir_nodo(nodo);
44 char* cargar_registro(char* texto_ini,int len_ini, CLAVE clave, char *texto_fin, int len_fin)
47 reg = (char*)malloc(len_ini+sizeof(CLAVE)+len_fin+1); /* +1 para el \0 */
48 memcpy(reg, texto_ini, len_ini);
49 memcpy(reg+len_ini, &clave, sizeof(CLAVE));
50 strcpy(reg+len_ini+sizeof(CLAVE), texto_fin);
55 void imprimir_reg(char* reg, int off, int len)
59 memcpy(&clave, reg+off, sizeof(CLAVE));
60 printf("CLAVE = %d\n", clave.i_clave);
62 for(i=0; i<len; i++) printf("%c",reg[i]);
64 printf("TAMANIO REGISTRO = %d\n\n", len);
69 int main (int argc,char* argv[])
75 int tam_nodo = SIZE_B_PLUS_HEADER + sizeof(CLAVE)*5 + sizeof(CLAVE)*6;
76 EMUFS_REG_SIZE len, size;
80 texto = "PARTE COSNSTANTE, clave =";
81 emu = emufs_crear("test",T4,512,0);
83 printf("No se pudo crear EMUFS\n");
86 emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0);
91 texto2="termina el texto re bonito CLAVE = 77";
92 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
93 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
94 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
95 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
96 PERR("REGISTRO 1 GRABADO");
100 texto2="termina el texto re bonito pero mas largo CLAVE = 90";
102 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
103 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
104 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
105 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
106 PERR("REGISTRO 2 GRABADO");
110 texto2="Este es el fin del registro tres, puse tres en numero para que sea mas largo el texto CLAVE = 95";
112 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
113 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
114 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
115 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
116 PERR("REGISTRO 3 GRABADO");
120 texto2="REGISTRO CUATRO CLAVE = 99";
122 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
123 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
124 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
125 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
126 PERR("REGISTRO 4 GRABADO");
130 texto2="el quinto registro tiene un largo promedio como para entrar en el bloque CLAVE = 102";
132 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
133 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
134 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
135 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
136 PERR("REGISTRO 5 GRABADO");
140 texto2="El registro 6 no entra CLAVE = 93";
142 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
143 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
144 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
145 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
146 PERR("REGISTRO 6 GRABADO");
150 texto2="SETPTIMO REGISTRO, lo inserto donde entre carajo2ooooooooooooooooooCLAVE = 80";
152 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
153 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
154 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
155 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
156 PERR("REGISTRO 7 GRABADO");
160 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
162 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
164 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
169 emufs_tipo1_eliminar_ordenado(emu, clave, dato);
172 PERR("LEYENDO REGISTRO");
174 r = emufs_tipo1_leer_registro_plus(emu, clave, &size, &err);
176 imprimir_reg(r, strlen(texto), size);
180 for ( i=0; i<10000; i++){
181 texto2="SETPTIMO REGISTRO, lo inserto donde entre carajo2ooooooooooooooooooCLAVE = 80";
183 clave.i_clave = random();
184 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
185 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
186 emufs_tipo1_insertar_ordenado(emu, r, len, &err);