memcpy(bloque, &header, sizeof(B_NodoHeader));
fwrite(bloque, idx->tam_bloque, 1, fp);
+ free(bloque);
fclose(fp);
}
PERR(idx->nombre);
return 0;
}
-
- b_insertar_dup_en_pos(idx, claves[i].dato, dato);
+
+ if ((idx->funcion == IND_SELECCION) && (!emufs_indice_es_clave_nula(idx, clave)))
+ b_insertar_dup_en_pos(idx, claves[i].dato, dato);
if (idx->tipo_dato == IDX_STRING) {
/* Tengo que sacar el texto repetido del archivo de textos */
/* Agrego el DATO real al archivo de claves repetiras
* y me guardo el ID para poner en el indice
*/
+ if ((idx->funcion == IND_SELECCION) && (emufs_indice_es_clave_nula(idx, clave)))
+ /* UPS!, la clave que se va a insertar por primera vez es nula
+ * y soy un indice selectivo!, no lo puedo permitir, ciao!!
+ */
+ return 1;
dummy.id = -1;
dato.id = b_insertar_dup_en_pos(idx, dummy, dato);
}
b_leer_header(der, &der_h);
padre_entries = b_leer_claves(padre, &padre_h);
/* Inserto en el hijo derecho la clave del padre */
+ PERR("PASAR CLAVE DERECHA");
b_insertar_en_nodo_con_lugar(idx, padre_entries[padre_pos].clave, padre_entries[padre_pos].dato,
der_id, der, der_h.hijo_izquierdo, entry.hijo_derecho);
/* Reemplazo clave del padre por clave nueva */
/* lleno el lado derecho e izquierdo */
for(i=0, j=0; i<cant_claves/3; i++, j++)
c_izq[j] = buffer[i];
- prom1 = buffer[i];
+ prom1 = buffer[i++];
h_izq.cant = j;
for(j=0; i<2*cant_claves/3; i++, j++)
c_der[j] = buffer[i];
h_der.cant = j;
- prom2 = buffer[i];
+ prom2 = buffer[i++];
for(j=0; i<cant_claves; i++,j++)
c_nuevo[j] = buffer[i];
h_nuevo.cant = j;
/* Busco al mi padre, perdido en un maremoto hace mucho,muchos
* aƱos
*/
- free(nodo);
+ tmp = nodo;
if (header.padre == -1) {
- salida.i_clave = -1;
+ if (nodo_id == 0) {
+ /* Bien, son el nodo raiz y aca tendria que ir hacia mi hijo
+ * derecho
+ */
+ nodo = b_leer_nodo(idx, claves[header.cant-1].hijo_derecho);
+ free(tmp);
+ b_leer_header(nodo, &header);
+ claves = b_leer_claves(nodo, &header);
+
+ salida = claves[0].clave;
+ }
return salida;
}
+ free(nodo);
nodo = b_leer_nodo(idx, header.padre);
b_leer_header(nodo, &header);
claves = b_leer_claves(nodo, &header);
return cant;
}
-#include "indice_b_asc.c"
+#ifdef NO_TERMINAOD
+EMUFS_Estadisticas emufs_indice_b_obtener_estadisticas(INDICE *idx)
+{
+ EMUFS_Estadisticas stats, st_string, st_multiples;
+ stats.tam_archivo = emufs_common_get_file_size(idx->filename);
+ stats.cant_bloques = stats.tam_archivo/idx->tam_bloque;
+
+}
+#endif
+
+#include "indice_b_asc.c"