18 int cmp(void* x, void* y)
22 if (xx > yy) return 1;
23 if (xx < yy) return -1;
27 void buffer_dump(BUFFORD* b)
31 for (c = bufford_get_min(b); c; c = bufford_get_next(b, c))
36 int main(int argc, char* argv[])
41 BUFFORD* b = bufford_new(8, sizeof(int), &cmp);
43 if (!(pool = mergepool_new())) {
47 if (!(fp = fopen(argv[1], "r"))) {
48 mergepool_delete(pool);
55 fscanf(fp, "%i", ®);
57 if (!bufford_push(b, ®)) break;
59 printf("Buffer lleno, hago el primer lote...\n");
63 while (!bufford_empty(b)) {
66 printf("Creando lote %i:\n", i);
67 if (!mergepool_add_file(pool)) {
69 mergepool_delete(pool);
73 for (c = bufford_pop_min(b); c; c = bufford_pop_next(b, &x)) {
74 /* si hay un valor en la entrada, lo inserto */
75 if (!feof(fp)) fscanf(fp, "%i", &x);
76 if (!feof(fp) && !bufford_push(b, &x)) {
77 /* ERROR: no se pudo insertar */
79 mergepool_delete(pool);
86 if (!mergepool_append_data(pool, x)) {
87 printf("No se pudo escribir en el mergefile %i\n", i);
89 mergepool_delete(pool);
95 printf("Lote %i finalizado!\n\n", i);
102 FILE* fp = fopen("salida.txt", "w");
104 printf("Abriendo archivos y buscando mínimo...\n");
105 printf("Iterando...\n");
106 /* voy obteniendo el próximo mínimo y guardándolo en el archivo de salida */
107 while (mergepool_pop_min(pool, &min)) fprintf(fp, "%i\n", min);
110 mergepool_delete(pool);