]> git.llucax.com Git - z.facultad/75.06/jacu.git/blob - src/zerogrouping/zerogrouping.c
Algunas mejoras, comentarios y arreglos
[z.facultad/75.06/jacu.git] / src / zerogrouping / zerogrouping.c
1 /* vim: set noexpandtab tabstop=4 shiftwidth=4 wrap:
2  *----------------------------------------------------------------------------
3  *                                  jacu
4  *----------------------------------------------------------------------------
5  * This file is part of jacu.
6  *
7  * jacu is free software; you can redistribute it and/or modify it under the
8  * terms of the GNU General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option) any later
10  * version.
11  *
12  * jacu is distributed in the hope that it will be useful, but WITHOUT ANY
13  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15  * details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with jacu; if not, write to the Free Software Foundation, Inc., 59 Temple
19  * Place, Suite 330, Boston, MA  02111-1307  USA
20  *----------------------------------------------------------------------------
21  * Creado:  lun jun 21 05:40:38 ART 2004
22  * Autores: Leandro Lucarella <llucare@fi.uba.ar>
23  *----------------------------------------------------------------------------
24  *
25  * $Id: vfile.c 748 2004-06-21 00:46:08Z llucare $
26  *
27  */
28
29 #include "zerogrouping.h"
30
31 /** \file
32  *
33  * Agrupador de ceros.
34  * 
35  * ImplementaciĆ³n del agrupador de ceros. TODO completar doc.
36  *
37  */
38
39 /** FIXME
40  * El dst se asume que tiene reservada al menos ceil(size/2.0)+size bytes de
41  * memoria por si se llegara a expandir. size es el tamaƱo a leer de src. Se
42  * devuelve la cantidad de bytes escritos en dst. */
43 size_t zg_group(char* dst, char *src, size_t size)
44 {
45         char count;
46         size_t i;
47         size_t total = 0;
48         int in_zero = 0;
49         for (i = 0; i < size; ++i)
50         {
51                 if (src[i] == '\0')
52                 {
53                         if (in_zero)
54                         {
55                                 ++count; /* FIXME verificar que no pase 255 */
56                         }
57                         else
58                         {
59                                 in_zero = 1; /* entramos en serie de ceros */
60                                 count = 0; /* reiniciamos contador de ceros */
61                         }
62                 }
63                 else
64                 {
65                         if (in_zero)
66                         {
67                                 in_zero = 0;
68                                 dst[total++] = '\0';
69                                 dst[total++] = count;
70                         }
71                         dst[total++] = src[i];
72                 }
73         }
74         if (in_zero) /* si estaba en una serie de ceros, terminamos de escribir. */
75         {
76                 dst[total++] = '\0';
77                 dst[total++] = count;
78         }
79         return total;
80 }
81
82 size_t zg_ungroup(char* dst, char *src, size_t size)
83 {
84         return 0;
85 }
86