]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs/tipo3_bplus_main.c
Me rindo 3 horas de buscar un bug en busqueda de siguiente o anterior ancla para...
[z.facultad/75.06/emufs.git] / emufs / tipo3_bplus_main.c
1 #include <stdio.h>
2 #include <string.h>
3 #include "emufs.h"
4 #include "tipo3.h"
5 #include "indices.h"
6 #include "indice_bplus.h"
7
8         
9 int no_esta(int num, int* vec, int len)
10 {
11         int i, res;
12         res = -1;
13         for(i=0; i<len; i++)
14                 if ( vec[i] == num ) res = 0;
15         return res;
16 }
17                 
18
19 void ver_arbol(EMUFS *emu)
20 {
21         NODO_B_PLUS *nodo;
22         int num_nodo, num_nodo_ant,i, tecla;
23         num_nodo =0;
24         
25         while ( tecla != -1){
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]);
32                 printf("\n");
33                 printf("Ingrese proximo nodo a explorar, o -1 para salir: ");
34                 scanf("%d",&tecla);
35                 printf("%d\n",tecla);
36                 if ( tecla!=0 &&((no_esta(tecla, nodo->hijos, nodo->cant_claves+1) == -1) || (nodo->nivel==0)) ){
37                         num_nodo = num_nodo_ant;
38                         printf("El nodo no existe o es nivel cero\n");
39                 }
40                 else num_nodo_ant = num_nodo = tecla;
41                 b_plus_destruir_nodo(nodo);
42         }
43 }       
44                 
45                 
46 char* cargar_registro(char* texto_ini,int len_ini, CLAVE clave, char *texto_fin, int len_fin)
47 {
48         char *reg;
49         reg = (char*)malloc(len_ini+sizeof(CLAVE)+len_fin+1); /* +1 para el \0 */
50         memcpy(reg, texto_ini, len_ini);
51         memcpy(reg+len_ini, &clave, sizeof(CLAVE));
52         strcpy(reg+len_ini+sizeof(CLAVE), texto_fin);
53         return reg;
54 }
55
56
57 void imprimir_reg(char* reg, int off, int len)
58 {
59         CLAVE clave;
60         int i;
61         memcpy(&clave, reg+off, sizeof(CLAVE));
62         printf("CLAVE = %d\n", clave.i_clave);
63         printf("REGISTRO =");
64         for(i=0; i<len; i++) printf("%c",reg[i]);
65                 printf("\n");
66         printf("TAMANIO REGISTRO = %d\n\n", len);
67 }
68
69
70
71 int main (int argc,char* argv[])
72 {
73         CLAVE clave;
74         char *texto, *texto2;
75         char *r;
76         EMUFS *emu;
77         int tam_nodo = SIZE_B_PLUS_HEADER + sizeof(CLAVE)*5 + sizeof(CLAVE)*6;
78         EMUFS_REG_SIZE len, size;
79         int err=0, i, res;
80         INDICE_DATO dato;
81         INDEX_DAT q;
82         B_PLUS_KEYBUCKET *v;
83         texto = "PARTE COSNSTANTE, clave =";
84         texto2= "FIN DE REGISTRO DE LONG CONSTANTE LO HAGO MAS LARGO PARA PROBAR CUANDO SE PARTE UN BLOQUE";
85         printf("TAMANIO DE LOS REGISTROS = %d\n",strlen(texto)+sizeof(CLAVE)+strlen(texto2));
86         emu = emufs_crear("test",T5,512,strlen(texto)+sizeof(CLAVE)+strlen(texto2));
87         if (emu == NULL) {
88                 printf("No se pudo crear EMUFS\n");
89                 return 1;
90         }
91         PERR("EMUFS CREADO");
92         if ( emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0)!=1){
93                 PERR("INDICE ROTO");
94                 return 1;
95         }
96         
97 /*REGISTRO 1*/  
98         clave.i_clave = 77;     
99         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
100         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
101         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
102         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
103         PERR("REGISTRO 1 GRABADO");
104         free(r);
105
106 /*REGISTRO 2*/  
107         clave.i_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_tipo3_insertar_ordenado(emu, r, len, &err);
112         PERR("REGISTRO 2 GRABADO");
113         free(r);
114
115 /*REGISTRO 3    */
116         clave.i_clave = 95;     
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_tipo3_insertar_ordenado(emu, r, len, &err);
121         PERR("REGISTRO 3 GRABADO");
122         free(r);
123         
124 /*REGISTRO 4    */
125         clave.i_clave = 99;     
126         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
127         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
128         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
129         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
130         free(r);
131
132 /*REGISTRO 5    */
133         clave.i_clave = 102;    
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);
138         PERR("REGISTRO 5 GRABADO");
139         free(r);
140
141 /*REGISTRO 6    */
142         clave.i_clave = 93;     
143         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
144         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
145         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
146         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
147         PERR("REGISTRO 6 GRABADO");
148         free(r);
149
150 /*REGISTRO 7    */
151         clave.i_clave = 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_tipo3_insertar_ordenado(emu, r, len, &err);
156         PERR("REGISTRO 7 GRABADO");
157         free(r);
158
159 /*
160 clave.i_clave = 93;
161 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
162 clave.i_clave = 99;
163 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
164 */
165 printf("tam reg = %d\n", emu->tam_reg);
166 clave.i_clave = 77;
167 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
168
169
170 clave.i_clave = 80;
171 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
172
173 clave.i_clave = 102;
174 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
175
176 clave.i_clave = 93;
177 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
178
179 clave.i_clave = 95;
180 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
181
182 clave.i_clave = 90;
183 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
184
185         clave.i_clave = 80;     
186         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
187         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
188         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
189         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
190         PERR("REGISTRO 7 GRABADO");
191         free(r);
192 /*
193 q.clave.i_clave = 95;
194 q.num_bloque = 2;
195 res = emufs_b_plus_get_bloque(emu->indices, &q, 0);
196
197 printf("Num Bloque: %d\nResultado: %d\n", q.num_bloque, res);
198 */
199
200
201
202 /*
203 PERR("LEYENDO REGISTRO");
204 clave.i_clave = 80;
205 err = 0;
206 r = emufs_tipo3_leer_registro_plus(emu, clave, &size, &err);
207 if (err) PERR(" NO SE LEYO EL REGISTRO");
208
209 if (r)
210 imprimir_reg(r, strlen(texto), size);
211 */
212
213
214
215 for ( i=0; i<50; i++){
216         srandom(i);
217         clave.i_clave = random()%10000; 
218         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
219         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
220         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
221         free(r);
222 }
223
224 v = emufs_tipo3_obtener_claves_raw(emu, 3);
225
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]);
229
230
231 ver_arbol(emu);
232
233 emufs_destruir(emu);
234
235         return 0;
236         
237 }