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: ");
38 if ( tecla == nodo->hijos[nodo->cant_claves] && nodo->nivel == 0){
39 num_nodo = nodo->hijos[nodo->cant_claves];
42 if ( (no_esta(tecla, nodo->hijos, nodo->cant_claves+1) == -1)|| nodo->nivel == 0) {
43 num_nodo = num_nodo_ant;
44 printf("El nodo no existe o es nivel cero\n");
46 else num_nodo_ant = num_nodo = tecla;
47 b_plus_destruir_nodo(nodo);
52 char* cargar_registro(char* texto_ini,int len_ini, CLAVE clave, char *texto_fin, int len_fin)
55 reg = (char*)malloc(len_ini+sizeof(CLAVE)+len_fin+1); /* +1 para el \0 */
56 memcpy(reg, texto_ini, len_ini);
57 memcpy(reg+len_ini, &clave, sizeof(CLAVE));
58 strcpy(reg+len_ini+sizeof(CLAVE), texto_fin);
63 void imprimir_reg(char* reg, int off, int len)
67 memcpy(&clave, reg+off, sizeof(CLAVE));
68 printf("CLAVE = %d\n", clave.i_clave);
70 for(i=0; i<len; i++) printf("%c",reg[i]);
72 printf("TAMANIO REGISTRO = %d\n\n", len);
77 int main (int argc,char* argv[])
84 int tam_nodo = SIZE_B_PLUS_HEADER + sizeof(CLAVE)*5 + sizeof(CLAVE)*6;
85 EMUFS_REG_SIZE len, size;
89 INDEX_DAT q,query,prekey,postkey;
91 texto = "PARTE COSNSTANTE, clave =";
92 emu = emufs_crear("test",T4,512,0);
94 printf("No se pudo crear EMUFS\n");
97 if( emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0) != 1){
106 texto2="termina el texto re bonito CLAVE = 77";
107 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
108 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
109 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
110 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
111 PERR("REGISTRO 1 GRABADO");
115 texto2="termina el texto re bonito pero mas largo CLAVE = 90";
117 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
118 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
119 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
120 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
121 PERR("REGISTRO 2 GRABADO");
125 texto2="Este es el fin del registro tres, puse tres en numero para que sea mas largo el texto CLAVE = 95";
127 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
128 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
129 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
130 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
131 PERR("REGISTRO 3 GRABADO");
135 texto2="REGISTRO CUATRO CLAVE = 99";
137 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
138 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
139 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
140 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
141 PERR("REGISTRO 4 GRABADO");
145 texto2="el quinto registro tiene un largo promedio como para entrar en el bloque CLAVE = 102";
147 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
148 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
149 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
150 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
151 PERR("REGISTRO 5 GRABADO");
155 texto2="El registro 6 no entra CLAVE = 93";
157 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
158 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
159 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
160 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
161 PERR("REGISTRO 6 GRABADO");
165 texto2="SETPTIMO REGISTRO, lo inserto donde entre carajo2ooooooooooooooooooCLAVE = 80";
167 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
168 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
169 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
170 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
171 PERR("REGISTRO 7 GRABADO");
175 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
177 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
179 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
184 emufs_tipo1_eliminar_ordenado(emu, clave, dato);
187 emufs_tipo1_eliminar_ordenado(emu, clave, dato);
188 PERR("REGISTROS ELIMINADOS");
190 PERR("LEYENDO REGISTRO");
192 r = emufs_tipo1_leer_registro_plus(emu, clave, &size, &err);
194 imprimir_reg(r, strlen(texto), size);
198 PERR("INSERTANDO REGISTROS");
199 for ( i=0; i<100; i++){
200 texto2="SETPTIMO REGISTRO, lo inserto donde entre carajo2ooooooooooooooooooCLAVE = 80";
202 clave.i_clave = random() % 100000;
203 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
204 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
205 emufs_tipo1_insertar_ordenado(emu, r, len, &err);
209 prekey.clave = emu->indices->obtener_menor_clave(emu->indices);
210 postkey.clave = emu->indices->obtener_mayor_clave(emu->indices);
212 while (emufs_indice_es_menor(emu->indices,query.clave,postkey.clave))
215 query.clave = emu->indices->obtener_sig_clave_isam(emu,query.clave);
216 printf("Sig de %i es %i\n",q.clave.i_clave,query.clave.i_clave);
219 /*PERR("OBTENIENDO CLAVES");
220 v = emufs_tipo1_obtener_claves_raw(emu, 3);
221 printf("Las claves del bloque 3 son:\n");
223 PERR("NO HAY VECTOR");
226 /*printf("Las claves del bloque 3 son:\n");*/
227 /*for (i=0; i<v->cant_keys; i++)
228 printf("v[%d] = %d\n", i, v->claves[i]);
232 printf("Buscar el POST de:\n");
234 clave.i_clave = tecla;
236 b_plus_buscar_prepost(emu->indices, clave, 0, &query, 1);
238 printf("el post de %d, es %d\n", clave, query.clave);