pdf-devel
[Top][All Lists]
Advanced

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

Re: [pdf-devel] Public API and gl_list


From: gerel
Subject: Re: [pdf-devel] Public API and gl_list
Date: Tue, 11 Mar 2008 15:00:55 -0300

Ok, I finally got the new API working.
There are some changes for the API documentation though. Functions
pdf_list_iterator() and pdf_list_iterator_from_to() may fail when calling
pdf_alloc() so the caller must check for the NULL value before using it.

Example,
##
        pdf_list_iterator_t itr;

        itr = pdf_list_iterator (list);
        if (itr.gl_iterator != NULL)
          {
            /* Use the iterator... */
          }
        else
          {
            /* failed to alloc an iterator... */
          }
###


Here are the corresponding patches.

##

Index: src/base/pdf-list.h
===================================================================
RCS file: /sources/pdf/libgnupdf/src/base/pdf-list.h,v
retrieving revision 1.1
diff -u -r1.1 pdf-list.h
--- src/base/pdf-list.h 7 Mar 2008 13:58:37 -0000       1.1
+++ src/base/pdf-list.h 11 Mar 2008 17:54:09 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-03-06 21:35:03 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-03-11 13:38:50 gerel"
  *
  *       File:         pdf-list.h
  *       Date:         Sat Mar 1 02:14:35 2008
@@ -27,22 +27,38 @@
 #define PDF_LIST_H
 
 #include <pdf-types.h>
+#include <stdbool.h>
 #include <pdf-error.h>
-
+#include <pdf-alloc.h>
 
 /* BEGIN PUBLIC */
 
-#include <gl_array_list.h>
-
 /* List module API implementation */
 
 /* Data types */
 
-typedef gl_list_t pdf_list_t;
-typedef gl_list_node_t pdf_list_node_t;
-typedef gl_list_iterator_t pdf_list_iterator_t;
-typedef gl_listelement_equals_fn pdf_list_element_equals_fn_t;
-typedef gl_listelement_dispose_fn pdf_list_element_dispose_fn_t;
+struct pdf_list_s
+{
+  void *gl_list;
+};
+ 
+struct pdf_list_iterator_s
+{
+  void *gl_iterator;
+};
+
+struct pdf_list_node_s
+{
+  void *gl_node;
+};
+
+typedef struct pdf_list_s pdf_list_t;
+typedef struct pdf_list_node_s pdf_list_node_t;
+typedef struct pdf_list_iterator_s pdf_list_iterator_t;
+
+typedef pdf_bool_t (*pdf_list_element_equals_fn_t) (const void *elt1, const 
void *elt2);
+typedef pdf_size_t (*pdf_list_element_hashcode_fn_t) (const void *elt);
+typedef void (*pdf_list_element_dispose_fn_t) (const void *elt);
 
 /* Creation and destruction functions */

 
Index: src/base/pdf-list.c
===================================================================
RCS file: /sources/pdf/libgnupdf/src/base/pdf-list.c,v
retrieving revision 1.1
diff -u -r1.1 pdf-list.c
--- src/base/pdf-list.c 7 Mar 2008 13:58:37 -0000       1.1
+++ src/base/pdf-list.c 11 Mar 2008 17:54:09 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-03-06 00:16:38 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-03-11 14:16:11 gerel"
  *
  *       File:         pdf-list.c
  *       Date:         Sat Mar 1 02:14:35 2008
@@ -25,7 +25,7 @@
 
 
 #include <pdf-list.h>
-
+#include <gl_array_list.h>
 
 /* Creation and destruction functions */
 
@@ -34,14 +34,16 @@
                  pdf_list_element_dispose_fn_t dispose_fn,
                  pdf_bool_t allow_duplicates)
 {
-  return ((pdf_list_t) gl_list_create_empty(GL_ARRAY_LIST, equals_fn, NULL,
-                                            dispose_fn, allow_duplicates));
+  pdf_list_t list;
+  list.gl_list = gl_list_create_empty(GL_ARRAY_LIST, equals_fn, NULL,
+                                      dispose_fn, allow_duplicates);
+  return (list);
 }
 
 inline pdf_status_t
 pdf_list_destroy (pdf_list_t list)
 {
-  gl_list_free (list);
+  gl_list_free ((gl_list_t) list.gl_list);
   return PDF_OK;
 }
 
