pdf-devel
[Top][All Lists]
Advanced

[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




reply via email to

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