]> git.llucax.com Git - z.facultad/75.06/jacu.git/commitdiff
* Agrego al MTF 2 parametros para recuperar el Z y Z_len a fin de meterlos en el...
authorRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 22 Jun 2004 14:13:35 +0000 (14:13 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 22 Jun 2004 14:13:35 +0000 (14:13 +0000)
src/jacu.c
src/mtf/mtf.c
src/mtf/mtf.h

index e870c999c66d87e4831b043e7614ce6b804f41ce..e1d6eeae218000dc5f79e004424da9c9acc8a64a 100644 (file)
@@ -67,6 +67,9 @@ int main(int argc, char* argv[])
                Uint32 i, j, total, k;
                char *mtf;
                char *salida, *data, c;
+               char *z;
+               int z_len;
+
                data = malloc(sizeof(char)*pagesize);
                /* Reservo lugar tambien para guardar el k y el tamaño  */
                salida = malloc(sizeof(char)*(pagesize)+sizeof(Uint32)*2);
@@ -89,21 +92,28 @@ int main(int argc, char* argv[])
                        bs_solve(data, salida, bs, &k, i);
 
                        /* Le aplico el MTF, salteo el tamaño del bloque para que no se pierda. */
-                       mtf = jacu_mtf(salida+sizeof(Uint32), i+sizeof(Uint32));
+                       mtf = jacu_mtf(salida+sizeof(Uint32), i+sizeof(Uint32), &z, &z_len);
 
                        /* Si me lo piden, aplico ZG. */
-                       if (zflag)
-                       {
+                       if (zflag) {
                                size_t len;
                                char buff[2];
                                ZG zg;
                                zg_init(&zg);
+                               /* TODO HACER LO MISMO QUE EN EL ELSE XXX */
                                for (j = 0; j < i; ++j)
                                        if ((len = zg_group(&zg, buff, mtf[j]))) fwrite(buff, 1, len, fp_out);
-                       }
-                       else
-                       {
-                               for(j=0; j<i; j++)
+                       } else {
+                               /* Guardo el PageSize */
+                               for(j=0; j<sizeof(Uint32); j++)
+                                       fputc(mtf[j], fp_out);
+
+                               /* Guardo el Z len y el Z */
+                               fwrite(&z_len, sizeof(int), 1, fp_out);
+                               fwrite(z, z_len, sizeof(char), fp_out);
+
+                               /* Guardo la salida del MTF */
+                               for(j=sizeof(Uint32); j<i; j++)
                                        fputc(mtf[j], fp_out);
                        }
                        free(mtf);
index 3967cbc96a48000ee3becc897ec94d08533fc467..efc3700ab08611ea7f0a8322e1777348d5dbf359 100644 (file)
@@ -16,7 +16,7 @@ void print_z(char *z, int len)
        fprintf(stderr, "\n");
 }
 
-char *jacu_mtf(char *datos, int len)
+char *jacu_mtf(char *datos, int len, char **_z, int *z_len)
 {
        char *z;
        char *pos;
@@ -29,6 +29,9 @@ char *jacu_mtf(char *datos, int len)
                if (pos[i] != 0) 
                        pop_front(z,pos[i]);
        }
+
+       (*_z) = z;
+       (*z_len) = size;
        return pos;
 }
 
index d3a7192d3eb72fdef43eee48752daaedd0fd0a5f..0972de36f4122b923c7147599b1758c9d5184170 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-char *jacu_mtf(char *datos, int len);
+char *jacu_mtf(char *datos, int len, char **_z, int *z_len);
 
 char *jacu_mtf_inv(char *z, char *pos, int len);