@@ -50,7 +52,7 @@
 inline pdf_size_t
 pdf_list_size (pdf_list_t list)
 {
-  return ((pdf_size_t) gl_list_size(list));
+  return ((pdf_size_t) gl_list_size((gl_list_t) list.gl_list));
 }
 
 /* Element searching functions */
@@ -58,42 +60,64 @@
 inline pdf_list_node_t
 pdf_list_search (pdf_list_t list, const void* element)
 {
-  return ((pdf_list_node_t) gl_list_search (list, element));
+
+  pdf_list_node_t node;
+
+  node.gl_node = gl_list_search ((gl_list_t)list.gl_list, element);
+  
+  return (node);
 }
 
 inline pdf_list_node_t
 pdf_list_search_from (pdf_list_t list, pdf_size_t start_index,
                       const void* element)
 {
-  return ((pdf_list_node_t) gl_list_search_from(list, start_index, element));
+  pdf_list_node_t node;
+
+  node.gl_node = gl_list_search_from((gl_list_t)list.gl_list, start_index,
+                                     element);
+  
+  return (node);
 }
 
 inline 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)
 {
-  return ((pdf_list_node_t) gl_list_search_from_to (list, start_index,
-                                                    end_index, element));
+  pdf_list_node_t node;
+
+  node.gl_node = gl_list_search_from_to((gl_list_t)list.gl_list, start_index,
+                                        end_index, element);
+  return (node);
 }
 
 inline pdf_list_node_t
 pdf_list_next_node (pdf_list_t list, pdf_list_node_t node)
 {
-  return ((pdf_list_node_t) gl_list_next_node (list, node));
-}
+  pdf_list_node_t next;
+  
+  next.gl_node = gl_list_next_node ((gl_list_t)list.gl_list,
+                                    (gl_list_node_t)node.gl_node);
 
+  return (next);
+}
 
 
 inline pdf_list_node_t
 pdf_list_previous_node (pdf_list_t list, pdf_list_node_t node)
 {
-  return ((pdf_list_node_t) gl_list_previous_node (list, node));
+  pdf_list_node_t prev;
+  
+  prev.gl_node = gl_list_previous_node ((gl_list_t)list.gl_list,
+                                        (gl_list_node_t)node.gl_node);
+
+  return (prev);
 }
 
 inline pdf_size_t
 pdf_list_indexof (pdf_list_t list, const void*element)
 {
-  return ((pdf_size_t) gl_list_indexof (list, element));
+  return ((pdf_size_t) gl_list_indexof ((gl_list_t)list.gl_list, element));
 }
 
 
@@ -101,7 +125,8 @@
 pdf_list_indexof_from (pdf_list_t list, pdf_size_t start_index,
                        const void* element)
 {
-  return ((pdf_size_t) gl_list_indexof_from (list, start_index, element));
+  return ((pdf_size_t) gl_list_indexof_from ((gl_list_t)list.gl_list,
+                                             start_index, element));
 }
 
 
