]> git.llucax.com Git - z.facultad/75.06/jacu.git/blob - src/blocksorting/bs.h
d3c47c9ec365c18af7a0eb6d55d65876a560c4c2
[z.facultad/75.06/jacu.git] / src / blocksorting / bs.h
1
2 #ifndef _BS_H_
3 #define _BS_H_
4
5 #include <string.h>
6 #include <stdlib.h>
7 #include <stdio.h>
8
9 #ifndef Uint32
10 typedef unsigned long int Uint32;
11 #endif
12
13 typedef struct _bs_t_ t_BlockSort;
14
15 typedef struct _bs_data_t_ {
16         Uint32 pos_inicial;
17         Uint32 pos_final;
18         char ord; /* indica si esta ordenada */
19
20         /* Guardo el puntero al padre */
21         t_BlockSort *bs;        
22 } t_BlockSortData;
23
24 struct _bs_t_ {
25         char *data;
26         t_BlockSortData *array;
27         Uint32 len;
28 };
29
30
31 /** Inicializa un BlockSorting
32  *
33  *  \param len Tamaño de página a utilizar
34  */
35 t_BlockSort *bs_create(Uint32 len);
36
37 /** Libera un BlockSorting
38  *
39  *  \param bs BlockSorting previamente inicializado.
40  */
41 void bs_destroy(t_BlockSort *bs);
42
43 /** Resuelve un BlockSorting
44  *
45  *  \param in Array de bytes que se pretende procesar.
46  *  \param out Array donde guardar la columna resultante.
47  *  \param k Puntero donde guardar la posicion del array original.
48  *  \oaram leido Tamaño de in (por si el tamaño de in es menor al de la pagina).
49  */
50 void bs_solve(char *in, char *out, t_BlockSort *bs, Uint32 *k, Uint32 leido);
51
52 /** Obtiene el array original a partir de dst y k
53  *
54  *  \param dst Array donde guardar el array original
55  *  \param c Array generado opr bs_solve.
56  *  \param k Valor retornado por bs_solve.
57  *  \param len Tamaño de c
58  */
59 void bs_restore(char *dst, char *c, Uint32 k, Uint32 len);
60
61 int bs_readblock(FILE *fp, char *data, Uint32 pagesize, int usar_dic);
62
63 char *bs_finalblock(char *data, Uint32 len, Uint32 *new_size);
64
65 #endif
66