]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs/tipo3_bplus_main.c
arreglos en el 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, num_nodo_ant,i, tecla;
23         num_nodo =0;
24
25         while ( tecla != 666){
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+1]);
32                 printf("\n");
33                 printf("Ingrese proximo nodo a explorar, o 666 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;
80         
81         texto = "PARTE COSNSTANTE, clave =";
82         texto2= "FIN DE REGISTRO DE LONG CONSTANTE LO HAGO MAS LARGO PARA PROBAR CUANDO SE PARTE UN BLOQUE";
83         printf("TAMANIO DE LOS REGISTROS = %d\n",strlen(texto)+sizeof(CLAVE)+strlen(texto2));
84         emu = emufs_crear("test",T3,512,strlen(texto)+sizeof(CLAVE)+strlen(texto2));
85         emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo, 0);
86         
87         
88 /*REGISTRO 1*/  
89         clave.i_clave = 77;     
90         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
91         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
92         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
93         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
94         PERR("REGISTRO 1 GRABADO");
95         free(r);
96
97 /*REGISTRO 2*/  
98         clave.i_clave = 90;     
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 2 GRABADO");
104         free(r);
105
106 /*REGISTRO 3    */
107         clave.i_clave = 95;     
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 3 GRABADO");
113         free(r);
114         
115 /*REGISTRO 4    */
116         clave.i_clave = 99;     
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         free(r);
122
123 /*REGISTRO 5    */
124         clave.i_clave = 102;    
125         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
126         imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
127         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
128         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
129         PERR("REGISTRO 5 GRABADO");
130         free(r);
131
132 /*REGISTRO 6*/  
133         clave.i_clave = 93;     
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 6 GRABADO");
139         free(r);
140
141 /*REGISTRO 7*/  
142         clave.i_clave = 80;     
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 7 GRABADO");
148         free(r);
149
150 /*
151 clave.i_clave = 93;
152 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
153 clave.i_clave = 99;
154 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
155 clave.i_clave = 95;
156 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
157 clave.i_clave = 77;
158 emufs_tipo3_eliminar_ordenado(emu, clave, &err);
159
160 */
161
162 PERR("LEYENDO REGISTRO");
163 clave.i_clave = 99;
164 err = 0;
165 r = emufs_tipo3_leer_registro_plus(emu, clave, &size, &err);
166 if (err) PERR(" NO SE LEYO EL REGISTRO");
167
168 imprimir_reg(r, strlen(texto), size);
169
170
171 for ( i=0; i<10000; i++){
172         srandom(i);
173         clave.i_clave = random()%100000;        
174         r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
175         len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
176         emufs_tipo3_insertar_ordenado(emu, r, len, &err);
177         free(r);
178 }
179
180
181 ver_arbol(emu);
182
183 emufs_destruir(emu);
184
185         return 0;
186         
187 }