6 #include "indice_bplus.h"
9 int no_esta(int num, int* vec, int len)
14 if ( vec[i] == num ) res = 0;
19 void ver_arbol(EMUFS *emu)
22 int num_nodo, num_nodo_ant,i, tecla;
26 nodo = b_plus_leer_nodo(emu->indices, num_nodo);
27 printf("NODO: (hijo)clave\n");
28 printf("Nivel: %d\n", nodo->nivel);
29 for (i=0; i<nodo->cant_claves; i++)
30 printf("(%d)%d", nodo->hijos[i], nodo->claves[i]);
31 printf("(%d)",nodo->hijos[i]);
33 printf("Ingrese proximo nodo a explorar, o -1 para salir: ");
40 if ( tecla == nodo->hijos[nodo->cant_claves] && nodo->nivel == 0){
41 num_nodo = nodo->hijos[nodo->cant_claves];
44 if ( (no_esta(tecla, nodo->hijos, nodo->cant_claves+1) == -1)) {
45 num_nodo = num_nodo_ant;
46 printf("El nodo no existe o es nivel cero\n");
48 else num_nodo_ant = num_nodo = tecla;
49 b_plus_destruir_nodo(nodo);
54 char* cargar_registro(char* texto_ini,int len_ini, CLAVE clave, char *texto_fin, int len_fin)
57 reg = (char*)malloc(len_ini+sizeof(CLAVE)+len_fin+1); /* +1 para el \0 */
58 memcpy(reg, texto_ini, len_ini);
59 memcpy(reg+len_ini, &clave, sizeof(CLAVE));
60 strcpy(reg+len_ini+sizeof(CLAVE), texto_fin);
65 void imprimir_reg(char* reg, int off, int len)
69 memcpy(&clave, reg+off, sizeof(CLAVE));
70 printf("CLAVE = %d\n", clave.i_clave);
72 for(i=0; i<len; i++) printf("%c",reg[i]);
74 printf("TAMANIO REGISTRO = %d\n\n", len);
79 int main (int argc,char* argv[])
85 int tam_nodo = SIZE_B_PLUS_HEADER + sizeof(CLAVE)*5 + sizeof(CLAVE)*6;
86 EMUFS_REG_SIZE len, size;
89 INDEX_DAT q,querydata,prekey,postkey;
91 texto = "PARTE COSNSTANTE, clave =";
92 texto2= "FIN DE REGISTRO DE LONG CONSTANTE LO HAGO MAS LARGO PARA PROBAR CUANDO SE PARTE UN BLOQUE";
93 printf("TAMANIO DE LOS REGISTROS = %d\n",strlen(texto)+sizeof(CLAVE)+strlen(texto2));
94 emu = emufs_crear("test",T5,512,strlen(texto)+sizeof(CLAVE)+strlen(texto2));
96 printf("No se pudo crear EMUFS\n");
100 if ( emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0)!=1){
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_tipo3_insertar_ordenado(emu, r, len, &err);
111 PERR("REGISTRO 1 GRABADO");
116 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
117 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
118 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
119 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
120 PERR("REGISTRO 2 GRABADO");
125 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
126 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
127 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
128 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
129 PERR("REGISTRO 3 GRABADO");
134 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
135 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
136 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
137 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
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_tipo3_insertar_ordenado(emu, r, len, &err);
146 PERR("REGISTRO 5 GRABADO");
151 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
152 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
153 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
154 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
155 PERR("REGISTRO 6 GRABADO");
160 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
161 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
162 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
163 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
164 PERR("REGISTRO 7 GRABADO");
169 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
171 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
173 printf("tam reg = %d\n", emu->tam_reg);
175 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
179 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
182 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
185 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
188 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
191 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
194 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
195 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
196 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
197 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
198 PERR("REGISTRO 7 GRABADO");
201 q.clave.i_clave = 95;
203 res = emufs_b_plus_get_bloque(emu->indices, &q, 0);
205 printf("Num Bloque: %d\nResultado: %d\n", q.num_bloque, res);
211 PERR("LEYENDO REGISTRO");
214 r = emufs_tipo3_leer_registro_plus(emu, clave, &size, &err);
215 if (err) PERR(" NO SE LEYO EL REGISTRO");
218 imprimir_reg(r, strlen(texto), size);
223 for ( i=0; i<50; i++){
225 clave.i_clave = random()%10000;
226 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
227 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
228 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
232 /*v = emufs_tipo3_obtener_claves_raw(emu, 3);
234 printf("Las claves del bloque 3 son:\n");
235 for (i=0; i<v->cant_keys; i++)
236 printf("v[%d] = %d\n", i, v->claves[i]);*/
241 prekey.clave = emufs_b_plus_obtener_menor_clave(emu->indices);
242 postkey.clave = emufs_b_plus_obtener_mayor_clave(emu->indices);
243 querydata.clave = prekey.clave;
245 while (emufs_indice_es_menor(emu->indices,querydata.clave,postkey.clave))
248 querydata.clave = emu->indices->obtener_sig_clave_isam(emu,querydata.clave);
249 printf("Sig de %i es %i\n",q.clave.i_clave,querydata.clave.i_clave);
252 printf("Comienzo nuevo pedido de siguiente\n");
253 q.clave.i_clave = 2100;
255 while (emufs_indice_es_menor(emu->indices,querydata.clave,postkey.clave))
258 querydata.clave = emu->indices->obtener_sig_clave_isam(emu,querydata.clave);
259 printf("Sig de %i es %i\n",q.clave.i_clave,querydata.clave.i_clave);