]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs/tipo3_bplus_main.c
* Agrego recorrido por los indices de factura
[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         
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         emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0);
93         PERR("INDICE AGREGADO");
94         
95 /*REGISTRO 1*/  
96         clave.i_clave = 77;     
97         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
98         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
99         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
100         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
101         PERR("REGISTRO 1 GRABADO");
102         free(r);
103
104 /*REGISTRO 2*/  
105         clave.i_clave = 90;     
106         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
107         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
108         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
109         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
110         PERR("REGISTRO 2 GRABADO");
111         free(r);
112
113 /*REGISTRO 3    */
114         clave.i_clave = 95;     
115         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
116         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
117         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
118         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
119         PERR("REGISTRO 3 GRABADO");
120         free(r);
121         
122 /*REGISTRO 4    */
123         clave.i_clave = 99;     
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         free(r);
129
130 /*REGISTRO 5    */
131         clave.i_clave = 102;    
132         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
133         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
134         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
135         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
136         PERR("REGISTRO 5 GRABADO");
137         free(r);
138
139 /*REGISTRO 6*/  
140         clave.i_clave = 93;     
141         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
142         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
143         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
144         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
145         PERR("REGISTRO 6 GRABADO");
146         free(r);
147
148 /*REGISTRO 7*/  
149         clave.i_clave = 80;     
150         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
151         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
152         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
153         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
154         PERR("REGISTRO 7 GRABADO");
155         free(r);
156
157 /*
158 clave.i_clave = 93;
159 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
160 clave.i_clave = 99;
161 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
162
163 clave.i_clave = 77;
164 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
165 */
166
167 clave.i_clave = 99;
168 emufs_tipo3_eliminar_ordenado(emu, clave, dato);
169
170
171 /*
172 q.clave.i_clave = 95;
173 q.num_bloque = 2;
174 res = emufs_b_plus_get_bloque(emu->indices, &q, 0);
175
176 printf("Num Bloque: %d\nResultado: %d\n", q.num_bloque, res);
177 */
178
179
180
181 /*
182 PERR("LEYENDO REGISTRO");
183 clave.i_clave = 80;
184 err = 0;
185 r = emufs_tipo3_leer_registro_plus(emu, clave, &size, &err);
186 if (err) PERR(" NO SE LEYO EL REGISTRO");
187
188 if (r)
189 imprimir_reg(r, strlen(texto), size);
190
191 /*
192 for ( i=0; i<10000; i++){
193         srandom(i);
194         clave.i_clave = random()%100000;        
195         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
196         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
197         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
198         free(r);
199 }
200 */
201
202
203 /*
204 ver_arbol(emu);
205 */
206 emufs_destruir(emu);
207
208         return 0;
209         
210 }