pdf-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [pdf-devel] Re: List unit test failing


From: jemarch
Subject: Re: [pdf-devel] Re: List unit test failing
Date: Mon, 21 Apr 2008 19:58:17 +0200
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/23.0.60 (powerpc-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO)

   > If someone knows how "allow_duplicates" is supposed to work, help me :-)

   This parameter seems not used in the gnulib array list implementation 
   (gl_array_list.[c|h]).

   jemarch, is this a bug in gnulib? or are we misunderstanding something?

Hm. From the gl_list.h file:

   ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in
   the list. The implementation may verify this at runtime.  */

It says `may' and not `should'. 

It seems that the `allow_duplicates' flag is used in some
implementations (such as gl_anytreehash_list1.h) where an efficiency
trick can be used to improve speedness in insertions.

So it seems Bruno didnt think that the control of duplicate values
should be done in the gl_list implementation level but in an upper
level.

I would do exactly that: to extend the definition of pdf-list to have
a boolean `allow_duplicates' and control value duplication in the
pdf-list level.

The following patch implement that support (and the current list tests
run fine). Note that the patch includes changes in the API of
pdf_list_add_first(), pdf_list_add_last(), pdf_list_add_at() and
pdf_list_set_at(). 

Aleks, Gerel, do you think this is a good solution?

