[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pdf-devel] Changed List module API to hide pdf_list structures.
From: |
gerel |
Subject: |
[pdf-devel] Changed List module API to hide pdf_list structures. |
Date: |
Thu, 13 Mar 2008 18:04:36 -0300 |
Hey, as Aleksander suggested and I also agreed here are the patches to hide
pdf_list structures from callers to the List module.
I tested the new API with the little test I have and it works fine.
##
Index: doc/gnupdf.texi
===================================================================
RCS file: /sources/pdf/libgnupdf/doc/gnupdf.texi,v
retrieving revision 1.32
diff -u -r1.32 gnupdf.texi
--- doc/gnupdf.texi 10 Mar 2008 17:50:19 -0000 1.32
+++ doc/gnupdf.texi 13 Mar 2008 21:08:35 -0000
@@ -959,7 +959,7 @@
@node Creating and Destroying Lists
@subsection Creating and Destroying Lists
address@hidden pdf_list_t pdf_list_create (pdf_list_element_equals_fn_t
@var{equals_fn}, pdf_list_element_dipose_fn_t @var{dispose_fn}, pdf_bool_t
@var{allow_duplicates})
address@hidden pdf_status_t pdf_list_create (pdf_list_element_equals_fn_t
@var{equals_fn}, pdf_list_element_dipose_fn_t @var{dispose_fn}, pdf_bool_t
@var{allow_duplicates}, pdf_list_t @var{*list})
Create a new list containing no elements.
@@ -976,14 +976,26 @@
This parameter indicate if the list is allowed to contain duplicate
elements (elements for which @var{equals_fn} evaluate to
@code{PDF_TRUE}).
address@hidden list
+A pointer to a list where the new one will be saved.
@end table
@item Returns
-The newly created list.
+A status variable:
address@hidden @code
address@hidden PDF_OK
address@hidden contains a new empty list.
address@hidden PDF_EBADDATA
address@hidden points to NULL.
address@hidden table
@item Usage example
@example
pdf_list_t mylist;
-mylist = pdf_list_create (list_element_equal_p, list_element_destroy,
PDF_FALSE);
+if (pdf_list_create (list_element_equal_p, list_element_destroy, PDF_FALSE,
+ &mylist) != PDF_OK)
+ @{
+ /* manage the error... */
+ @}
@end example
@end table
@end deftypefun
@@ -1446,7 +1458,7 @@
@node Working with Iterators
@subsection Working with Iterators
address@hidden pdf_list_iterator_t pdf_list_iterator (pdf_list_t @var{list})
address@hidden pdf_status_t pdf_list_iterator (pdf_list_t @var{list},
pdf_list_iterator_t @var{*itr})
Create an iterator traversing a list.
@@ -1458,9 +1470,19 @@
@table @var
@item list
A list.
address@hidden itr
+A pointer to where the new iterator will be saved.
@end table
@item Returns
-An iterator pointing to the head of @var{list}.
+A status variable:
address@hidden @code
address@hidden PDF_OK
address@hidden contains a new iterator for @var{list}.
address@hidden PDF_ENOMEM
+There is no memory available for a new iterator.
address@hidden PDF_EBADDATA
address@hidden points to NULL.
address@hidden table
@item Usage example
@example
XXX
@@ -1468,7 +1490,7 @@
@end table
@end deftypefun
address@hidden pdf_list_iterator_t pdf_list_iterator_from_to (pdf_list_t
@var{list}, pdf_size_t @var{start_index}, pdf_size_t @var{end_index})
address@hidden pdf_status_t pdf_list_iterator_from_to (pdf_list_t @var{list},
pdf_size_t @var{start_index}, pdf_size_t @var{end_index}, pdf_list_iterator_t
@var{*itr})
Create an iterator traversing the element with indices @code{i},
@code{start_index <= i < end_index}, of a list.
@@ -1485,9 +1507,19 @@
A position in @var{list}.
@item end_index
A position in @var{list}.
address@hidden itr
+A pointer to an iterator where the new one will be saved.
@end table
@item Returns
-An iterator pointing to @var{start_index}.
+A status variable:
address@hidden @code
address@hidden PDF_OK
address@hidden contains a new iterator for @var{list} pointing to
@var{start_index}.
address@hidden PDF_ENOMEM
+There is no memory available for a new iterator.
address@hidden PDF_EBADDATA
address@hidden points to NULL.
address@hidden table
@item Usage example
@example
XXX
Index: src/base/pdf-list.c
===================================================================
RCS file: /sources/pdf/libgnupdf/src/base/pdf-list.c,v
retrieving revision 1.2
diff -u -r1.2 pdf-list.c
--- src/base/pdf-list.c 11 Mar 2008 19:16:49 -0000 1.2
+++ src/base/pdf-list.c 13 Mar 2008 21:08:39 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-03-11 14:16:11 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-03-13 17:07:16 gerel"
*
* File: pdf-list.c
* Date: Sat Mar 1 02:14:35 2008
@@ -29,18 +29,34 @@
/* Creation and destruction functions */
-inline pdf_list_t
+pdf_status_t
pdf_list_create (pdf_list_element_equals_fn_t equals_fn,
pdf_list_element_dispose_fn_t dispose_fn,
- pdf_bool_t allow_duplicates)
+ pdf_bool_t allow_duplicates, pdf_list_t * list)
{
- pdf_list_t list;
- list.gl_list = gl_list_create_empty(GL_ARRAY_LIST, equals_fn, NULL,
- dispose_fn, allow_duplicates);
- return (list);
+ pdf_status_t st;
+
+ st = PDF_OK;
+
+ if (list != NULL)
+ {
+ list->gl_list = gl_list_create_empty(GL_ARRAY_LIST, equals_fn, NULL,
+ dispose_fn, allow_duplicates);
+ if (list->gl_list == NULL)
+ {
+ st = PDF_ERROR;
+ }
+ }
+ else
+ {
+ st = PDF_EBADDATA;
+ }
+
+ return (st);
}
-inline pdf_status_t
+
+pdf_status_t
pdf_list_destroy (pdf_list_t list)
{
gl_list_free ((gl_list_t) list.gl_list);
@@ -49,7 +65,7 @@
/* Property management functions */
-inline pdf_size_t
+pdf_size_t
pdf_list_size (pdf_list_t list)
{
return ((pdf_size_t) gl_list_size((gl_list_t) list.gl_list));
@@ -57,7 +73,7 @@
/* Element searching functions */
-inline pdf_list_node_t
+pdf_list_node_t
pdf_list_search (pdf_list_t list, const void* element)
{
@@ -68,7 +84,7 @@
return (node);
}
-inline pdf_list_node_t
+pdf_list_node_t
pdf_list_search_from (pdf_list_t list, pdf_size_t start_index,
const void* element)
{
@@ -80,7 +96,7 @@
return (node);
}
-inline pdf_list_node_t
+pdf_list_node_t
pdf_list_search_from_to (pdf_list_t list, pdf_size_t start_index,
pdf_size_t end_index, const void* element)
{
@@ -91,7 +107,7 @@
return (node);
}
-inline pdf_list_node_t
+pdf_list_node_t
pdf_list_next_node (pdf_list_t list, pdf_list_node_t node)
{
pdf_list_node_t next;
@@ -103,7 +119,7 @@
}
-inline pdf_list_node_t
+pdf_list_node_t
pdf_list_previous_node (pdf_list_t list, pdf_list_node_t node)
{
pdf_list_node_t prev;
@@ -114,14 +130,14 @@
return (prev);
}
-inline pdf_size_t
+pdf_size_t
pdf_list_indexof (pdf_list_t list, const void*element)
{
return ((pdf_size_t) gl_list_indexof ((gl_list_t)list.gl_list, element));
}
-inline pdf_size_t
+pdf_size_t
pdf_list_indexof_from (pdf_list_t list, pdf_size_t start_index,
const void* element)
{
@@ -130,7 +146,7 @@
}
-inline pdf_size_t
+pdf_size_t
pdf_list_indexof_from_to (pdf_list_t list, pdf_size_t start_index,
pdf_size_t end_index, const void* element)
{
@@ -142,7 +158,7 @@
/* Element setting and getting functions */
-inline const void *
+const void *
pdf_list_node_value (pdf_list_t list, pdf_list_node_t node)
{
return (gl_list_node_value ((gl_list_t)list.gl_list,
@@ -150,14 +166,14 @@
}
-inline const void *
+const void *
pdf_list_get_at (pdf_list_t list, pdf_size_t position)
{
return (gl_list_get_at ((gl_list_t)list.gl_list, position));
}
-inline pdf_list_node_t
+pdf_list_node_t
pdf_list_set_at (pdf_list_t list, pdf_size_t position, const void* element)
{
pdf_list_node_t node;
@@ -172,7 +188,7 @@
/* Element addition and removal functions */
-inline pdf_list_node_t
+pdf_list_node_t
pdf_list_add_first (pdf_list_t list, const void* element)
{
pdf_list_node_t node;
@@ -183,7 +199,7 @@
}
-inline pdf_list_node_t
+pdf_list_node_t
pdf_list_add_last (pdf_list_t list, const void* element)
{
pdf_list_node_t node;
@@ -194,7 +210,7 @@
}
-inline pdf_list_node_t
+pdf_list_node_t
pdf_list_add_at (pdf_list_t list, pdf_size_t position, const void* element)
{
pdf_list_node_t node;
@@ -205,7 +221,7 @@
}
-inline pdf_status_t
+pdf_status_t
pdf_list_remove_node (pdf_list_t list, pdf_list_node_t node)
{
gl_list_remove_node ((gl_list_t)list.gl_list, (gl_list_node_t)node.gl_node);
@@ -213,7 +229,7 @@
}
-inline pdf_status_t
+pdf_status_t
pdf_list_remove_at (pdf_list_t list, pdf_size_t position)
{
pdf_status_t st;
@@ -229,7 +245,7 @@
}
-inline pdf_status_t
+pdf_status_t
pdf_list_remove (pdf_list_t list, const void * element)
{
pdf_status_t st;
@@ -246,50 +262,68 @@
/* Element iterator functions */
-inline pdf_list_iterator_t
-pdf_list_iterator (pdf_list_t list)
+pdf_status_t
+pdf_list_iterator (pdf_list_t list, pdf_list_iterator_t * itr)
{
- pdf_list_iterator_t itr;
+ pdf_status_t st;
- itr.gl_iterator = pdf_alloc (sizeof(gl_list_iterator_t));
+ st = PDF_OK;
- if (itr.gl_iterator != NULL)
+ if (itr != NULL)
{
- *((gl_list_iterator_t*)itr.gl_iterator) =
- gl_list_iterator ((gl_list_t)list.gl_list);
+ itr->gl_iterator = pdf_alloc (sizeof(gl_list_iterator_t));
+
+ if (itr->gl_iterator != NULL)
+ {
+ *((gl_list_iterator_t*)itr->gl_iterator) =
+ gl_list_iterator ((gl_list_t)list.gl_list);
+ }
+ else
+ {
+ st = PDF_ENOMEM;
+ }
}
else
{
- pdf_perror (PDF_ENOMEM, "pdf_list_iterator()");
+ st = PDF_EBADDATA;
}
-
- return (itr);
+
+ return (st);
}
-inline pdf_list_iterator_t
+pdf_status_t
pdf_list_iterator_from_to (pdf_list_t list, pdf_size_t start_index,
- pdf_size_t end_index)
+ pdf_size_t end_index, pdf_list_iterator_t *itr)
{
- pdf_list_iterator_t itr;
+ pdf_status_t st;
- itr.gl_iterator = pdf_alloc (sizeof(gl_list_iterator_t));
+ st = PDF_OK;
- if (itr.gl_iterator != NULL)
+ if (itr != NULL)
{
- *((gl_list_iterator_t*)itr.gl_iterator) =
- gl_list_iterator_from_to ((gl_list_t)list.gl_list, start_index,
- end_index);
+ itr->gl_iterator = pdf_alloc (sizeof(gl_list_iterator_t));
+
+ if (itr->gl_iterator != NULL)
+ {
+ *((gl_list_iterator_t*)itr->gl_iterator) =
+ gl_list_iterator_from_to ((gl_list_t)list.gl_list, start_index,
+ end_index);
+ }
+ else
+ {
+ st = PDF_ENOMEM;
+ }
}
else
{
- pdf_perror (PDF_ENOMEM, "pdf_list_iterator_from_to()");
+ st = PDF_EBADDATA;
}
- return (itr);
+ return (st);
}
-inline pdf_status_t
+pdf_status_t
pdf_list_iterator_next (pdf_list_iterator_t *iterator,
const void **element_pointer,
pdf_list_node_t *node_pointer)
@@ -306,7 +340,7 @@
return st;
}
-inline pdf_status_t
+pdf_status_t
pdf_list_iterator_free (pdf_list_iterator_t *iterator)
{
gl_list_iterator_free ((gl_list_iterator_t*)(iterator->gl_iterator));
Index: src/base/pdf-list.h
===================================================================
RCS file: /sources/pdf/libgnupdf/src/base/pdf-list.h,v
retrieving revision 1.2
diff -u -r1.2 pdf-list.h
--- src/base/pdf-list.h 11 Mar 2008 19:16:49 -0000 1.2
+++ src/base/pdf-list.h 13 Mar 2008 21:08:39 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-03-11 15:21:56 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-03-13 17:01:28 gerel"
*
* File: pdf-list.h
* Date: Sat Mar 1 02:14:35 2008
@@ -61,9 +61,9 @@
/* Creation and destruction functions */
-pdf_list_t pdf_list_create (pdf_list_element_equals_fn_t
+pdf_status_t pdf_list_create (pdf_list_element_equals_fn_t
equals_fn, pdf_list_element_dispose_fn_t
dispose_fn,
- pdf_bool_t allow_duplicates);
+ pdf_bool_t allow_duplicates, pdf_list_t *list);
pdf_status_t pdf_list_destroy (pdf_list_t list);
/* Property management functions */
@@ -106,10 +106,11 @@
/* Element iterator functions */
-pdf_list_iterator_t pdf_list_iterator (pdf_list_t list);
-pdf_list_iterator_t pdf_list_iterator_from_to (pdf_list_t list,
- pdf_size_t start_index,
- pdf_size_t end_index);
+pdf_status_t pdf_list_iterator (pdf_list_t list, pdf_list_iterator_t *itr);
+pdf_status_t pdf_list_iterator_from_to (pdf_list_t list,
+ pdf_size_t start_index,
+ pdf_size_t end_index,
+ pdf_list_iterator_t *itr);
pdf_status_t pdf_list_iterator_next (pdf_list_iterator_t *iterator,
const void **element_pointer,
pdf_list_node_t *node_pointer);
@@ -118,6 +119,7 @@
/* END PUBLIC */
+
#endif /* PDF_LIST_H */
/* End of pdf-list.h */
Index: src/base/pdf-stm.c
===================================================================
RCS file: /sources/pdf/libgnupdf/src/base/pdf-stm.c,v
retrieving revision 1.6
diff -u -r1.6 pdf-stm.c
--- src/base/pdf-stm.c 8 Mar 2008 23:49:31 -0000 1.6
+++ src/base/pdf-stm.c 13 Mar 2008 21:08:39 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/03/09 00:28:34 jemarch"
+/* -*- mode: C -*- Time-stamp: "2008-03-13 17:05:59 gerel"
*
* File: pdf-stm.c
* Date: Fri Jul 6 18:43:15 2007
@@ -658,14 +658,14 @@
pdf_stm_t stm;
stm = (pdf_stm_t) pdf_alloc (sizeof (struct pdf_stm_s));
- stm->read_filter_list =
- pdf_list_create (NULL, /* compare_fn */
- pdf_stm_filter_dealloc_list,
- PDF_TRUE); /* allow duplicates */
- stm->write_filter_list =
- pdf_list_create (NULL, /* compare_fn */
- pdf_stm_filter_dealloc_list,
- PDF_TRUE); /* allow duplicates */
+ pdf_list_create (NULL, /* compare_fn */
+ pdf_stm_filter_dealloc_list,
+ PDF_TRUE,
+ &stm->read_filter_list); /* allow duplicates */
+ pdf_list_create (NULL, /* compare_fn */
+ pdf_stm_filter_dealloc_list,
+ PDF_TRUE,
+ &stm->write_filter_list); /* allow duplicates */
return stm;
}
@@ -756,7 +756,7 @@
return PDF_TRUE;
}
- iter = pdf_list_iterator (filter_list);
+ pdf_list_iterator (filter_list, &iter);
while (pdf_list_iterator_next (&iter, (const void **) &filter, &node) ==
PDF_OK)
{
if (filter->funcs.apply (filter->data,
###
cheers,
-gerel
- [pdf-devel] Changed List module API to hide pdf_list structures.,
gerel <=