After Michael's suggestions here is a patch for the task. cheers, -gerel
## # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: file:///home/gerel/PROJECTS/libgnupdf/trunk/ # testament_sha1: 03ce67b1f2bc920a5b1cdee29a4d380ccf557230 # timestamp: 2009-01-28 08:59:04 -0300 # base_revision_id: [email protected] # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2009-01-27 23:46:47 +0000 +++ ChangeLog 2009-01-28 11:58:58 +0000 @@ -1,3 +1,19 @@ +2009-01-28 Gerardo E. Gidoni <[email protected]> + + * doc/gnupdf.texi: removed PDF_ENOMEM status code for iterator + procedures. + + * src/base/pdf-hash.c: implemented stack based iterators. + + * src/base/pdf-hash.h: same. + + * src/base/pdf-list.h: same. + + * torture/unit/base/hash/pdf-hash-iterator-new.c: new iterator + size check. + + * torture/unit/base/list/pdf-list-iterator.c: same. + 2009-01-28 Jose E. Marchesi <[email protected]> * doc/gnupdf-hg.texi (Opaque Pointers): Opaque pointers documented === modified file 'doc/gnupdf.texi' --- doc/gnupdf.texi 2009-01-27 20:59:40 +0000 +++ doc/gnupdf.texi 2009-01-28 11:58:58 +0000 @@ -1977,8 +1977,6 @@ @table @code @item PDF_OK The operation succeeded. -...@item PDF_ENOMEM -Not enough memory. @item PDF_EBADDATA Either @var{iterator} is NULL or @var{table} is invalid. @end table @@ -3962,8 +3960,6 @@ @table @code @item PDF_OK @var{itr} contains a new iterator for @var{list}. -...@item PDF_ENOMEM -There is no memory available for a new iterator. @item PDF_EBADDATA @var{itr} points to NULL. @end table @@ -3999,8 +3995,6 @@ @table @code @item PDF_OK @var{itr} contains a new iterator for @var{list} pointing to @var{start_index}. -...@item PDF_ENOMEM -There is no memory available for a new iterator. @item PDF_EINVRANGE @var{start_index} or @var{end_index} is greater than the list size or less than 0. @item PDF_EBADDATA === modified file 'src/base/pdf-hash.c' --- src/base/pdf-hash.c 2008-12-27 23:38:51 +0000 +++ src/base/pdf-hash.c 2009-01-27 14:38:27 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "08/12/27 23:45:02 jemarch" +/* -*- mode: C -*- Time-stamp: "2009-01-27 11:34:52 gerel" * * File: pdf-hash.c * Date: Sat Apr 12 12:22:05 2008 @@ -302,16 +302,8 @@ if (iterator != NULL) { - iterator->gl_itr = pdf_alloc (sizeof(gl_list_iterator_t)); - if (iterator->gl_itr != NULL) - { - *((gl_list_iterator_t*)iterator->gl_itr) = - gl_list_iterator ((gl_list_t)table.keys); - } - else - { - st = PDF_ENOMEM; - } + *((gl_list_iterator_t*)iterator->gl_itr) = + gl_list_iterator ((gl_list_t)table.keys); } else { @@ -354,7 +346,6 @@ if (iterator.gl_itr != NULL) { gl_list_iterator_free ((gl_list_iterator_t*)iterator.gl_itr); - pdf_dealloc (iterator.gl_itr); } return PDF_OK; === modified file 'src/base/pdf-hash.h' --- src/base/pdf-hash.h 2008-12-27 23:38:51 +0000 +++ src/base/pdf-hash.h 2009-01-28 11:58:58 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "08/12/27 23:44:37 jemarch" +/* -*- mode: C -*- Time-stamp: "2009-01-28 08:33:27 gerel" * * File: pdf-hash.h * Date: Sat Apr 12 12:22:05 2008 @@ -45,6 +45,8 @@ /* BEGIN PUBLIC */ +#define PDF_HASH_ITERATOR_SIZE 12 + typedef void (*pdf_hash_key_dispose_fn_t) (const void *key); struct pdf_hash_s @@ -55,7 +57,7 @@ struct pdf_hash_iterator_s { - void *gl_itr; + void *gl_itr[PDF_HASH_ITERATOR_SIZE]; }; typedef struct pdf_hash_s pdf_hash_t; === modified file 'src/base/pdf-list.h' --- src/base/pdf-list.h 2008-09-13 18:30:12 +0000 +++ src/base/pdf-list.h 2009-01-28 11:58:58 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "08/09/13 20:26:25 jemarch" +/* -*- mode: C -*- Time-stamp: "2009-01-28 08:33:52 gerel" * * File: pdf-list.h * Date: Sat Mar 1 02:14:35 2008 @@ -42,15 +42,17 @@ /* Data types */ +#define PDF_LIST_ITERATOR_SIZE 12 + struct pdf_list_s { void *gl_list; pdf_bool_t allow_duplicates; }; - + struct pdf_list_iterator_s { - void *gl_iterator; + void*gl_iterator[PDF_LIST_ITERATOR_SIZE]; }; struct pdf_list_node_s @@ -747,17 +749,8 @@ if (itr != NULL) { - 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; - } + *((gl_list_iterator_t*)itr->gl_iterator) = + gl_list_iterator ((gl_list_t)list.gl_list); } else { @@ -784,18 +777,9 @@ (end_index > 0 && end_index <= pdf_list_size (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, + *((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 { @@ -832,8 +816,6 @@ { gl_list_iterator_free ((gl_list_iterator_t*)(iterator->gl_iterator)); - pdf_dealloc (iterator->gl_iterator); - return PDF_OK; } === modified file 'torture/unit/base/hash/pdf-hash-iterator-new.c' --- torture/unit/base/hash/pdf-hash-iterator-new.c 2008-09-10 19:11:31 +0000 +++ torture/unit/base/hash/pdf-hash-iterator-new.c 2009-01-28 11:58:58 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "08/09/10 20:49:54 jemarch" +/* -*- mode: C -*- Time-stamp: "2009-01-28 08:47:58 gerel" * * File: pdf-hash-iterator.c * Date: Wed Mar 12 12:43:00 2008 @@ -29,6 +29,7 @@ #include <stdio.h> #include <pdf.h> #include <check.h> +#include <gl_list.h> /* * Test: pdf_hash_iterator_001 @@ -74,6 +75,20 @@ /* + * Test: pdf_hash_iterator_003 + * Description: + * Iterator size check. + * Success condition: + * The pdf hash iterator size is greater or equal than the gl list one. + */ +START_TEST (pdf_hash_iterator_003) +{ + fail_if (sizeof(pdf_hash_iterator_t) < sizeof(gl_list_iterator_t)); +} +END_TEST + + +/* * Test case creation function */ TCase * @@ -82,6 +97,7 @@ TCase *tc = tcase_create("pdf_hash_iterator"); tcase_add_test(tc, pdf_hash_iterator_001); tcase_add_test(tc, pdf_hash_iterator_002); + tcase_add_test(tc, pdf_hash_iterator_003); return tc; } === modified file 'torture/unit/base/list/pdf-list-iterator.c' --- torture/unit/base/list/pdf-list-iterator.c 2008-09-08 21:04:39 +0000 +++ torture/unit/base/list/pdf-list-iterator.c 2009-01-28 11:58:58 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "08/09/08 22:52:27 jemarch" +/* -*- mode: C -*- Time-stamp: "2009-01-28 08:43:12 gerel" * * File: pdf-list-iterator.c * Date: Wed Mar 12 12:43:00 2008 @@ -27,6 +27,7 @@ #include <stdio.h> #include <pdf.h> #include <check.h> +#include <gl_list.h> /* * Test: pdf_list_iterator_001 @@ -77,6 +78,21 @@ /* + * Test: pdf_list_iterator_003 + * Description: + * Iterator size check. + * Success condition: + * The pdf list iterator size is greater or equal than the gl list one. + */ +START_TEST (pdf_list_iterator_003) +{ + fail_if (sizeof(pdf_list_iterator_t) < sizeof(gl_list_iterator_t)); +} +END_TEST + + + +/* * Test case creation function */ TCase * @@ -85,6 +101,7 @@ TCase *tc = tcase_create("pdf_list_iterator"); tcase_add_test(tc, pdf_list_iterator_001); tcase_add_test(tc, pdf_list_iterator_002); + tcase_add_test(tc, pdf_list_iterator_003); return tc; } # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWbnyCkQADm/fgFVwWXf//3/n 3Bq////6YBIcD0H16cuWmooOgArShoyAHWNlm6AAoDrk0SFW2hQA4BhGE0xDAIBkAMI0yZMIwENB KQQNDSnp6o8kaaA0NBoNAAAAAA4BhGE0xDAIBkAMI0yZMIwENBIiBCg01GNGSmwp6RkHlAAADRp6 mmTQRSJoST9U9NNqaAm0maaamI0MI0AGgAaaAqUQBMQBAQAp4U9EyaT1D1M1NABoY1LXExGphyv+ h9VAj5iNhspulz0U1cWQMQwXS6PFvcpMzQpUNjfNBevo/Uk9bG11vgfSR1jocHHOuRzS9Zv1mMWO 0buf8MO0LnKYzgrhpsPG0LiBMJiEJgpBorau+4sOJ46yWdbdlCz9p5TMEZtIy3tKUQjPKAlgKiKp NstxcRi+FdUrgFJvli8MIojK1sJ1mhKxVb5yHQIMhcwfM1raBQDVU+obu3GpunyLAevxqYVN4E63 WwQkoYxpJsQvTqDWCRXYw9ViLpJhDBUfPx3xfnKL5yQptoFiioPDyoLdcK1ZVg2EA5CAzZkUyvR7 ouyHo9HcGRaFRUrggMqyXhMy0rfBZLOILvTFJRpWFpTE0G3M3hbjaeghbkjxm0qdQzZcCoSd6R6V TyUIXq5wZfpLlwYeZ8Tt1pKdzwUwZNz18+O4vX/0/l675jzdJDI1A0LS5mpQtCnwNuUlkxsbBkKq PoONKB0vXYOERHlosCUaNRC8WpoXwz2Za8Va6rz8IaB1mRpGiDt2ge6QW8LQJuHGrgz8G3wPeOEq QNvicRoYndHl63XedY8Mss88W0O8S2JDQle+MMM4UFE5BLwtDbYd89AyJREHAZMhI3GDREzjMDN5 S0IUgeYeg81HkFKHFHblKaQpUKcqF2eMH3bX5ggnkbG2hhUMztDrQVA3qBWFFySHrG4pHZLvTE1P 1Q98RZa8Z5TEv3wuavbEskvWmR6A0SOEjCM214U3h9TYzvOHFs507t9QMcRwqRtjYDQNZewETEuy ZvPCm2CWGw3X+HRckpSJSkSlIaqqTO8Dggw7dGMS5mJdwVT2E83PyxwJI2jY0lk0lV1YecGBauMN KAlC+Kt6opHMGZ/pdhWHvWpAzaD4RKFSQuxaPf+FkNImQqYQNEIKAUGqDQtpiEk+46QwgsYfcwrR oq00wUzyLEUS4USjFkac8EwSFc7nMtSI0jBykMc2zOLlGS14r3hE67lIyfG8wbm5R8e+Jvs7TXjb CVohjKVpJx2ECCGlAOjCjCthY8VbgF9DBmJOqDKOOOZg7u3a/CZ1hrlnc2Cqs7KNMqb7C9uKrI/i oRKKB3XN/PW2t13Fbpc5Nt/VnGNug4xqrDfSm8zb1yzFbx2kODaItpI2aY3LUvYh+1xX3ImLXdum 2rVzZNG5g2/sviZS3FWY3vhXjjUyYM5fxkNxk8lGa9Ri6LlHVaPKiUmD9/oh04u6ItRdrEidatSn NayeaSaIuSotwtoeUKxksCe/vkpQrCF8TWZL1GndxhZFere75upvZIYRL2yi1mYpnE4y80SwtX+T c6sGusSnco6PFwib1py4UWuLOO9z2sdBVnEWBMFDRwcFrAuaVjiyxuDJTDCmjYtclxvWCWKuTozO RzcF6xgsWt7BzcnxnA5p9QuiYOzpoUUWTktrYtsN9Ipbjw1uN0hSGSL5jWHBYrngvFW5esYy/lhn 0W5YTiwvXO1M2CaqsXNiNDgmtkYLXR2Xr86YrzdQvZKrKit8ZxLeDPtjbjpuvnlobnE2wHhEVcs+ kkWM8XS26vBZZswUvcl6+8ttpTKc3WJg4tHRexZOCjgq7xhmG1INKioqGGIKf5BCsfRcqcpgta58 hcHTIg/K6QwXqZJPV1ZxMW9wYs7ZmrGDRUt3SxVCMk+bYX5TbVOTkQ0t7xGw102DwBJ0+bXCUFHR 3N7GTbHRKbnVyWOmHQydNYmTkvm7GsU9GHNbcbMCrrEc4lWzg7OTgXqOLB9YlzkKHWGuGGS3w4bl y05AO8zI5UFi8w1fWC23aJhF+Cl1kSrhezas29y4OajdNLW7rEpMWTfd0w0TNt0VdmGzk58FS4zl kwWM2/Bi58GDhnpaGbIZhxWNiui9zYNVElirFrL1GSriwXr2zZKFp0iPGI9MTfFqD3sSDVtGvrpi bU2NkEbKWoVjY5KCMuCh1M6hQosjREzduvs17M5nr3LVpuXOlt13c2Xt6tX0fSG7xcWRudzq134u rzDlYt4EZr3ZuXlrgWrGjvcE/T0+6JdD5RMs9pypJrZ2sa21iLSwFEI8mTtZCOFVEoELWPYMWQzE jrZ9XKUOjozuMoQRByEdYaFTUx0NB74lsSR2ZFzBi5RFFG5i5NtvNgXtFGZyb2ajRuc3uh7YiyJ6 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 fIKRAA== ###
