]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs/tipo3_bplus_main.c
tree view
[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, i, tecla;
23         num_nodo =0;
24
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]);
31                 printf("\n");
32                 printf("Ingrese proximo nodo a explorar, o 666 para salir: ");
33                 scanf("%d",&tecla);
34                 printf("%d\n",tecla);
35                 if ( (no_esta(tecla, nodo->hijos, nodo->cant_claves+1) == -1) || (nodo->nivel==0) ){
36                         num_nodo =0;
37                         printf("El nodo no existe o es nivel cero\n");
38                 }
39                 else num_nodo = tecla;
40                 b_plus_destruir_nodo(nodo);
41         }
42 }       
43                 
44                 
45 char* cargar_registro(char* texto_ini,int len_ini, CLAVE clave, char *texto_fin, int len_fin)
46 {
47         char *reg;
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);
52         return reg;
53 }
54
55
56 void imprimir_reg(char* reg, int off, int len)
57 {
58         CLAVE clave;
59         int i;
60         memcpy(&clave, reg+off, sizeof(CLAVE));
61         printf("CLAVE = %d\n", clave.i_clave);
62         printf("REGISTRO =");
63         for(i=0; i<len; i++) printf("%c",reg[i]);
64                 printf("\n");
65         printf("TAMANIO REGISTRO = %d\n\n", len);
66 }
67
68
69
70 int main (int argc,char* argv[])
71 {
72         CLAVE clave;
73         char *texto, *texto2;
74         char *r;
75         EMUFS *emu;
76         int tam_nodo = SIZE_B_PLUS_HEADER + sizeof(CLAVE)*5 + sizeof(CLAVE)*6;
77         EMUFS_REG_SIZE len, size;
78         int err=0, i;
79         
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);
85         
86         
87 /*REGISTRO 1*/  
88         clave.i_clave = 77;     
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");
94         free(r);
95
96 /*REGISTRO 2*/  
97         clave.i_clave = 90;     
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");
103         free(r);
104
105 /*REGISTRO 3    */
106         clave.i_clave = 95;     
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");
112         free(r);
113         
114 /*REGISTRO 4    */
115         clave.i_clave = 99;     
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         free(r);
121
122 /*REGISTRO 5    */
123         clave.i_clave = 102;    
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");
129         free(r);
130
131 /*REGISTRO 6*/  
132         clave.i_clave = 93;     
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");
138         free(r);
139
140 /*REGISTRO 7*/  
141         clave.i_clave = 80;     
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");
147         free(r);
148
149 /*
150 clave.i_clave = 93;
151 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
152 clave.i_clave = 99;
153 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
154 clave.i_clave = 95;
155 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
156 clave.i_clave = 77;
157 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
158
159 */
160
161 PERR("LEYENDO REGISTRO");
162 clave.i_clave = 99;
163 err = 0;
164 r = emufs_tipo3_leer_registro_plus(emu, clave, &size, &err);
165 if (err) PERR(" NO SE LEYO EL REGISTRO");
166
167 imprimir_reg(r, strlen(texto), size);
168
169
170 for ( i=0; i<10000; i++){
171         srandom(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);
176         free(r);
177 }
178
179
180 ver_arbol(emu);
181
182 emufs_destruir(emu);
183
184         return 0;
185         
186 }