@@ -109,7 +134,8 @@
 pdf_list_indexof_from_to (pdf_list_t list, pdf_size_t start_index,
                           pdf_size_t end_index, const void* element)
 {
-  return ((pdf_size_t) gl_list_indexof_from_to (list, start_index, end_index,
+  return ((pdf_size_t) gl_list_indexof_from_to ((gl_list_t)list.gl_list,
+                                                start_index, end_index,
                                                 element));
 }
 
@@ -119,21 +145,27 @@
 inline const void *
 pdf_list_node_value (pdf_list_t list, pdf_list_node_t node)
 {
-  return (gl_list_node_value (list, node));
+  return (gl_list_node_value ((gl_list_t)list.gl_list,
+                              (gl_list_node_t)node.gl_node));
 }
 
 
 inline const void *
 pdf_list_get_at (pdf_list_t list, pdf_size_t position)
 {
-  return (gl_list_get_at (list, position));
+  return (gl_list_get_at ((gl_list_t)list.gl_list, position));
 }
 
 
 inline pdf_list_node_t
 pdf_list_set_at (pdf_list_t list, pdf_size_t position, const void* element)
 {
-  return ((pdf_list_node_t) gl_list_set_at (list, position, element));
+  pdf_list_node_t node;
+
+  node.gl_node = gl_list_set_at ((gl_list_t)list.gl_list, position, element);
+
+  return (node);
+  
 }
 
 
@@ -143,28 +175,40 @@
 inline pdf_list_node_t
 pdf_list_add_first (pdf_list_t list, const void* element)
 {
-  return ((pdf_list_node_t) gl_list_add_first (list, element));
+  pdf_list_node_t node;
+
+  node.gl_node = gl_list_add_first ((gl_list_t)list.gl_list, element);
+  
+  return (node);
 }
 
 
 inline pdf_list_node_t
 pdf_list_add_last (pdf_list_t list, const void* element)
 {
-  return ((pdf_list_node_t) gl_list_add_last (list, element));
+  pdf_list_node_t node;
+
+  node.gl_node = gl_list_add_last ((gl_list_t)list.gl_list, element);
+  
+  return (node);
 }
 
 
 inline pdf_list_node_t
 pdf_list_add_at (pdf_list_t list, pdf_size_t position, const void* element)
 {
-  return ((pdf_list_node_t) gl_list_add_at (list, position, element));
+  pdf_list_node_t node;
+
+  node.gl_node = gl_list_add_at ((gl_list_t)list.gl_list, position, element);
+
+  return (node);
 }
 
 
 inline pdf_status_t
 pdf_list_remove_node (pdf_list_t list, pdf_list_node_t node)
 {
-  gl_list_remove_node (list, node);
+  gl_list_remove_node ((gl_list_t)list.gl_list, (gl_list_node_t)node.gl_node);
   return PDF_OK;
 }
 
@@ -177,7 +221,7 @@
   st = PDF_OK;
 
   if (position >= 0 && position < pdf_list_size (list))
-    gl_list_remove_at (list, position);
+    gl_list_remove_at ((gl_list_t)list.gl_list, position);
   else
     st = PDF_EINVRANGE;
 
@@ -192,7 +236,7 @@
   
   st = PDF_OK;
 
-  if (!gl_list_remove (list, element))
+  if (!gl_list_remove ((gl_list_t)list.gl_list, element))
     st = PDF_ENONODE;
 
   return st;
@@ -205,7 +249,21 @@
 inline pdf_list_iterator_t
 pdf_list_iterator (pdf_list_t list)
 {
-  return ((pdf_list_iterator_t) gl_list_iterator (list));
+  pdf_list_iterator_t itr;
+
+  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
+    {
+      pdf_perror (PDF_ENOMEM, "pdf_list_iterator()");
+    }
+  
+  return (itr);
 }
 
 
@@ -213,8 +271,22 @@
 pdf_list_iterator_from_to (pdf_list_t list, pdf_size_t start_index,
                            pdf_size_t end_index)
 {
-  return ((pdf_list_iterator_t) gl_list_iterator_from_to (list, start_index,
-                                                          end_index));
+  pdf_list_iterator_t itr;
+
+  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
+    {
+      pdf_perror (PDF_ENOMEM, "pdf_list_iterator_from_to()");
+    }
+
+  return (itr);
 }
 
 inline pdf_status_t
@@ -226,7 +298,9 @@
 
   st = PDF_OK;
 
-  if (!gl_list_iterator_next (iterator, element_pointer, node_pointer))
+  if (!gl_list_iterator_next (((gl_list_iterator_t*)iterator->gl_iterator),
+                              element_pointer,
+                              ((gl_list_node_t*)&node_pointer->gl_node)))
     st = PDF_ENONODE;
 
   return st;
@@ -235,7 +309,10 @@
 inline pdf_status_t
 pdf_list_iterator_free (pdf_list_iterator_t *iterator)
 {
-  gl_list_iterator_free (iterator);
+  gl_list_iterator_free ((gl_list_iterator_t*)(iterator->gl_iterator));
+
+  pdf_dealloc (iterator->gl_iterator);
+
   return PDF_OK;
 }
 
###


regards,

-gerel




reply via email to

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