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