[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pdf-devel] List implementation patches
From: |
gerel |
Subject: |
[pdf-devel] List implementation patches |
Date: |
Thu, 06 Mar 2008 21:58:01 -0300 |
Voila! I managed to integrate the List module. All seems to work fine.
I needed to modify several files in order to get the adequate public API.
Here are the patches and the corresponding List module implementation.
##
Index: src/Makefile.am
===================================================================
RCS file: /sources/pdf/libgnupdf/src/Makefile.am,v
retrieving revision 1.37
diff -u -r1.37 Makefile.am
--- src/Makefile.am 5 Mar 2008 11:32:04 -0000 1.37
+++ src/Makefile.am 7 Mar 2008 00:51:35 -0000
@@ -23,6 +23,8 @@
# Base Layer sources
+LIST_MODULE_SOURCES = base/pdf-list.c base/pdf-list.h
+
ALLOC_MODULE_SOURCES = base/pdf-alloc.c base/pdf-alloc.h
TYPES_MODULE_SOURCES = base/pdf-types.c base/pdf-types.h
@@ -47,7 +49,11 @@
$(ALLOC_MODULE_SOURCES) \
$(TYPES_MODULE_SOURCES) \
$(STM_MODULE_SOURCES) \
- $(ERROR_MODULE_SOURCES)
+ $(ERROR_MODULE_SOURCES) \
+ $(LIST_MODULE_SOURCES)
+
+
+
# Library sources
libgnupdf_la_SOURCES = pdf-global.c pdf-global.h
@@ -70,7 +76,9 @@
PUBLIC_HDRS = pdf-global.h \
base/pdf-types.h \
+ base/pdf-error.h \
base/pdf-alloc.h \
+ base/pdf-list.h \
base/pdf-stm-f-a85.h \
base/pdf-stm-f-ahex.h \
base/pdf-stm-f-fax.h \
@@ -79,8 +87,9 @@
base/pdf-stm-f-pred.h \
base/pdf-stm-f-rl.h \
base/pdf-stm-file.h \
- base/pdf-stm.h \
- base/pdf-error.h
+ base/pdf-stm.h
+
+
pdf.h : $(PUBLIC_HDRS)
chmod +x $(top_srcdir)/src/extract-public-hdr
Index: src/base/pdf-stm.c
===================================================================
RCS file: /sources/pdf/libgnupdf/src/base/pdf-stm.c,v
retrieving revision 1.4
diff -u -r1.4 pdf-stm.c
--- src/base/pdf-stm.c 5 Mar 2008 11:32:05 -0000 1.4
+++ src/base/pdf-stm.c 7 Mar 2008 00:51:36 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/03/05 12:30:03 jemarch"
+/* -*- mode: C -*- Time-stamp: "2008-03-06 21:33:01 gerel"
*
* File: pdf-stm.c
* Date: Fri Jul 6 18:43:15 2007
@@ -42,7 +42,7 @@
pdf_stm_dealloc_filter_fn_t dealloc_fn,
void *conf);
static void pdf_stm_filter_dealloc_list (const void *elt);
-static int pdf_stm_apply_filters (gl_list_t filter_list, pdf_char_t **buf,
pdf_size_t *buf_size);
+static int pdf_stm_apply_filters (pdf_list_t filter_list, pdf_char_t **buf,
pdf_size_t *buf_size);
/*
@@ -633,17 +633,17 @@
int count;
for (count = 0;
- count < gl_list_size (stm->read_filter_list);
+ count < pdf_list_size (stm->read_filter_list);
count++)
{
- gl_list_remove_at (stm->read_filter_list, 0);
+ pdf_list_remove_at (stm->read_filter_list, 0);
}
for (count = 0;
- count < gl_list_size (stm->write_filter_list);
+ count < pdf_list_size (stm->write_filter_list);
count++)
{
- gl_list_remove_at (stm->write_filter_list, 0);
+ pdf_list_remove_at (stm->write_filter_list, 0);
}
return PDF_OK;
@@ -659,17 +659,13 @@
stm = (pdf_stm_t) pdf_alloc (sizeof (struct pdf_stm_s));
stm->read_filter_list =
- gl_list_create_empty (GL_ARRAY_LIST,
- NULL, /* compare_fn */
- NULL, /* hashcode_fn */
- pdf_stm_filter_dealloc_list,
- PDF_TRUE); /* allow duplicates */
+ pdf_list_create (NULL, /* compare_fn */
+ pdf_stm_filter_dealloc_list,
+ PDF_TRUE); /* allow duplicates */
stm->write_filter_list =
- gl_list_create_empty (GL_ARRAY_LIST,
- NULL, /* compare_fn */
- NULL, /* hashcode_fn */
- pdf_stm_filter_dealloc_list,
- PDF_TRUE); /* allow duplicates */
+ pdf_list_create (NULL, /* compare_fn */
+ pdf_stm_filter_dealloc_list,
+ PDF_TRUE); /* allow duplicates */
return stm;
}
@@ -677,8 +673,8 @@
static void
pdf_stm_dealloc (pdf_stm_t stm)
{
- gl_list_free (stm->read_filter_list);
- gl_list_free (stm->write_filter_list);
+ pdf_list_destroy (stm->read_filter_list);
+ pdf_list_destroy (stm->write_filter_list);
pdf_dealloc (stm);
}
@@ -713,13 +709,13 @@
{
case PDF_STM_FILTER_READ:
{
- gl_list_add_last (stm->read_filter_list,
+ pdf_list_add_last (stm->read_filter_list,
(const void *) filter);
break;
}
case PDF_STM_FILTER_WRITE:
{
- gl_list_add_last (stm->write_filter_list,
+ pdf_list_add_last (stm->write_filter_list,
(const void *) filter);
break;
}
@@ -745,23 +741,23 @@
}
static int
-pdf_stm_apply_filters (gl_list_t filter_list,
+pdf_stm_apply_filters (pdf_list_t filter_list,
pdf_char_t **buf,
pdf_size_t *buf_size)
{
pdf_stm_filter_t filter;
- gl_list_iterator_t iter;
- gl_list_node_t node;
+ pdf_list_iterator_t iter;
+ pdf_list_node_t node;
pdf_char_t *filtered_data;
pdf_stm_pos_t filtered_size;
- if (gl_list_size (filter_list) == 0)
+ if (pdf_list_size (filter_list) == 0)
{
return PDF_TRUE;
}
- iter = gl_list_iterator (filter_list);
- while (gl_list_iterator_next (&iter, (const void **) &filter, &node))
+ iter = pdf_list_iterator (filter_list);
+ while (pdf_list_iterator_next (&iter, (const void **) &filter, &node))
{
if (filter->funcs.apply (filter->data,
*buf, *buf_size,
@@ -774,7 +770,7 @@
*buf_size = filtered_size;
}
}
- gl_list_iterator_free (&iter);
+ pdf_list_iterator_free (&iter);
return PDF_OK;
}
Index: src/base/pdf-stm.h
===================================================================
RCS file: /sources/pdf/libgnupdf/src/base/pdf-stm.h,v
retrieving revision 1.3
diff -u -r1.3 pdf-stm.h
--- src/base/pdf-stm.h 5 Mar 2008 11:32:05 -0000 1.3
+++ src/base/pdf-stm.h 7 Mar 2008 00:51:40 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/03/05 12:31:09 jemarch"
+/* -*- mode: C -*- Time-stamp: "2008-03-06 21:23:34 gerel"
*
* File: pdf-stm.h
* Date: Fri Jul 6 18:37:57 2007
@@ -49,9 +49,8 @@
#include <config.h>
#include <stdio.h>
-/* BEGIN PUBLIC */
-#include <gl_array_list.h>
-/* END PUBLIC */
+
+#include <pdf-list.h>
#include <pdf-types.h>
#include <pdf-stm-f-null.h>
#ifdef HAVE_LIBZ
@@ -264,8 +263,8 @@
{
struct pdf_stm_be_s backend;
- gl_list_t read_filter_list;
- gl_list_t write_filter_list;
+ pdf_list_t read_filter_list;
+ pdf_list_t write_filter_list;
};
typedef struct pdf_stm_s *pdf_stm_t;
Index: src/base/pdf-types.h
===================================================================
RCS file: /sources/pdf/libgnupdf/src/base/pdf-types.h,v
retrieving revision 1.4
diff -u -r1.4 pdf-types.h
--- src/base/pdf-types.h 5 Mar 2008 11:32:05 -0000 1.4
+++ src/base/pdf-types.h 7 Mar 2008 00:51:40 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/03/05 12:18:52 jemarch"
+/* -*- mode: C -*- Time-stamp: "2008-03-06 00:07:40 gerel"
*
* File: pdf-types.h
* Date: Sun Feb 10 21:30:00 2008
@@ -55,6 +55,8 @@
/* Memory indexes (size_t) */
typedef size_t pdf_size_t;
+typedef unsigned char pdf_bool_t;
+
/* PDF manages bytes with values in the range 0-255 */
typedef unsigned char pdf_char_t;
Index: src/object/pdf-obj.c
===================================================================
RCS file: /sources/pdf/libgnupdf/src/object/pdf-obj.c,v
retrieving revision 1.2
diff -u -r1.2 pdf-obj.c
--- src/object/pdf-obj.c 11 Feb 2008 00:11:28 -0000 1.2
+++ src/object/pdf-obj.c 7 Mar 2008 00:51:41 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/02/11 01:05:57 jemarch"
+/* -*- mode: C -*- Time-stamp: "2008-03-06 20:11:28 gerel"
*
* File: pdf-obj.c
* Date: Sat Jul 7 03:04:30 2007
@@ -152,11 +152,9 @@
new_array = pdf_alloc_obj ();
new_array->type = PDF_ARRAY_OBJ;
new_array->value.array.objs =
- gl_list_create_empty (GL_ARRAY_LIST,
- pdf_compare_obj_list_elt,
- NULL, /* hashcode_fn */
- pdf_dealloc_obj_list_elt,
- PDF_TRUE); /* allow duplicates */
+ pdf_list_create (pdf_compare_obj_list_elt,
+ pdf_dealloc_obj_list_elt,
+ PDF_TRUE); /* allow duplicates */
return new_array;
}
@@ -169,11 +167,9 @@
new_dict = pdf_alloc_obj ();
new_dict->type = PDF_DICT_OBJ;
new_dict->value.dict.entries =
- gl_list_create_empty (GL_ARRAY_LIST,
- pdf_compare_dict_entry_list_elt,
- NULL, /* hashcode_fn */
- pdf_dealloc_dict_entry_list_elt,
- PDF_FALSE); /* disallow duplicates. */
+ pdf_list_create (pdf_compare_dict_entry_list_elt,
+ pdf_dealloc_dict_entry_list_elt,
+ PDF_FALSE); /* disallow duplicates. */
return new_dict;
}
@@ -295,13 +291,13 @@
inline int
pdf_get_array_size (pdf_obj_t obj)
{
- return gl_list_size (obj->value.array.objs);
+ return pdf_list_size (obj->value.array.objs);
}
inline int
pdf_get_dict_size (pdf_obj_t obj)
{
- return gl_list_size (obj->value.dict.entries);
+ return pdf_list_size (obj->value.dict.entries);
}
int
@@ -313,7 +309,7 @@
if ((obj->type != PDF_DICT_OBJ) ||
(key->type != PDF_NAME_OBJ) ||
- (gl_list_size (obj->value.dict.entries) == 0))
+ (pdf_list_size (obj->value.dict.entries) == 0))
{
return PDF_FALSE;
}
@@ -322,7 +318,7 @@
entry->key = pdf_obj_dup (key);
entry->value = pdf_create_null ();
- if (gl_list_search (obj->value.dict.entries,
+ if (pdf_list_search (obj->value.dict.entries,
(const void *) entry) != NULL)
{
entry_p = PDF_TRUE;
@@ -342,11 +338,11 @@
{
pdf_dict_entry_t entry;
pdf_dict_entry_t result_entry;
- gl_list_node_t list_node;
+ pdf_list_node_t list_node;
if ((obj->type != PDF_DICT_OBJ) ||
(key->type != PDF_NAME_OBJ) ||
- (gl_list_size (obj->value.dict.entries) == 0))
+ (pdf_list_size (obj->value.dict.entries) == 0))
{
return NULL;
}
@@ -355,7 +351,7 @@
entry->key = pdf_obj_dup (key);
entry->value = pdf_create_null ();
- list_node = gl_list_search (obj->value.dict.entries,
+ list_node = pdf_list_search (obj->value.dict.entries,
entry);
pdf_dealloc_dict_entry (entry);
@@ -366,7 +362,7 @@
else
{
result_entry = (pdf_dict_entry_t)
- gl_list_node_value (obj->value.dict.entries, list_node);
+ pdf_list_node_value (obj->value.dict.entries, list_node);
return result_entry->value;
}
@@ -390,7 +386,7 @@
entry->key = pdf_obj_dup (key);
entry->value = pdf_create_null ();
- if (gl_list_remove (obj->value.dict.entries,
+ if (pdf_list_remove (obj->value.dict.entries,
entry))
{
status = PDF_OK;
@@ -423,7 +419,7 @@
entry = pdf_alloc_dict_entry ();
entry->key = key;
entry->value = value;
- if (gl_list_add_last (obj->value.dict.entries,
+ if (pdf_list_add_last (obj->value.dict.entries,
entry) == NULL)
{
pdf_dealloc_dict_entry (entry);
@@ -620,12 +616,12 @@
{
if ((obj->type != PDF_ARRAY_OBJ) ||
(index < 0) ||
- (index >= gl_list_size (obj->value.array.objs)))
+ (index >= pdf_list_size (obj->value.array.objs)))
{
return PDF_ERROR;
}
- gl_list_remove_at (obj->value.array.objs, index);
+ pdf_list_remove_at (obj->value.array.objs, index);
return PDF_OK;
}
@@ -635,12 +631,12 @@
{
if ((obj->type != PDF_ARRAY_OBJ) ||
(index < 0) ||
- (index >= gl_list_size (obj->value.array.objs)))
+ (index >= pdf_list_size (obj->value.array.objs)))
{
return NULL;
}
- return (pdf_obj_t) gl_list_get_at (obj->value.array.objs, index);
+ return (pdf_obj_t) pdf_list_get_at (obj->value.array.objs, index);
}
int
@@ -650,12 +646,12 @@
{
if ((obj->type != PDF_ARRAY_OBJ) ||
(index < 0) ||
- (index >= gl_list_size (obj->value.array.objs)))
+ (index >= pdf_list_size (obj->value.array.objs)))
{
return PDF_ERROR;
}
- gl_list_set_at (obj->value.array.objs,
+ pdf_list_set_at (obj->value.array.objs,
index,
elt);
return PDF_OK;
@@ -668,12 +664,12 @@
{
if ((obj->type != PDF_ARRAY_OBJ) ||
(index < 0) ||
- (index > gl_list_size (obj->value.array.objs)))
+ (index > pdf_list_size (obj->value.array.objs)))
{
return PDF_ERROR;
}
- gl_list_add_at (obj->value.array.objs,
+ pdf_list_add_at (obj->value.array.objs,
index,
elt);
@@ -717,12 +713,12 @@
}
case PDF_ARRAY_OBJ:
{
- gl_list_free (obj->value.array.objs);
+ pdf_list_destroy (obj->value.array.objs);
break;
}
case PDF_DICT_OBJ:
{
- gl_list_free (obj->value.dict.entries);
+ pdf_list_destroy (obj->value.dict.entries);
break;
}
default:
@@ -816,29 +812,29 @@
int equal_p;
pdf_obj_t obj_elt1;
pdf_obj_t obj_elt2;
- gl_list_node_t list_node1;
- gl_list_node_t list_node2;
- gl_list_iterator_t iter1;
- gl_list_iterator_t iter2;
+ pdf_list_node_t list_node1;
+ pdf_list_node_t list_node2;
+ pdf_list_iterator_t iter1;
+ pdf_list_iterator_t iter2;
- if ((gl_list_size (obj1->value.array.objs) !=
- gl_list_size (obj2->value.array.objs)))
+ if ((pdf_list_size (obj1->value.array.objs) !=
+ pdf_list_size (obj2->value.array.objs)))
{
return PDF_FALSE;
}
- if (gl_list_size (obj1->value.array.objs) == 0)
+ if (pdf_list_size (obj1->value.array.objs) == 0)
{
return PDF_TRUE;
}
equal_p = PDF_TRUE;
- iter1 = gl_list_iterator (obj1->value.array.objs);
- iter2 = gl_list_iterator (obj2->value.array.objs);
+ iter1 = pdf_list_iterator (obj1->value.array.objs);
+ iter2 = pdf_list_iterator (obj2->value.array.objs);
- while (gl_list_iterator_next (&iter1, (const void **) &obj_elt1,
&list_node1) &&
- gl_list_iterator_next (&iter2, (const void **) &obj_elt2,
&list_node2))
+ while (pdf_list_iterator_next (&iter1, (const void **) &obj_elt1,
&list_node1) &&
+ pdf_list_iterator_next (&iter2, (const void **) &obj_elt2,
&list_node2))
{
/* Note the indirect recursion there => avoid loops!!! */
if (!pdf_obj_equal_p (obj_elt1, obj_elt2))
@@ -848,8 +844,8 @@
}
}
- gl_list_iterator_free (&iter1);
- gl_list_iterator_free (&iter2);
+ pdf_list_iterator_free (&iter1);
+ pdf_list_iterator_free (&iter2);
return equal_p;
}
@@ -862,20 +858,20 @@
pdf_obj_t obj2)
{
int equal_p;
- gl_list_t int_list;
- gl_list_node_t list_node1;
- gl_list_node_t list_node2;
+ pdf_list_t int_list;
+ pdf_list_node_t list_node1;
+ pdf_list_node_t list_node2;
pdf_dict_entry_t entry_elt1;
pdf_dict_entry_t entry_elt2;
- gl_list_iterator_t iter;
+ pdf_list_iterator_t iter;
- if ((gl_list_size (obj1->value.dict.entries) !=
- gl_list_size (obj2->value.dict.entries)))
+ if ((pdf_list_size (obj1->value.dict.entries) !=
+ pdf_list_size (obj2->value.dict.entries)))
{
return PDF_FALSE;
}
- if (gl_list_size (obj1->value.dict.entries) == 0)
+ if (pdf_list_size (obj1->value.dict.entries) == 0)
{
return PDF_TRUE;
}
@@ -885,39 +881,37 @@
/* Create the int_list intersection list */
int_list =
- gl_list_create_empty (GL_ARRAY_LIST,
- pdf_compare_dict_entry_list_elt,
- NULL, /* hashcode_fn */
- pdf_dealloc_dict_entry_list_elt,
- PDF_FALSE); /* disallow duplicates */
- iter = gl_list_iterator (obj1->value.dict.entries);
- while (gl_list_iterator_next (&iter, (const void**) &entry_elt1,
&list_node1))
+ pdf_list_create (pdf_compare_dict_entry_list_elt,
+ pdf_dealloc_dict_entry_list_elt,
+ PDF_FALSE); /* disallow duplicates */
+ iter = pdf_list_iterator (obj1->value.dict.entries);
+ while (pdf_list_iterator_next (&iter, (const void**) &entry_elt1,
&list_node1))
{
entry_elt2 = (pdf_dict_entry_t) xmalloc (sizeof(struct
pdf_dict_entry_s));
entry_elt2->key = pdf_obj_dup (entry_elt1->key);
entry_elt2->value = pdf_obj_dup (entry_elt1->value);
- gl_list_add_last (int_list, entry_elt2);
+ pdf_list_add_last (int_list, entry_elt2);
}
- gl_list_iterator_free (&iter);
+ pdf_list_iterator_free (&iter);
/* Calculate the equal-intersection between the dictionaries */
- iter = gl_list_iterator (obj2->value.dict.entries);
- while (gl_list_iterator_next (&iter, (const void**) &entry_elt1,
&list_node1))
+ iter = pdf_list_iterator (obj2->value.dict.entries);
+ while (pdf_list_iterator_next (&iter, (const void**) &entry_elt1,
&list_node1))
{
- list_node2 = gl_list_search (int_list, (const void *) entry_elt1);
+ list_node2 = pdf_list_search (int_list, (const void *) entry_elt1);
if (list_node2 != NULL)
{
- gl_list_remove_node (int_list, list_node2);
+ pdf_list_remove_node (int_list, list_node2);
}
}
- gl_list_iterator_free (&iter);
+ pdf_list_iterator_free (&iter);
/* Is the intersection empty? */
- equal_p = (gl_list_size (int_list) == 0);
+ equal_p = (pdf_list_size (int_list) == 0);
/* Clean the kitchen */
- gl_list_free (int_list);
+ pdf_list_destroy (int_list);
/* Bye bye */
return equal_p;
@@ -940,19 +934,19 @@
{
pdf_obj_t new_array;
pdf_obj_t obj_elt;
- gl_list_iterator_t iter;
- gl_list_node_t list_node;
+ pdf_list_iterator_t iter;
+ pdf_list_node_t list_node;
new_array = pdf_create_array ();
- iter = gl_list_iterator (obj->value.array.objs);
- while (gl_list_iterator_next (&iter, (const void**) &obj_elt, &list_node))
+ iter = pdf_list_iterator (obj->value.array.objs);
+ while (pdf_list_iterator_next (&iter, (const void**) &obj_elt, &list_node))
{
- gl_list_add_last (new_array->value.array.objs,
+ pdf_list_add_last (new_array->value.array.objs,
pdf_obj_dup (obj_elt));
}
- gl_list_iterator_free (&iter);
+ pdf_list_iterator_free (&iter);
return new_array;
}
@@ -963,22 +957,22 @@
pdf_obj_t new_dict;
pdf_dict_entry_t entry_elt;
pdf_dict_entry_t new_entry_elt;
- gl_list_iterator_t iter;
- gl_list_node_t list_node;
+ pdf_list_iterator_t iter;
+ pdf_list_node_t list_node;
new_dict = pdf_create_dict ();
- iter = gl_list_iterator (obj->value.dict.entries);
- while (gl_list_iterator_next (&iter, (const void**) &entry_elt, &list_node))
+ iter = pdf_list_iterator (obj->value.dict.entries);
+ while (pdf_list_iterator_next (&iter, (const void**) &entry_elt, &list_node))
{
new_entry_elt = pdf_alloc_dict_entry ();
new_entry_elt->key = pdf_obj_dup (entry_elt->key);
new_entry_elt->value = pdf_obj_dup (entry_elt->value);
- gl_list_add_last (new_dict->value.dict.entries,
+ pdf_list_add_last (new_dict->value.dict.entries,
new_entry_elt);
}
- gl_list_iterator_free (&iter);
+ pdf_list_iterator_free (&iter);
return new_dict;
}
Index: src/object/pdf-obj.h
===================================================================
RCS file: /sources/pdf/libgnupdf/src/object/pdf-obj.h,v
retrieving revision 1.2
diff -u -r1.2 pdf-obj.h
--- src/object/pdf-obj.h 11 Feb 2008 00:11:28 -0000 1.2
+++ src/object/pdf-obj.h 7 Mar 2008 00:51:41 -0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/02/11 01:06:02 jemarch"
+/* -*- mode: C -*- Time-stamp: "2008-03-06 20:09:02 gerel"
*
* File: pdf-obj.h
* Date: Sat Jul 7 01:10:11 2007
@@ -44,7 +44,7 @@
#define PDF_OBJ_H
#include <config.h>
-#include <gl_array_list.h>
+#include <pdf-list.h>
#include <pdf-base.h>
#include <pdf-stm.h>
@@ -111,7 +111,7 @@
struct pdf_array_s
{
- gl_list_t objs;
+ pdf_list_t objs;
};
typedef struct pdf_array_s *pdf_array_t;
@@ -135,7 +135,7 @@
struct pdf_dict_s
{
- gl_list_t entries;
+ pdf_list_t entries;
};
typedef struct pdf_dict_s *pdf_dict_t;
--- pdf-list.h ---
/* -*- mode: C -*- Time-stamp: "2008-03-06 21:35:03 gerel"
*
* File: pdf-list.h
* Date: Sat Mar 1 02:14:35 2008
*
* GNU PDF Library - Header file for the List module
*
*/
/* Copyright (C) 2008 Free Software Foundation, Inc. */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PDF_LIST_H
#define PDF_LIST_H
#include <pdf-types.h>
#include <pdf-error.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;
/* Creation and destruction functions */
pdf_list_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_status_t pdf_list_destroy (pdf_list_t list);
/* Property management functions */
pdf_size_t pdf_list_size (pdf_list_t list);
/* Element searching functions */
pdf_list_node_t pdf_list_search (pdf_list_t list, const void* element);
pdf_list_node_t pdf_list_search_from (pdf_list_t list, pdf_size_t start_index,
const void* element);
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);
pdf_list_node_t pdf_list_next_node (pdf_list_t list, pdf_list_node_t node);
pdf_list_node_t pdf_list_previous_node (pdf_list_t list, pdf_list_node_t node);
pdf_size_t pdf_list_indexof (pdf_list_t list, const void*element);
pdf_size_t pdf_list_indexof_from (pdf_list_t list, pdf_size_t start_index,
const void* element);
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);
/* Element setting and getting functions */
const void * pdf_list_node_value (pdf_list_t list, pdf_list_node_t node);
const void * pdf_list_get_at (pdf_list_t list, pdf_size_t position);
pdf_list_node_t pdf_list_set_at (pdf_list_t list, pdf_size_t position,
const void* element);
/* Element addition and removal functions */
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_list_node_t pdf_list_add_at (pdf_list_t list, pdf_size_t position,
const void* element);
pdf_status_t pdf_list_remove_node (pdf_list_t list, pdf_list_node_t node);
pdf_status_t pdf_list_remove_at (pdf_list_t list, pdf_size_t position);
pdf_status_t pdf_list_remove (pdf_list_t list, const void * element);
/* 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_next (pdf_list_iterator_t *iterator,
const void **element_pointer,
pdf_list_node_t *node_pointer);
pdf_status_t pdf_list_iterator_free (pdf_list_iterator_t *iterator);
/* END PUBLIC */
#endif /* PDF_LIST_H */
/* End of pdf-list.h */
--- EOF pdf-list.h ---
--- pdf-list.c ---
/* -*- mode: C -*- Time-stamp: "2008-03-06 00:16:38 gerel"
*
* File: pdf-list.c
* Date: Sat Mar 1 02:14:35 2008
*
* GNU PDF Library - Implementation of the List module
*
*/
/* Copyright (C) 2008 Free Software Foundation, Inc. */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <pdf-list.h>
/* Creation and destruction functions */
inline pdf_list_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)
{
return ((pdf_list_t) gl_list_create_empty(GL_ARRAY_LIST, equals_fn, NULL,
dispose_fn, allow_duplicates));
}
inline pdf_status_t
pdf_list_destroy (pdf_list_t list)
{
gl_list_free (list);
return PDF_OK;
}
/* Property management functions */
inline pdf_size_t
pdf_list_size (pdf_list_t list)
{
return ((pdf_size_t) gl_list_size(list));
}
/* Element searching functions */
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));
}
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));
}
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));
}
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));
}
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));
}
inline pdf_size_t
pdf_list_indexof (pdf_list_t list, const void*element)
{
return ((pdf_size_t) gl_list_indexof (list, element));
}
inline pdf_size_t
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));
}
inline 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)
{
return ((pdf_size_t) gl_list_indexof_from_to (list, start_index, end_index,
element));
}
/* Element setting and getting functions */
inline const void *
pdf_list_node_value (pdf_list_t list, pdf_list_node_t node)
{
return (gl_list_node_value (list, node));
}
inline const void *
pdf_list_get_at (pdf_list_t list, pdf_size_t position)
{
return (gl_list_get_at (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));
}
/* Element addition and removal functions */
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));
}
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));
}
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));
}
inline pdf_status_t
pdf_list_remove_node (pdf_list_t list, pdf_list_node_t node)
{
gl_list_remove_node (list, node);
return PDF_OK;
}
inline pdf_status_t
pdf_list_remove_at (pdf_list_t list, pdf_size_t position)
{
pdf_status_t st;
st = PDF_OK;
if (position >= 0 && position < pdf_list_size (list))
gl_list_remove_at (list, position);
else
st = PDF_EINVRANGE;
return st;
}
inline pdf_status_t
pdf_list_remove (pdf_list_t list, const void * element)
{
pdf_status_t st;
st = PDF_OK;
if (!gl_list_remove (list, element))
st = PDF_ENONODE;
return st;
}
/* Element iterator functions */
inline pdf_list_iterator_t
pdf_list_iterator (pdf_list_t list)
{
return ((pdf_list_iterator_t) gl_list_iterator (list));
}
inline pdf_list_iterator_t
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));
}
inline pdf_status_t
pdf_list_iterator_next (pdf_list_iterator_t *iterator,
const void **element_pointer,
pdf_list_node_t *node_pointer)
{
pdf_status_t st;
st = PDF_OK;
if (!gl_list_iterator_next (iterator, element_pointer, node_pointer))
st = PDF_ENONODE;
return st;
}
inline pdf_status_t
pdf_list_iterator_free (pdf_list_iterator_t *iterator)
{
gl_list_iterator_free (iterator);
return PDF_OK;
}
/* End of pdf-list.c */
--- EOF pdf-list.c ---
###
cheers.
-gerel
- [pdf-devel] List implementation patches,
gerel <=
- Re: [pdf-devel] List implementation patches, jemarch, 2008/03/07
- Re: [pdf-devel] List implementation patches, gerel, 2008/03/07
- Re: [pdf-devel] List implementation patches, gerel, 2008/03/07
- Re: [pdf-devel] List implementation patches, jemarch, 2008/03/07
- Re: [pdf-devel] List implementation patches, gerel, 2008/03/07
- Re: [pdf-devel] List implementation patches, jemarch, 2008/03/07
- Re: [pdf-devel] List implementation patches, gerel, 2008/03/07
- Re: [pdf-devel] List implementation patches, Karl Berry, 2008/03/07
- Re: [pdf-devel] List implementation patches, jemarch, 2008/03/07
- Re: [pdf-devel] List implementation patches, gerel, 2008/03/08