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;
82 texto = "PARTE COSNSTANTE, clave =";
83 emu = emufs_crear("test",T4,512,0);
85 printf("No se pudo crear EMUFS\n");
88 if( emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0) != 1){
97 texto2="termina el texto re bonito CLAVE = 77";
98 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
99 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
100 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
101 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
102 PERR("REGISTRO 1 GRABADO");
106 texto2="termina el texto re bonito pero mas largo CLAVE = 90";
108 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
109 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
110 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
111 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
112 PERR("REGISTRO 2 GRABADO");
116 texto2="Este es el fin del registro tres, puse tres en numero para que sea mas largo el texto CLAVE = 95";
118 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
119 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
120 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
121 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
122 PERR("REGISTRO 3 GRABADO");
126 texto2="REGISTRO CUATRO CLAVE = 99";
128 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
129 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
130 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
131 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
132 PERR("REGISTRO 4 GRABADO");
136 texto2="el quinto registro tiene un largo promedio como para entrar en el bloque CLAVE = 102";
138 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
139 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
140 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
141 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
142 PERR("REGISTRO 5 GRABADO");
146 texto2="El registro 6 no entra CLAVE = 93";
148 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
149 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
150 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
151 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
152 PERR("REGISTRO 6 GRABADO");
156 texto2="SETPTIMO REGISTRO, lo inserto donde entre carajo2ooooooooooooooooooCLAVE = 80";
158 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
159 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
160 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
161 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
162 PERR("REGISTRO 7 GRABADO");
166 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
168 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
170 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
175 emufs_tipo1_eliminar_ordenado(emu, clave, dato);
178 emufs_tipo1_eliminar_ordenado(emu, clave, dato);
179 PERR("REGISTROS ELIMINADOS");
181 PERR("LEYENDO REGISTRO");
183 r = emufs_tipo1_leer_registro_plus(emu, clave, &size, &err);
185 imprimir_reg(r, strlen(texto), size);
189 PERR("INSERTANDO REGISTROS");
190 for ( i=0; i<100; i++){
191 texto2="SETPTIMO REGISTRO, lo inserto donde entre carajo2ooooooooooooooooooCLAVE = 80";
193 clave.i_clave = random() % 100000;
194 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
195 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
196 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
200 PERR("OBTENIENDO CLAVES");
201 v = emufs_tipo1_obtener_claves_raw(emu, 3);
202 printf("Las claves del bloque 3 son:\n");
204 PERR("NO HAY VECTOR");
207 /*printf("Las claves del bloque 3 son:\n");*/
208 for (i=0; i<v->cant_keys; i++)
209 printf("v[%d] = %d\n", i, v->claves[i]);