]> git.llucax.com Git - z.facultad/75.06/jacu.git/blob - src/blocksorting/bs.h
Cambios minimos, no se si entraran en la impresion :(
[z.facultad/75.06/jacu.git] / src / blocksorting / bs.h
1 /*----------------------------------------------------------------------------
2  *                   jacu - Just Another Compression Utility
3  *----------------------------------------------------------------------------
4  * This file is part of jacu.
5  *
6  * jacu is free software; you can redistribute it and/or modify it under the
7  * terms of the GNU General Public License as published by the Free Software
8  * Foundation; either version 2 of the License, or (at your option) any later
9  * version.
10  *
11  * jacu is distributed in the hope that it will be useful, but WITHOUT ANY
12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14  * details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with jacu; if not, write to the Free Software Foundation, Inc., 59 Temple
18  * Place, Suite 330, Boston, MA  02111-1307  USA
19  *----------------------------------------------------------------------------
20  */
21
22
23 #ifndef _BS_H_
24 #define _BS_H_
25
26 #include <string.h>
27 #include <stdlib.h>
28 #include <stdio.h>
29
30 /** \file
31  *
32  * Implementación del Block Sorting
33  *
34  */
35
36 typedef unsigned long int Uint32;
37
38 typedef struct _bs_t_ t_BlockSort;
39
40 typedef struct _bs_data_t_ {
41         Uint32 pos_inicial;
42         Uint32 pos_final;
43         char ord; /* indica si esta ordenada */
44
45         /* Guardo el puntero al padre */
46         t_BlockSort *bs;        
47 } t_BlockSortData;
48
49 struct _bs_t_ {
50         char *data;
51         t_BlockSortData *array;
52         Uint32 len;
53 };
54
55
56 /** Inicializa un BlockSorting
57  *
58  *  \param len Tamaño de página a utilizar
59  */
60 t_BlockSort *bs_create(Uint32 len);
61
62 /** Libera un BlockSorting
63  *
64  *  \param bs BlockSorting previamente inicializado.
65  */
66 void bs_destroy(t_BlockSort *bs);
67
68 /** Resuelve un BlockSorting
69  *
70  *  \param in Array de bytes que se pretende procesar.
71  *  \param out Array donde guardar la columna resultante.
72  *  \param k Puntero donde guardar la posicion del array original.
73  *  \oaram leido Tamaño de in (por si el tamaño de in es menor al de la pagina).
74  */
75 void bs_solve(char *in, char *out, t_BlockSort *bs, Uint32 *k, Uint32 leido);
76
77 /** Obtiene el array original a partir de dst y k
78  *
79  *  \param dst Array donde guardar el array original
80  *  \param c Array generado opr bs_solve.
81  *  \param k Valor retornado por bs_solve.
82  *  \param len Tamaño de c
83  */
84 void bs_restore(char *dst, char *c, Uint32 k, Uint32 len);
85
86 int bs_readblock(FILE *fp, char *data, Uint32 pagesize, int usar_dic);
87
88 char *bs_finalblock(char *data, Uint32 len, Uint32 *new_size);
89
90 #endif
91