Index: doc/gnupdf.texi
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/doc/gnupdf.texi,v
retrieving revision 1.50
diff -r1.50 gnupdf.texi
1742a1743,1745
> @item PDF_BADDATA
> The list do not allow duplicated values and already contain
> @var{element}.
1754c1757
< @deftypefun pdf_list_node_t pdf_list_add_first (pdf_list_t @var{list}, const 
void* @var{element})
---
> @deftypefun pdf_status_t pdf_list_add_first (pdf_list_t @var{list}, const 
> void* @var{element}, pdf_list_node_t address@hidden)
1756c1759,1760
< Add an element as the first element of the list.
---
> Add an element as the first element of the list. If @var{node} is not
> NULL then a reference to the newly created node is copied to it.
1764a1769,1770
> @item node
> If non NULL, a list node variable used to contain the added element.
1767c1773,1780
< The node containing the added elemetn.
---
> A PDF status value:
> @table @code
> @item PDF_OK
> The element was inserted successfully.
> @item PDF_EBADDATA
> The list do not allow duplicated values and already contain
> @var{element}.
> @end table
1775c1788
< @deftypefun pdf_list_node_t pdf_list_add_last (pdf_list_t @var{list}, const 
void* @var{element})
---
> @deftypefun pdf_status_t pdf_list_add_last (pdf_list_t @var{list}, const 
> void* @var{element}, pdf_list_node_t address@hidden)
1777c1790,1791
< Add an element as the last element of the list.
---
> Add an element as the last element of the list. If @var{node} is not
> NULL then a reference to the newly created node is copied to it.
1785a1800,1801
> @item node
> If non NULL, a list node variable used to contain the added element.
1788c1804,1811
< The node containing the given @var{element}.
---
> A PDF status value:
> @table @code
> @item PDF_OK
> The element was inserted successfully.
> @item PDF_EBADDATA
> The list do not allow duplicated values and already contain
> @var{element}.
> @end table
1819a1843,1845
> @item PDF_BADDATA
> The list do not allow duplicated values and already contain
> @var{element}.
Index: src/base/pdf-list.h
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/src/base/pdf-list.h,v
retrieving revision 1.7
diff -r1.7 pdf-list.h
1c1
< /* -*- mode: C -*- Time-stamp: "2008-04-13 12:09:09 gerel"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:33:56 jemarch"
47a48
>   pdf_bool_t allow_duplicates;
115,116c116,117
< pdf_list_node_t pdf_list_add_first (pdf_list_t list, const void* element);
< pdf_list_node_t pdf_list_add_last (pdf_list_t list, const void* element);
---
> pdf_status_t pdf_list_add_first (pdf_list_t list, const void* element, 
> pdf_list_node_t *node);
> pdf_status_t pdf_list_add_last (pdf_list_t list, const void* element, 
> pdf_list_node_t *node);
193a195,196
>       list->allow_duplicates = allow_duplicates;
> 
528,529c531,532
<   if ((position > 0 && position < pdf_list_size (list)) ||
<       (position == 0))
---
>   if (list.allow_duplicates ||
>       (gl_list_search ((gl_list_t)list.gl_list, element) == NULL))
531c534,535
<       if (node != NULL)
---
>       if (((position > 0 && position < pdf_list_size (list)) ||
>            (position == 0)))
533,534c537,545
<           node->gl_node = gl_list_set_at ((gl_list_t)list.gl_list, position,
<                                           element);
---
>           if (node != NULL)
>             {
>               node->gl_node = gl_list_set_at ((gl_list_t)list.gl_list, 
> position,
>                                               element);
>             }
>           else
>             {
>               gl_list_set_at ((gl_list_t)list.gl_list, position, element);
>             }
538,539c549,550
<           gl_list_set_at ((gl_list_t)list.gl_list, position, element);
<         }
---
>           st = PDF_EINVRANGE;
>         }  
542,544c553,556
<     {
<       st = PDF_EINVRANGE;
<     }  
---
>     {      
>       /* Duplicated list values are not allowed */
>       st = PDF_EBADDATA;
>     }
553,554c565,568
< EXTERN_INLINE pdf_list_node_t
< pdf_list_add_first (pdf_list_t list, const void* element)
---
> EXTERN_INLINE pdf_status_t
> pdf_list_add_first (pdf_list_t list,
>                     const void* element,
>                     pdf_list_node_t *node)
556c570,571
<   pdf_list_node_t node;
---
>   pdf_status_t st;
>   gl_list_node_t gl_node;
558c573,587
<   node.gl_node = gl_list_add_first ((gl_list_t)list.gl_list, element);
---
>   st = PDF_OK;
>   if (list.allow_duplicates ||
>       (gl_list_search ((gl_list_t)list.gl_list, element) == NULL))
>     {
>       gl_node = gl_list_add_first ((gl_list_t)list.gl_list, element);
>       if (node != NULL)
>         {
>           node->gl_node = gl_node;
>         }
>     }
>   else
>     {
>       /* Duplicated list elements are not allowed */
>       st = PDF_EBADDATA;
>     }
560c589
<   return (node);
---
>   return (st);
564,565c593,596
< EXTERN_INLINE pdf_list_node_t
< pdf_list_add_last (pdf_list_t list, const void* element)
---
> EXTERN_INLINE pdf_status_t
> pdf_list_add_last (pdf_list_t list,
>                    const void* element,
>                    pdf_list_node_t *node)
567c598,599
<   pdf_list_node_t node;
---
>   pdf_status_t st;
>   gl_list_node_t gl_node;
569c601,615
<   node.gl_node = gl_list_add_last ((gl_list_t)list.gl_list, element);
---
>   st = PDF_OK;
>   if (list.allow_duplicates ||
>       (gl_list_search ((gl_list_t)list.gl_list, element) == NULL))
>     {
>       gl_node = gl_list_add_last ((gl_list_t)list.gl_list, element);
>       if (node != NULL)
>         {
>           node->gl_node = gl_node;
>         }
>     }
>   else
>     {
>       /* Duplicated list elements are not allowed */
>       st = PDF_EBADDATA;
>     }
571c617
<   return (node);
---
>   return (st);
585,586c631,632
<   if ((position > 0 && position < pdf_list_size (list)) ||
<       (position == 0))
---
>   if (list.allow_duplicates ||
>       (gl_list_search ((gl_list_t)list.gl_list, element) == NULL))
588c634,635
<       if (node != NULL)
---
>       if ((position > 0 && position < pdf_list_size (list)) ||
>           (position == 0))
590,591c637,645
<           node->gl_node = gl_list_add_at ((gl_list_t)list.gl_list,
<                                           position, element);
---
>           if (node != NULL)
>             {
>               node->gl_node = gl_list_add_at ((gl_list_t)list.gl_list,
>                                               position, element);
>             }
>           else
>             {
>               gl_list_add_at ((gl_list_t)list.gl_list, position, element);
>             }
595c649
<           gl_list_add_at ((gl_list_t)list.gl_list, position, element);
---
>           st = PDF_EINVRANGE;
600c654,655
<       st = PDF_EINVRANGE;
---
>       /* Duplicated list values are not allowed */
>       st = PDF_EBADDATA;
Index: src/base/pdf-stm.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/src/base/pdf-stm.c,v
retrieving revision 1.7
diff -r1.7 pdf-stm.c
1c1
< /* -*- mode: C -*- Time-stamp: "2008-03-13 17:05:59 gerel"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:31:35 jemarch"
713c713,714
<                           (const void *) filter);
---
>                            (const void *) filter,
>                            NULL);
719c720,721
<                           (const void *) filter);
---
>                            (const void *) filter,
>                            NULL);
Index: src/base/pdf-text-filter.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/src/base/pdf-text-filter.c,v
retrieving revision 1.2
diff -r1.2 pdf-text-filter.c
123c123
<       pdf_list_add_last(new_wb_list, &new_word);
---
>       pdf_list_add_last(new_wb_list, &new_word, NULL);
Index: src/base/pdf-text.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/src/base/pdf-text.c,v
retrieving revision 1.7
diff -r1.7 pdf-text.c
1745c1745
<           pdf_list_add_last(word_boundaries, p_word);
---
>           pdf_list_add_last(word_boundaries, p_word, NULL);
Index: torture/unit/base/list/pdf-list-add-first.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-add-first.c,v
retrieving revision 1.2
diff -r1.2 pdf-list-add-first.c
1c1
< /* -*- mode: C -*- Time-stamp: "2008-03-17 22:56:14 gerel"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:38:01 jemarch"
52,53c52,53
<   pdf_list_add_first (list, &elem);
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
>   pdf_list_add_first (list, &elem, NULL);
56c56
<   pdf_list_add_first (list, &elem2);
---
>   pdf_list_add_first (list, &elem2, NULL);
78,79c78,79
<   pdf_list_add_first (list, &elem);
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
>   pdf_list_add_first (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-add-last.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-add-last.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-add-last.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:22:42 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:38:26 jemarch"
49c49
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
52c52
<   pdf_list_add_last (list, &elem2);
---
>   pdf_list_add_last (list, &elem2, NULL);
Index: torture/unit/base/list/pdf-list-get-at.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-get-at.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-get-at.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:25:13 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:38:52 jemarch"
48c48
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
75c75
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
102c102
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-indexof-from-to.c
===================================================================
RCS file: 
/cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-indexof-from-to.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-indexof-from-to.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:22:24 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:40:22 jemarch"
51c51
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
81c81
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
114c114
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
143c143
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-indexof-from.c
===================================================================
RCS file: 
/cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-indexof-from.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-indexof-from.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:25:04 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:39:49 jemarch"
49c49
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
79c79
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
109c109
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-indexof.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-indexof.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-indexof.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:24:53 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:39:14 jemarch"
50c50
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-iterator-from-to.c
===================================================================
RCS file: 
/cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-iterator-from-to.c,v
retrieving revision 1.2
diff -r1.2 pdf-list-iterator-from-to.c
1c1
< /* -*- mode: C -*- Time-stamp: "2008-03-18 15:19:40 gerel"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:40:53 jemarch"
49,50c49,50
<   pdf_list_add_last (list, &elem);
<   pdf_list_add_last (list, &elem2);
---
>   pdf_list_add_last (list, &elem, NULL);
>   pdf_list_add_last (list, &elem2, NULL);
79,80c79,80
<   pdf_list_add_last (list, &elem);
<   pdf_list_add_last (list, &elem2);
---
>   pdf_list_add_last (list, &elem, NULL);
>   pdf_list_add_last (list, &elem2, NULL);
118c118
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-iterator-next.c
===================================================================
RCS file: 
/cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-iterator-next.c,v
retrieving revision 1.2
diff -r1.2 pdf-list-iterator-next.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/04/06 22:53:28 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:41:07 jemarch"
49c49
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-next-node.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-next-node.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-next-node.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:25:24 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:42:28 jemarch"
50,51c50,51
<   node = pdf_list_add_last (list, &elem);
<   pdf_list_add_last (list, &elem2);
---
>   pdf_list_add_last (list, &elem, &node);
>   pdf_list_add_last (list, &elem2, NULL);
81c81
<   node = pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, &node);
110c110
<   node = pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, &node);
Index: torture/unit/base/list/pdf-list-node-value.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-node-value.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-node-value.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:23:53 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:42:46 jemarch"
48c48
<   node = pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, &node);
Index: torture/unit/base/list/pdf-list-previous-node.c
===================================================================
RCS file: 
/cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-previous-node.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-previous-node.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:24:33 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:43:25 jemarch"
50,51c50,51
<   pdf_list_add_last (list, &elem);
<   node = pdf_list_add_last (list, &elem2);
---
>   pdf_list_add_last (list, &elem, NULL);
>   pdf_list_add_last (list, &elem2, &node);
81c81
<   node = pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, &node);
110c110
<   node = pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, &node);
Index: torture/unit/base/list/pdf-list-remove-at.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-remove-at.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-remove-at.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:23:12 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:43:43 jemarch"
48c48
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
74c74
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-remove-node.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-remove-node.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-remove-node.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:22:34 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:44:20 jemarch"
48c48
<   node = pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, &node);
Index: torture/unit/base/list/pdf-list-remove.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-remove.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-remove.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:34:45 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:43:59 jemarch"
51c51
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
78c78
<   pdf_list_add_first (list, &elem);
---
>   pdf_list_add_first (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-search-from-to.c
===================================================================
RCS file: 
/cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-search-from-to.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-search-from-to.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:34:57 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:45:55 jemarch"
52c52
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
79c79
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
107c107
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
133c133
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-search-from.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-search-from.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-search-from.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:35:12 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:45:29 jemarch"
53c53
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
80c80
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
108c108
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
134c134
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-search.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-search.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-search.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:35:26 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:44:59 jemarch"
52c52
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
80c80
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
109c109
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
Index: torture/unit/base/list/pdf-list-set-at.c
===================================================================
RCS file: /cvsroot/pdf/libgnupdf/torture/unit/base/list/pdf-list-set-at.c,v
retrieving revision 1.1
diff -r1.1 pdf-list-set-at.c
1c1
< /* -*- mode: C -*- Time-stamp: "08/03/17 14:24:24 jemarch"
---
> /* -*- mode: C -*- Time-stamp: "08/04/21 19:47:35 jemarch"
50c50
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);
79c79
<   pdf_list_add_last (list, &elem);
---
>   pdf_list_add_last (list, &elem, NULL);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]