]> git.llucax.com Git - z.facultad/75.06/jacu.git/commitdiff
Algunos bugfixes que daba problema con el signo y conversion de char a unsigned...
authorRicardo Markiewicz <gazer.arg@gmail.com>
Fri, 25 Jun 2004 03:52:22 +0000 (03:52 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Fri, 25 Jun 2004 03:52:22 +0000 (03:52 +0000)
 de como se completan los bits al estirar el numero!!)

src/blocksorting/bs.c
src/blocksorting/main.c
src/mtf/mtf.c
src/mtf/mtf.h

index d8bd093547ffefba5c796aaa24ccfd5331b56fcb..ddd6aef86a89e989fb5b7bd200b99bebb4f13be8 100644 (file)
@@ -54,7 +54,6 @@ char es_menor(char *data, t_BlockSort *bs, int i, int j)
        }
 
        /* Son iguales! */
-       /* Hack */
        return 0;
 }
 
@@ -118,6 +117,18 @@ void bs_solve(char *in, char *out, t_BlockSort *bs, Uint32 *k, Uint32 leido)
        bs->len = l;
 }
 
+void print_v(t_BlockSortDecode *d, size_t len)
+{
+       size_t i;
+       
+       for(i=0; i<len; i++)
+               printf("(%ld)", d[i].sig);
+       printf("\n");
+       for(i=0; i<len; i++)
+               printf("(%d)", d[i].c);
+       printf("\n");
+}
+
 void bs_restore(char *dst, char *c, Uint32 k, Uint32 len)
 {
        Uint32 i, current;
@@ -130,7 +141,11 @@ void bs_restore(char *dst, char *c, Uint32 k, Uint32 len)
                in[i].sig = i;
        }
 
+       /*printf("Antes de QSort\n");
+       print_v(in, len);*/
        qsort(in, len, sizeof(t_BlockSortDecode), _compare);
+       /*printf("Despues de QSort\n");
+       print_v(in, len);*/
        
        current = k;
        i=0;
index f73ed1200c626043e4ddf63f83b615dccbe29ced..3026f5a60032c44b0a19ea4caa1d75be1ff71398 100644 (file)
@@ -1,6 +1,14 @@
 
 #include "bs.h"
 
+void _print_(char *s, size_t len)
+{
+       size_t i;
+       for(i=0; i<len; i++)
+               printf("(%d)", s[i]);
+       printf("\n");
+}
+
 int main(int argc, char *argv[])
 {
        char *data; 
@@ -40,13 +48,24 @@ int main(int argc, char *argv[])
                        c = fgetc(fp);
                        total++;
                }
+               /* lleno data mano! */
+               srand(time(NULL));
+               {
+                       size_t jj;
+                       for(jj=0; jj<i;jj++)
+                               data[jj] = rand()%255;
+               }
+               printf("Leido : ");
+               _print_(data, i);
                bs_solve(data, salida, bs, &k, i);
 
                /* XXX ACA SALIDA DEBERIA PASAR A LA SIGUIENTE ETAPA XXX */
                if (argc == 3) {
-                       printf("BS : %s -> %ld\n", salida, k);
-                       bs_restore(orig, salida, k, i);
-                       printf("Orig : %s\n", orig);
+                       printf("BS : %ld  ", k);
+                       _print_(salida+8, i);
+                       bs_restore(orig, salida+sizeof(Uint32)*2, k, i);
+                       printf("Orig : ");
+                       _print_(orig, i);
                } else
                        fwrite(salida, 1, i, stdout);
        }
index bdb423c7b9d365776db5d6fad291666ade33675a..92088c06e7530d02e73ae1d450290e50001a5d37 100644 (file)
@@ -3,7 +3,7 @@
 /****privadas*****/
 int no_pertenece(char *z, char c, int len);
 
-void pop_front(char *z, int pos);
+void pop_front(char *z, unsigned int pos);
 
 int get_pos(char *z, int len, char c);
 /****fin privadas******/
@@ -35,15 +35,16 @@ char *jacu_mtf(char *datos, int len, char **_z, int *z_len)
        return pos;
 }
 
-char *jacu_mtf_inv(char *z, char *pos, int len)
+char *jacu_mtf_inv(char *z, unsigned char *pos, int len)
 {
        char *datos;
        int i;
        
        datos = (char*)malloc(sizeof(char)*len);
        for(i=0; i<len; i++){
-               datos[i] = z[(size_t)pos[i]];
-               pop_front(z, pos[i]);
+               datos[i] = z[(unsigned int)pos[i]];
+               if (pos[i] != 0)
+                       pop_front(z, (unsigned int)pos[i]);
        }
        return datos;
 }
@@ -77,11 +78,13 @@ int no_pertenece(char *z, char c, int len)
        return -1;
 }
                        
-void pop_front(char *z, int pos)
+void pop_front(char *z, unsigned int pos)
 {
        char aux;
        int i=0;
-       
+
+       if (pos > 255) printf("pos > = %u\n", pos);
+       if (pos < 0u) printf("pos < = %d\n", pos);
        aux = z[pos];
        for(i=pos; i>0; i--)
                z[i]=z[i-1];
index d313b55c18c65992af5ef170105054e4bd53544a..c6f46ceab34eaff782ccc2353cc3d3cd5a360d3c 100644 (file)
@@ -6,7 +6,7 @@
 
 char *jacu_mtf(char *datos, int len, char **_z, int *z_len);
 
-char *jacu_mtf_inv(char *z, char *pos, int len);
+char *jacu_mtf_inv(char *z, unsigned char *pos, int len);
 
 char *jacu_buscar_z(char* datos, int len, int *size);