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, i, tecla;
25 while ( tecla != 666){
26 nodo = b_plus_leer_nodo(emu->indices, num_nodo);
27 printf("Nivel: %d\n", nodo->nivel);
28 for (i=0; i<nodo->cant_claves; i++)
29 printf("(%d)%d", nodo->hijos[i], nodo->claves[i]);
30 printf("(%d)",nodo->hijos[i+1]);
32 printf("Ingrese proximo nodo a explorar, o 666 para salir: ");
35 if ( (no_esta(tecla, nodo->hijos, nodo->cant_claves+1) == -1) || (nodo->nivel==0) ){
37 printf("El nodo no existe o es nivel cero\n");
39 else num_nodo = tecla;
40 b_plus_destruir_nodo(nodo);
45 char* cargar_registro(char* texto_ini,int len_ini, CLAVE clave, char *texto_fin, int len_fin)
48 reg = (char*)malloc(len_ini+sizeof(CLAVE)+len_fin+1); /* +1 para el \0 */
49 memcpy(reg, texto_ini, len_ini);
50 memcpy(reg+len_ini, &clave, sizeof(CLAVE));
51 strcpy(reg+len_ini+sizeof(CLAVE), texto_fin);
56 void imprimir_reg(char* reg, int off, int len)
60 memcpy(&clave, reg+off, sizeof(CLAVE));
61 printf("CLAVE = %d\n", clave.i_clave);
63 for(i=0; i<len; i++) printf("%c",reg[i]);
65 printf("TAMANIO REGISTRO = %d\n\n", len);
70 int main (int argc,char* argv[])
76 int tam_nodo = SIZE_B_PLUS_HEADER + sizeof(CLAVE)*5 + sizeof(CLAVE)*6;
77 EMUFS_REG_SIZE len, size;
80 texto = "PARTE COSNSTANTE, clave =";
81 texto2= "FIN DE REGISTRO DE LONG CONSTANTE LO HAGO MAS LARGO PARA PROBAR CUANDO SE PARTE UN BLOQUE";
82 printf("TAMANIO DE LOS REGISTROS = %d\n",strlen(texto)+sizeof(CLAVE)+strlen(texto2));
83 emu = emufs_crear("test",T3,512,strlen(texto)+sizeof(CLAVE)+strlen(texto2));
84 emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0);
89 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
90 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
91 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
92 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
93 PERR("REGISTRO 1 GRABADO");
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_tipo3_insertar_ordenado(emu, r, len, &err);
102 PERR("REGISTRO 2 GRABADO");
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 3 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);
124 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
125 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
126 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
127 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
128 PERR("REGISTRO 5 GRABADO");
133 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
134 imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
135 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
136 emufs_tipo3_insertar_ordenado(emu, r, len, &err);
137 PERR("REGISTRO 6 GRABADO");
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 7 GRABADO");
151 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
153 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
155 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
157 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
161 PERR("LEYENDO REGISTRO");
164 r = emufs_tipo3_leer_registro_plus(emu, clave, &size, &err);
165 if (err) PERR(" NO SE LEYO EL REGISTRO");
167 imprimir_reg(r, strlen(texto), size);
170 for ( i=0; i<10000; i++){
172 clave.i_clave = random()%100000;
173 r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
174 len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
175 emufs_tipo3_insertar_ordenado(emu, r, len, &err);