]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs/tipo1_bplus_main.c
Se amplia MERGEFILE para poder usarlo de salida tambien (al crear los chunks).
[z.facultad/75.06/emufs.git] / emufs / tipo1_bplus_main.c
1 #include <stdio.h>
2 #include <string.h>
3 #include "emufs.h"
4 #include "tipo1.h"
5 #include "indices.h"
6 #include "indice_bplus.h"
7 int no_esta(int num, int* vec, int len)
8 {
9         int i, res;
10         res = -1;
11         for(i=0; i<len; i++)
12                 if ( vec[i] == num ) res = 0;
13         return res;
14 }
15                 
16
17 void ver_arbol(EMUFS *emu)
18 {
19         NODO_B_PLUS *nodo;
20         int num_nodo, num_nodo_ant,i, tecla;
21         num_nodo =0;
22         
23         while ( tecla != -1){
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]);
30                 printf("\n");
31                 printf("Ingrese proximo nodo a explorar, o -1 para salir: ");
32                 scanf("%d",&tecla);
33                 printf("%d\n",tecla);
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");
37                 }
38                 else num_nodo_ant = num_nodo = tecla;
39                 b_plus_destruir_nodo(nodo);
40         }
41 }       
42
43
44 char* cargar_registro(char* texto_ini,int len_ini, CLAVE clave, char *texto_fin, int len_fin)
45 {
46         char *reg;
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);
51         return reg;
52 }
53
54
55 void imprimir_reg(char* reg, int off, int len)
56 {
57         CLAVE clave;
58         int i;
59         memcpy(&clave, reg+off, sizeof(CLAVE));
60         printf("CLAVE = %d\n", clave.i_clave);
61         printf("REGISTRO =");
62         for(i=0; i<len; i++) printf("%c",reg[i]);
63                 printf("\n");
64         printf("TAMANIO REGISTRO = %d\n\n", len);
65 }
66
67
68
69 int main (int argc,char* argv[])
70 {
71         CLAVE clave;
72         char *texto, *texto2;
73         char *r;
74         EMUFS *emu;
75         int tam_nodo = SIZE_B_PLUS_HEADER + sizeof(CLAVE)*5 + sizeof(CLAVE)*6;
76         EMUFS_REG_SIZE len, size;
77         int err=0, i;
78         INDICE_DATO dato;
79         B_PLUS_KEYBUCKET *v;    
80         
81         
82         texto = "PARTE COSNSTANTE, clave =";
83         emu = emufs_crear("test",T4,512,0);
84         if (emu == NULL) {
85                 printf("No se pudo crear EMUFS\n");
86                 return 1;
87         }
88         if( emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0) != 1){
89                 PERR("INDICE ROTO");
90                 emufs_destruir(emu);
91                 return 1;
92         }
93         
94         
95 /*REGISTRO 1*/  
96         clave.i_clave = 77;     
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");
103         free(r);
104
105 /*REGISTRO 2*/  
106         texto2="termina el texto re bonito pero mas largo CLAVE = 90";
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_tipo1_insertar_ordenado(emu, r, len, &err);
112         PERR("REGISTRO 2 GRABADO");
113         free(r);
114
115 /*REGISTRO 3*/  
116         texto2="Este es el fin del registro tres, puse tres en numero para que sea mas largo el texto CLAVE = 95";
117         clave.i_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");
123         free(r);
124         
125 /*REGISTRO 4*/  
126         texto2="REGISTRO CUATRO CLAVE = 99";
127         clave.i_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");
133         free(r);
134
135 /*REGISTRO 5    */
136         texto2="el quinto registro tiene un largo promedio como para entrar en el bloque CLAVE = 102";
137         clave.i_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");
143         free(r);
144
145 /*REGISTRO 6   */       
146         texto2="El registro 6 no entra CLAVE = 93";
147         clave.i_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");
153         free(r);
154
155 /*REGISTRO 7    */
156         texto2="SETPTIMO REGISTRO, lo inserto donde entre carajo2ooooooooooooooooooCLAVE = 80";
157         clave.i_clave = 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");
163         free(r);
164 /*
165 clave.i_clave = 93;
166 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
167 clave.i_clave = 99;
168 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
169 clave.i_clave = 95;
170 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
171 */
172
173 /*-
174 clave.i_clave = 77;
175 emufs_tipo1_eliminar_ordenado(emu, clave, dato);
176
177 clave.i_clave = 95;
178 emufs_tipo1_eliminar_ordenado(emu, clave, dato);
179 PERR("REGISTROS ELIMINADOS");
180 /*
181 PERR("LEYENDO REGISTRO");
182 clave.i_clave = 80;
183 r = emufs_tipo1_leer_registro_plus(emu, clave, &size, &err);
184
185 imprimir_reg(r, strlen(texto), size);
186 free(r);
187 */
188
189 PERR("INSERTANDO REGISTROS");
190 for ( i=0; i<100; i++){
191         texto2="SETPTIMO REGISTRO, lo inserto donde entre carajo2ooooooooooooooooooCLAVE = 80";
192         srandom(i);
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);
197         free(r);
198 }
199
200 PERR("OBTENIENDO CLAVES");
201 v = emufs_tipo1_obtener_claves_raw(emu, 3);
202 if (v==NULL) {
203         PERR("NO HAY VECTOR");
204         emufs_destruir(emu);
205 }
206 PERR("PASE");
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]);
210
211 ver_arbol(emu);
212 emufs_destruir(emu);
213
214         return 0;
215         
216 }