[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pdf-devel] Patch for FS#56 and FS#57
From: |
gerel |
Subject: |
[pdf-devel] Patch for FS#56 and FS#57 |
Date: |
Thu, 24 Jul 2008 16:28:21 -0700 (PDT) |
Ok, finally I have a patch for both tasks.
Hope all is ok.
##
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: file:///home/gerel/PROJECTS/libgnupdf/trunk/
# testament_sha1: 20903cb86e206daadda1b6cbd98a29c059cd2156
# timestamp: 2008-07-24 20:10:20 -0300
# base_revision_id: address@hidden
#
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog 2008-07-25 01:02:23 +0000
+++ ChangeLog 2008-07-24 23:09:09 +0000
@@ -8,6 +8,46 @@
the pointer argument.
(pdf_realloc): Idem.
+2008-07-24 gerel <address@hidden>
+
+ * src/base/pdf-hash-helper.[ch]: added helper functions.
+
+ * doc/gnupdf.texi: same.
+
+2008-07-23 gerel <address@hidden>
+
+ * src/base/pdf-hash.c: changed API to allow the specification of
+ memory disposal functions in entry insertion time and removed
+ table-wide disposal function.
+
+ * src/base/pdf-hash.h: same.
+
+ * src/base/pdf-fsys.c: fixed to conform API modifications.
+
+ * torture/unit/base/hash/pdf-hash-add.c: same.
+
+ * torture/unit/base/hash/pdf-hash-create.c: same.
+
+ * torture/unit/base/hash/pdf-hash-destroy.c: same.
+
+ * torture/unit/base/hash/pdf-hash-iterator-free.c: same.
+
+ * torture/unit/base/hash/pdf-hash-iterator-next.c: same.
+
+ * torture/unit/base/hash/pdf-hash-iterator.c: same.
+
+ * torture/unit/base/hash/pdf-hash-key-p.c: same.
+
+ * torture/unit/base/hash/pdf-hash-remove.c: same.
+
+ * torture/unit/base/hash/pdf-hash-rename.c: same.
+
+ * torture/unit/base/hash/pdf-hash-search.c: same.
+
+ * torture/unit/base/hash/pdf-hash-size.c: same.
+
+ * doc/gnupdf.texi: same.
+
2008-07-22 Daniel Vidal <address@hidden>
* src/base/pdf-types.c: Fixed negative number handling in some
functions. Also error handling issues fixed.
=== modified file 'doc/gnupdf.texi'
--- doc/gnupdf.texi 2008-07-18 07:41:04 +0000
+++ doc/gnupdf.texi 2008-07-24 22:59:22 +0000
@@ -1258,6 +1258,8 @@
* Adding and removing elements::
* Searching elements::
* Working with iterators::
+* Basic dispose functions::
+* Hash helper functions::
@end menu
@node Hash Table Types
@@ -1285,17 +1287,15 @@
@node Creating and Destroying Hash Tables
@subsection Creating and Destroying Hash Tables
address@hidden pdf_status_t pdf_hash_create (pdf_hash_key_dispose_fn_t
@var{dispose_key_fn}, pdf_hash_element_dispose_fn_t @var{dispose_fn},
pdf_hash_t @var{*table})
address@hidden pdf_status_t pdf_hash_create (pdf_hash_key_dispose_fn_t
@var{dispose_key_fn}, pdf_hash_t @var{*table})
-Create a new empty hash table. When some element is removed @var{dispose_fn}
and @var{dispose_key_fn} are called, can be NULL.
+Create a new empty hash table. When some element is removed
@var{dispose_key_fn} are called, can be NULL.
@table @strong
@item Parameters
@table @var
@item dispose_key_fn
A pointer to a hash table element key dispose function or NULL.
address@hidden dispose_fn
-A pointer to a hash table element dispose function or NULL.
@item table
A pointer to a hash table.
@end table
@@ -1427,7 +1427,7 @@
@node Adding and removing elements
@subsection Adding and removing elements
address@hidden pdf_status_t pdf_hash_add (pdf_hash_t @var{table}, const char
@var{*key}, const void @var{*element})
address@hidden pdf_status_t pdf_hash_add (pdf_hash_t @var{table}, const char
@var{*key}, const void @var{*element}, pdf_hash_element_dispose_fn_t
@var{disp_fn} )
Adds the element @var{element} with the associated key @var{key} to
@var{table}. If @var{key} already exists nothing is done.
@@ -1440,6 +1440,8 @@
A valid key string.
@item element
A pointer to the element being added.
address@hidden disp_fn
+A function called when @var{element} is removed. If NULL is given nothing is
done.
@end table
@item Returns
A pdf status value:
@@ -1606,6 +1608,220 @@
@end deftypefun
address@hidden Basic dispose functions
address@hidden Basic dispose functions
+
+These are the basic function implementations to free elements and
+keys. They should only be used if you allocated elements/keys with
+pdf_alloc() and don't need to free any other resource.
+
address@hidden void pdf_hash_element_dealloc_fn (const void * @var{elt})
+
+Deallocates @var{elt} with pdf_dealloc().
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden elt
+A pointer to the element being freed.
address@hidden table
address@hidden Returns
+Nothing.
address@hidden Usage example
address@hidden
+XXX
address@hidden example
address@hidden table
address@hidden deftypefun
+
address@hidden void pdf_hash_key_dealloc_fn (const void * @var{elt})
+
+Deallocates @var{elt} with pdf_dealloc().
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden elt
+A pointer to the element being freed.
address@hidden table
address@hidden Returns
+Nothing.
address@hidden Usage example
address@hidden
+XXX
address@hidden example
address@hidden table
address@hidden deftypefun
+
+
address@hidden Hash helper functions
address@hidden Hash helper functions
+
+These are specific functions for adding different types of elements (types
defined by the library). They guarantee that when an element of one of these
types is removed from a hash table the correct disposal function is called.
+
+NOTE: If you are going to use the element after the table containing the
element is destroyed, in that case don't use these functions.
+
address@hidden pdf_status_t pdf_hash_add_text (pdf_hash_t @var{table}, const
char @var{*key}, const pdf_text_t @var{*elt})
+
+Adds the text @var{elt} with the associated key @var{key} to @var{table}. If
@var{key} already exists nothing is done.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden table
+A hash table.
address@hidden key
+A valid key string.
address@hidden elt
+A pointer to the element being added.
address@hidden table
address@hidden Returns
+A pdf status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden PDF_EBADDATA
+Either @var{table}, @var{key} or @var{elt} is invalid.
address@hidden table
address@hidden Usage example
address@hidden
+XXX
address@hidden example
address@hidden table
address@hidden deftypefun
+
+
address@hidden pdf_status_t pdf_hash_add_time (pdf_hash_t @var{table}, const
char @var{*key}, const pdf_time_t @var{*elt})
+
+Adds the time @var{elt} with the associated key @var{key} to @var{table}. If
@var{key} already exists nothing is done.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden table
+A hash table.
address@hidden key
+A valid key string.
address@hidden elt
+A pointer to the element being added.
address@hidden table
address@hidden Returns
+A pdf status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden PDF_EBADDATA
+Either @var{table}, @var{key} or @var{elt} is invalid.
address@hidden table
address@hidden Usage example
address@hidden
+XXX
address@hidden example
address@hidden table
address@hidden deftypefun
+
+
+
address@hidden pdf_status_t pdf_hash_add_list (pdf_hash_t @var{table}, const
char @var{*key}, const pdf_list_t @var{*elt})
+
+Adds the list @var{elt} with the associated key @var{key} to @var{table}. If
@var{key} already exists nothing is done.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden table
+A hash table.
address@hidden key
+A valid key string.
address@hidden elt
+A pointer to the element being added.
address@hidden table
address@hidden Returns
+A pdf status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden PDF_EBADDATA
+Either @var{table}, @var{key} or @var{elt} is invalid.
address@hidden table
address@hidden Usage example
address@hidden
+XXX
address@hidden example
address@hidden table
address@hidden deftypefun
+
+
address@hidden pdf_status_t pdf_hash_add_hash (pdf_hash_t @var{table}, const
char @var{*key}, const pdf_hash_t @var{*elt})
+
+Adds the hash table @var{elt} with the associated key @var{key} to
@var{table}. If @var{key} already exists nothing is done.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden table
+A hash table.
address@hidden key
+A valid key string.
address@hidden elt
+A pointer to the element being added.
address@hidden table
address@hidden Returns
+A pdf status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden PDF_EBADDATA
+Either @var{table}, @var{key} or @var{elt} is invalid.
address@hidden table
address@hidden Usage example
address@hidden
+XXX
address@hidden example
address@hidden table
address@hidden deftypefun
+
address@hidden pdf_status_t pdf_hash_add_stm (pdf_hash_t @var{table}, const
char @var{*key}, const pdf_stm_t @var{*elt})
+
+Adds the stream @var{elt} with the associated key @var{key} to @var{table}. If
@var{key} already exists nothing is done.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden table
+A hash table.
address@hidden key
+A valid key string.
address@hidden elt
+A pointer to the element being added.
address@hidden table
address@hidden Returns
+A pdf status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden PDF_EBADDATA
+Either @var{table}, @var{key} or @var{elt} is invalid.
address@hidden table
address@hidden Usage example
address@hidden
+XXX
address@hidden example
address@hidden table
address@hidden deftypefun
+
+
+
@node Lists
@section Lists
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2008-06-25 21:46:57 +0000
+++ src/Makefile.am 2008-07-24 19:42:01 +0000
@@ -25,7 +25,8 @@
LIST_MODULE_SOURCES = base/pdf-list.c base/pdf-list.h
-HASH_MODULE_SOURCES = base/pdf-hash.c base/pdf-hash.h
+HASH_MODULE_SOURCES = base/pdf-hash.c base/pdf-hash.h \
+ base/pdf-hash-helper.c base/pdf-hash-helper.h
ALLOC_MODULE_SOURCES = base/pdf-alloc.c base/pdf-alloc.h
@@ -122,8 +123,8 @@
base/pdf-stm-f-pred.h \
base/pdf-stm-f-rl.h \
base/pdf-stm-file.h \
- base/pdf-stm.h
-
+ base/pdf-stm.h \
+ base/pdf-hash-helper.h
pdf.h : $(PUBLIC_HDRS)
chmod +x $(top_srcdir)/src/extract-public-hdr
=== modified file 'src/base/pdf-fsys.c'
--- src/base/pdf-fsys.c 2008-06-17 18:24:43 +0000
+++ src/base/pdf-fsys.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-06-17 13:12:16 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:35:40 gerel"
*
* File: pdf-fsys.c
* Date: Thu May 22 15:51:13 2008
@@ -209,57 +209,68 @@
*version_minor = item_props.version_minor;
/* Associate values with hash keys */
- if (pdf_hash_add (props_hash, "isHidden", (void *) is_hidden) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "isReadOnly", (void *) is_read_only) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "isCheckedOut", (void *) is_checked_out) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "isPublished", (void *) is_published) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "fileSizeHigh", (void *) file_size_high) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "fileSizeLow", (void *) file_size_low) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "folderSize", (void *) folder_size) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "creatorCode", (void *) creator_code) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "typeCode", (void *) type_code) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "versionMajor", (void *) version_major) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "versionMinor", (void *) version_minor) !=
+ if (pdf_hash_add (props_hash, "isHidden", (void *) is_hidden,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "isReadOnly", (void *) is_read_only,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "isCheckedOut", (void *) is_checked_out,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "isPublished", (void *) is_published,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "fileSizeHigh", (void *) file_size_high,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "fileSizeLow", (void *) file_size_low,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "folderSize", (void *) folder_size,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "creatorCode", (void *) creator_code,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "typeCode", (void *) type_code,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "versionMajor", (void *) version_major,
+ pdf_hash_element_dealloc_fn) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "versionMinor", (void *) version_minor,
+ pdf_hash_element_dealloc_fn) !=
PDF_OK)
{
return PDF_ERROR;
=== added file 'src/base/pdf-hash-helper.c'
--- src/base/pdf-hash-helper.c 1970-01-01 00:00:00 +0000
+++ src/base/pdf-hash-helper.c 2008-07-24 22:59:22 +0000
@@ -0,0 +1,107 @@
+/* -*- mode: C -*- Time-stamp: "2008-07-24 19:19:09 gerel"
+ *
+ * File: pdf-hash-helper.c
+ * Date: Thu Jul 24 21:05:05 2008
+ *
+ * GNU PDF Library - Hash helper functions
+ *
+ */
+
+/* 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-hash-helper.h>
+
+
+static void text_dispose_fn (const void *elt);
+static void time_dispose_fn (const void *elt);
+static void list_dispose_fn (const void *elt);
+static void hash_dispose_fn (const void *elt);
+static void stm_dispose_fn (const void *elt);
+
+
+pdf_status_t
+pdf_hash_add_text (pdf_hash_t table, const char *key, const pdf_text_t *elt)
+{
+ return (pdf_hash_add(table,key,elt,text_dispose_fn));
+}
+
+pdf_status_t
+pdf_hash_add_time (pdf_hash_t table, const char *key, const pdf_time_t *elt)
+{
+ return (pdf_hash_add(table,key,elt,time_dispose_fn));
+}
+
+
+pdf_status_t
+pdf_hash_add_list (pdf_hash_t table, const char *key, const pdf_list_t *elt)
+{
+ return (pdf_hash_add(table,key,elt,list_dispose_fn));
+}
+
+
+pdf_status_t
+pdf_hash_add_hash (pdf_hash_t table, const char *key, const pdf_hash_t *elt)
+{
+ return (pdf_hash_add(table,key,elt,hash_dispose_fn));
+}
+
+
+pdf_status_t
+pdf_hash_add_stm (pdf_hash_t table, const char *key, const pdf_stm_t *elt)
+{
+ return (pdf_hash_add(table,key,elt,stm_dispose_fn));
+}
+
+
+static void
+text_dispose_fn (const void *elt)
+{
+ pdf_text_t *destroyed = (pdf_text_t*) elt;
+ pdf_text_destroy(*destroyed);
+}
+
+static void
+time_dispose_fn (const void *elt)
+{
+ pdf_time_t * destroyed = (pdf_time_t*) elt;
+ pdf_time_destroy(*destroyed);
+}
+
+static void
+list_dispose_fn (const void *elt)
+{
+ pdf_list_t * destroyed = (pdf_list_t*) elt;
+ pdf_list_destroy(*destroyed);
+}
+
+static void
+hash_dispose_fn (const void *elt)
+{
+ pdf_hash_destroy ((pdf_hash_t*)elt);
+}
+
+static void
+stm_dispose_fn (const void *elt)
+{
+ pdf_stm_t * stm = (pdf_stm_t*) elt;
+ pdf_stm_flush(*stm);
+ pdf_stm_close(*stm);
+}
+
+
+/* End of pdf-hash-helper.c */
=== added file 'src/base/pdf-hash-helper.h'
--- src/base/pdf-hash-helper.h 1970-01-01 00:00:00 +0000
+++ src/base/pdf-hash-helper.h 2008-07-24 22:59:22 +0000
@@ -0,0 +1,59 @@
+/* -*- mode: C -*- Time-stamp: "2008-07-24 19:30:24 gerel"
+ *
+ * File: pdf-hash-helper.h
+ * Date: Thu Jul 24 21:05:05 2008
+ *
+ * GNU PDF Library - Hash helper functions
+ *
+ */
+
+/* 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_HASH_HELPER_H
+#define PDF_HASH_HELPER_H
+
+#include <pdf-hash.h>
+#include <pdf-text.h>
+#include <pdf-time.h>
+#include <pdf-list.h>
+#include <pdf-fp.h>
+#include <pdf-stm.h>
+
+/* BEGIN PUBLIC */
+
+pdf_status_t
+pdf_hash_add_text (pdf_hash_t table, const char *key, const pdf_text_t *elt);
+
+pdf_status_t
+pdf_hash_add_time (pdf_hash_t table, const char *key, const pdf_time_t *elt);
+
+pdf_status_t
+pdf_hash_add_list (pdf_hash_t table, const char *key, const pdf_list_t *elt);
+
+pdf_status_t
+pdf_hash_add_hash (pdf_hash_t table, const char *key, const pdf_hash_t *elt);
+
+pdf_status_t
+pdf_hash_add_stm (pdf_hash_t table, const char *key, const pdf_stm_t *elt);
+
+
+/* END PUBLIC */
+
+#endif /* !PDF_HASH_HELPER_H */
+
+/* End of pdf-hash-helper.h */
+
=== modified file 'src/base/pdf-hash.c'
--- src/base/pdf-hash.c 2008-05-06 20:53:43 +0000
+++ src/base/pdf-hash.c 2008-07-24 15:06:22 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-05-06 14:44:35 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-24 12:00:22 gerel"
*
* File: pdf-hash.c
* Date: Sat Apr 12 12:22:05 2008
@@ -62,8 +62,7 @@
static int key_compare (const void *key1, const void *key2);
pdf_status_t
-pdf_hash_create (pdf_hash_key_dispose_fn_t dispose_key_fn,
- pdf_hash_element_dispose_fn_t dispose_fn, pdf_hash_t *table)
+pdf_hash_create (pdf_hash_key_dispose_fn_t dispose_key_fn, pdf_hash_t *table)
{
pdf_status_t st;
@@ -71,7 +70,6 @@
if (table != NULL)
{
- table->dispose_fn = dispose_fn;
table->elements = gl_list_create_empty (GL_LINKEDHASH_LIST,
elem_key_equal, hash_pjw,
NULL, 0);
@@ -103,9 +101,10 @@
itr = gl_list_iterator ((gl_list_t)table->elements);
while (gl_list_iterator_next (&itr, &elt, NULL))
{
- if (table->dispose_fn != NULL)
+ if (((pdf_hash_element_t*)elt)->disp_fn != NULL)
{
- table->dispose_fn ((void*) ((pdf_hash_element_t*)elt)->value);
+ ((pdf_hash_element_t*)elt)->
+ disp_fn ((void*) ((pdf_hash_element_t*)elt)->value);
}
pdf_dealloc((pdf_hash_element_t*)elt);
}
@@ -182,7 +181,8 @@
pdf_status_t
-pdf_hash_add (pdf_hash_t table, const char *key, const void *element)
+pdf_hash_add (pdf_hash_t table, const char *key, const void *element,
+ pdf_hash_element_dispose_fn_t disp_fn)
{
pdf_status_t st;
pdf_hash_element_t *newelt;
@@ -195,6 +195,7 @@
{
newelt->key = key;
newelt->value = element;
+ newelt->disp_fn = disp_fn;
gl_list_add_first ((gl_list_t)table.elements, newelt);
gl_sortedlist_add ((gl_list_t)table.keys, key_compare, key);
}
@@ -232,10 +233,12 @@
pdf_hash_element_t *removed;
removed = (pdf_hash_element_t*)
gl_list_node_value((gl_list_t)table.elements, node);
- if (table.dispose_fn != NULL)
+
+ if (removed->disp_fn != NULL)
{
- table.dispose_fn (removed->value);
+ removed->disp_fn (removed->value);
}
+
pdf_dealloc(removed);
gl_list_remove_node ((gl_list_t)table.elements, node);
gl_sortedlist_remove ((gl_list_t)table.keys, key_compare, key);
@@ -357,6 +360,10 @@
return PDF_OK;
}
+
+
+
+
static size_t
hash_pjw (const void *elt)
{
@@ -373,6 +380,20 @@
}
+void
+pdf_hash_element_dealloc_fn (const void * elt)
+{
+ pdf_dealloc(elt);
+}
+
+
+void
+pdf_hash_key_dealloc_fn (const void * elt)
+{
+ pdf_dealloc(elt);
+}
+
+
static bool
elem_key_equal (const void *elt1, const void *elt2)
{
=== modified file 'src/base/pdf-hash.h'
--- src/base/pdf-hash.h 2008-05-06 20:53:43 +0000
+++ src/base/pdf-hash.h 2008-07-24 15:06:22 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-05-06 14:44:21 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-24 11:58:07 gerel"
*
* File: pdf-hash.h
* Date: Sat Apr 12 12:22:05 2008
@@ -29,24 +29,28 @@
#include <stdio.h>
#include <pdf-list.h>
+
+/* BEGIN PUBLIC */
+typedef void (*pdf_hash_element_dispose_fn_t) (const void *elt);
+/* END PUBLIC */
+
struct pdf_hash_element_s
{
const char * key;
const void * value;
+ pdf_hash_element_dispose_fn_t disp_fn;
};
typedef struct pdf_hash_element_s pdf_hash_element_t;
/* BEGIN PUBLIC */
-typedef void (*pdf_hash_element_dispose_fn_t) (const void *elt);
typedef void (*pdf_hash_key_dispose_fn_t) (const void *key);
struct pdf_hash_s
{
/* Both are gl_lists */
void *elements, *keys;
- pdf_hash_element_dispose_fn_t dispose_fn;
};
struct pdf_hash_iterator_s
@@ -61,8 +65,7 @@
/* Creating and Destroying Hash Tables */
pdf_status_t
-pdf_hash_create (pdf_hash_key_dispose_fn_t dispose_key_fn,
- pdf_hash_element_dispose_fn_t dispose_fn, pdf_hash_t *table);
+pdf_hash_create (pdf_hash_key_dispose_fn_t dispose_key_fn, pdf_hash_t *table);
pdf_status_t
pdf_hash_destroy (pdf_hash_t *table);
@@ -86,7 +89,8 @@
/* Adding and removing elements */
pdf_status_t
-pdf_hash_add (pdf_hash_t table, const char *key, const void *element);
+pdf_hash_add (pdf_hash_t table, const char *key, const void *element,
+ pdf_hash_element_dispose_fn_t disp_fn);
pdf_status_t
pdf_hash_remove (pdf_hash_t table, const char *key);
@@ -109,6 +113,14 @@
pdf_status_t
pdf_hash_iterator_free (pdf_hash_iterator_t *iterator);
+/* Basic dispose functions */
+
+void
+pdf_hash_element_dealloc_fn (const void * elt);
+
+void
+pdf_hash_key_dealloc_fn (const void * elt);
+
/* END PUBLIC */
=== modified file 'torture/unit/base/hash/pdf-hash-add.c'
--- torture/unit/base/hash/pdf-hash-add.c 2008-04-18 03:50:23 +0000
+++ torture/unit/base/hash/pdf-hash-add.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-04-16 20:29:44 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:12:36 gerel"
*
* File: pdf-hash-add.c
* Date: Wed Mar 12 12:43:00 2008
@@ -41,9 +41,9 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create ( NULL, &table);
- fail_if (pdf_hash_add (table, "key", "val") != PDF_OK);
+ fail_if (pdf_hash_add (table, "key", "val", NULL) != PDF_OK);
pdf_hash_destroy (&table);
}
@@ -61,9 +61,9 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create (NULL, &table);
- fail_if (pdf_hash_add (table, NULL, "val") != PDF_EBADDATA);
+ fail_if (pdf_hash_add (table, NULL, "val",NULL) != PDF_EBADDATA);
pdf_hash_destroy (&table);
}
@@ -81,9 +81,9 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create (NULL, &table);
- fail_if (pdf_hash_add (table, "key", NULL) != PDF_EBADDATA);
+ fail_if (pdf_hash_add (table, "key", NULL,NULL) != PDF_EBADDATA);
pdf_hash_destroy (&table);
}
=== modified file 'torture/unit/base/hash/pdf-hash-create.c'
--- torture/unit/base/hash/pdf-hash-create.c 2008-04-18 03:50:23 +0000
+++ torture/unit/base/hash/pdf-hash-create.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-04-16 20:16:29 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:11:50 gerel"
*
* File: pdf-hash-create.c
* Date: Wed Mar 12 12:43:00 2008
@@ -42,7 +42,7 @@
{
pdf_hash_t table;
- fail_if (pdf_hash_create (NULL, NULL, &table) != PDF_OK);
+ fail_if (pdf_hash_create (NULL, &table) != PDF_OK);
pdf_hash_destroy (&table);
}
@@ -57,7 +57,7 @@
*/
START_TEST (pdf_hash_create_002)
{
- fail_if (pdf_hash_create (NULL, NULL, NULL) != PDF_EBADDATA);
+ fail_if (pdf_hash_create (NULL, NULL) != PDF_EBADDATA);
}
END_TEST
=== modified file 'torture/unit/base/hash/pdf-hash-destroy.c'
--- torture/unit/base/hash/pdf-hash-destroy.c 2008-04-18 03:50:23 +0000
+++ torture/unit/base/hash/pdf-hash-destroy.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-04-16 20:25:16 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:12:52 gerel"
*
* File: pdf-hash-destroy.c
* Date: Wed Mar 12 12:43:00 2008
@@ -41,7 +41,7 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create (NULL, &table);
fail_if (pdf_hash_destroy (&table) != PDF_OK);
}
=== modified file 'torture/unit/base/hash/pdf-hash-iterator-free.c'
--- torture/unit/base/hash/pdf-hash-iterator-free.c 2008-04-18 03:50:23
+0000
+++ torture/unit/base/hash/pdf-hash-iterator-free.c 2008-07-23 11:39:04
+0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-04-16 20:30:15 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:13:00 gerel"
*
* File: pdf-hash-iterator-free.c
* Date: Wed Mar 12 12:43:00 2008
@@ -42,7 +42,7 @@
pdf_hash_t table;
pdf_hash_iterator_t itr;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create (NULL, &table);
pdf_hash_iterator (table, &itr);
fail_if (pdf_hash_iterator_free (&itr) != PDF_OK);
=== modified file 'torture/unit/base/hash/pdf-hash-iterator-next.c'
--- torture/unit/base/hash/pdf-hash-iterator-next.c 2008-04-23 22:35:35
+0000
+++ torture/unit/base/hash/pdf-hash-iterator-next.c 2008-07-23 11:39:04
+0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/04/18 21:22:47 jemarch"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:13:17 gerel"
*
* File: pdf-hash-iterator-next.c
* Date: Wed Mar 12 12:43:00 2008
@@ -44,8 +44,8 @@
pdf_hash_iterator_t itr;
char *key;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
pdf_hash_iterator (table, &itr);
fail_if (pdf_hash_iterator_next (&itr, (void *) &key) != PDF_OK);
@@ -68,8 +68,8 @@
pdf_hash_t table;
char *key;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
fail_if (pdf_hash_iterator_next (NULL, (void *) &key) != PDF_EBADDATA);
@@ -91,8 +91,8 @@
pdf_hash_t table;
pdf_hash_iterator_t itr;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
pdf_hash_iterator (table, &itr);
fail_if (pdf_hash_iterator_next (&itr, NULL) != PDF_EBADDATA);
=== modified file 'torture/unit/base/hash/pdf-hash-iterator.c'
--- torture/unit/base/hash/pdf-hash-iterator.c 2008-04-23 22:35:35 +0000
+++ torture/unit/base/hash/pdf-hash-iterator.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-04-16 20:30:29 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:13:29 gerel"
*
* File: pdf-hash-iterator.c
* Date: Wed Mar 12 12:43:00 2008
@@ -42,7 +42,7 @@
pdf_hash_t table;
pdf_hash_iterator_t itr;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create (NULL, &table);
fail_if (pdf_hash_iterator (table, &itr) != PDF_OK);
@@ -64,7 +64,7 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create (NULL, &table);
fail_if (pdf_hash_iterator (table, NULL) != PDF_EBADDATA);
=== modified file 'torture/unit/base/hash/pdf-hash-key-p.c'
--- torture/unit/base/hash/pdf-hash-key-p.c 2008-04-18 03:50:23 +0000
+++ torture/unit/base/hash/pdf-hash-key-p.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-04-16 20:30:36 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:13:40 gerel"
*
* File: pdf-hash-key-p.c
* Date: Wed Mar 12 12:43:00 2008
@@ -41,8 +41,8 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val", NULL);
fail_if (pdf_hash_key_p (table, "key") != PDF_TRUE);
@@ -62,8 +62,8 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val", NULL);
fail_if (pdf_hash_key_p (table, "ke") != PDF_FALSE);
=== modified file 'torture/unit/base/hash/pdf-hash-remove.c'
--- torture/unit/base/hash/pdf-hash-remove.c 2008-04-18 03:50:23 +0000
+++ torture/unit/base/hash/pdf-hash-remove.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-04-16 20:30:42 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:13:51 gerel"
*
* File: pdf-hash-remove.c
* Date: Wed Mar 12 12:43:00 2008
@@ -41,8 +41,8 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
fail_if (pdf_hash_remove (table, "key") != PDF_OK);
@@ -63,8 +63,8 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
fail_if (pdf_hash_remove (table, "ke") != PDF_ERROR);
@@ -84,8 +84,8 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
fail_if (pdf_hash_remove (table, NULL) != PDF_EBADDATA);
=== modified file 'torture/unit/base/hash/pdf-hash-rename.c'
--- torture/unit/base/hash/pdf-hash-rename.c 2008-04-18 03:50:23 +0000
+++ torture/unit/base/hash/pdf-hash-rename.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-04-16 20:30:47 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:14:08 gerel"
*
* File: pdf-hash-rename.c
* Date: Wed Mar 12 12:43:00 2008
@@ -41,8 +41,8 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
fail_if (pdf_hash_rename (table, "key", "ke") != PDF_OK);
fail_if (pdf_hash_key_p (table, "ke") != PDF_TRUE);
@@ -62,8 +62,8 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
fail_if (pdf_hash_rename (table, "ke", "key") != PDF_ERROR);
@@ -82,7 +82,7 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create (NULL, &table);
fail_if (pdf_hash_rename (table, NULL, "ke") != PDF_EBADDATA);
@@ -101,7 +101,7 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create (NULL, &table);
fail_if (pdf_hash_rename (table, "key", NULL) != PDF_EBADDATA);
=== modified file 'torture/unit/base/hash/pdf-hash-search.c'
--- torture/unit/base/hash/pdf-hash-search.c 2008-04-22 22:16:14 +0000
+++ torture/unit/base/hash/pdf-hash-search.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/04/22 22:13:38 jemarch"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:14:22 gerel"
*
* File: pdf-hash-search.c
* Date: Wed Mar 12 12:43:00 2008
@@ -42,8 +42,20 @@
pdf_hash_t table;
char *s;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
+ pdf_hash_add (table, "ky", "val",NULL);
+ pdf_hash_add (table, "ky23", "val",NULL);
+ pdf_hash_add (table, "2ky23", "val",NULL);
+ pdf_hash_add (table, "032ky23", "val",NULL);
+ pdf_hash_add (table, "230", "val",NULL);
+ pdf_hash_add (table, "0389", "val",NULL);
+ pdf_hash_add (table, "123", "val",NULL);
+ pdf_hash_add (table, "1", "val",NULL);
+ pdf_hash_add (table, "aky23", "val",NULL);
+ pdf_hash_add (table, "AB23", "val",NULL);
+ pdf_hash_add (table, "0", "val",NULL);
+ pdf_hash_add (table, "AB", "val",NULL);
fail_if (pdf_hash_search (table, "key", (void *) &s) != PDF_OK);
@@ -64,8 +76,8 @@
pdf_hash_t table;
char *s;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
fail_if (pdf_hash_search (table, "ke", (void *) &s) != PDF_ERROR);
@@ -85,8 +97,8 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
fail_if (pdf_hash_search (table, "key", NULL) != PDF_EBADDATA);
@@ -108,8 +120,8 @@
pdf_hash_t table;
char *s;
- pdf_hash_create (NULL, NULL, &table);
- pdf_hash_add (table, "key", "val");
+ pdf_hash_create (NULL, &table);
+ pdf_hash_add (table, "key", "val",NULL);
fail_if (pdf_hash_search (table, NULL, (void *) &s) != PDF_EBADDATA);
=== modified file 'torture/unit/base/hash/pdf-hash-size.c'
--- torture/unit/base/hash/pdf-hash-size.c 2008-04-18 03:50:23 +0000
+++ torture/unit/base/hash/pdf-hash-size.c 2008-07-23 11:39:04 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-04-16 19:14:23 gerel"
+/* -*- mode: C -*- Time-stamp: "2008-07-23 08:14:28 gerel"
*
* File: pdf-hash-size.c
* Date: Wed Mar 12 12:43:00 2008
@@ -41,7 +41,7 @@
{
pdf_hash_t table;
- pdf_hash_create (NULL, NULL, &table);
+ pdf_hash_create (NULL, &table);
fail_if (pdf_hash_size (table) != 0);
# Begin bundle
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
4hoSC6gaGrWR/i7kinChId4lO+Y=
###
cheers
-gerel
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [pdf-devel] Patch for FS#56 and FS#57,
gerel <=