Hi hackers, I attach a patch for stack based iterators, in list and hash modules.
BTW, the current gnulib iterators are 28 bytes long, correct me if I'm wrong. I gave 48 bytes to iterators, though this remains open to discussion. ## # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: file:///home/gerel/PROJECTS/libgnupdf/trunk/ # testament_sha1: 80a8528867587b4d8e409d318e9816c9a497c33b # timestamp: 2009-01-27 13:24:13 -0300 # base_revision_id: [email protected] # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2009-01-26 22:13:35 +0000 +++ ChangeLog 2009-01-27 14:38:27 +0000 @@ -1,3 +1,14 @@ +2009-01-27 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. + 2009-01-26 Jose E. Marchesi <[email protected]> * doc/gnupdf.texi (Implementation Limits): New chapter. === modified file 'doc/gnupdf.texi' --- doc/gnupdf.texi 2009-01-26 22:13:35 +0000 +++ doc/gnupdf.texi 2009-01-27 14:38:27 +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-27 16:24:10 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "08/12/27 23:44:37 jemarch" +/* -*- mode: C -*- Time-stamp: "2009-01-27 13:23:54 gerel" * * File: pdf-hash.h * Date: Sat Apr 12 12:22:05 2008 @@ -45,6 +45,8 @@ /* BEGIN PUBLIC */ +#define PDF_HASH_ITERATOR_SIZE 48 + 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; + char 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-27 16:24:10 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "08/09/13 20:26:25 jemarch" +/* -*- mode: C -*- Time-stamp: "2009-01-27 13:23:28 gerel" * * File: pdf-list.h * Date: Sat Mar 1 02:14:35 2008 @@ -42,15 +42,17 @@ /* Data types */ +#define PDF_LIST_ITERATOR_SIZE 48 + struct pdf_list_s { void *gl_list; pdf_bool_t allow_duplicates; }; - + struct pdf_list_iterator_s { - void *gl_iterator; + char 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; } # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWTta0kYACMzfgBVwWXf//3/n 3Bq////wYAuc8UAoPijQAaAtWW0QqqWgAABxkyaMQxNMBAwJpgjBMTTTQAYQ4yZNGIYmmAgYE0wR gmJppoAMIcZMmjEMTTAQMCaYIwTE000AGEEhSZIao2psnpE2kxDQAAANAAeo00CKQgTQAEZNDJoB U/Q0mp4k0ZGmnlGm1PUCqQmmgTECTxU8kZT1DQAaA0aNABp+klhWQfnj2wxMXvzXfZbSTS4acFZJ dS5avv8zA52N4PgJw4cVM9B14il51xuxGNiM6BkkAaDOwzcFDhKeaXTWVxYjZC2YMUwa7pAE0oEV YaihUsYLS1oFKmKWkjDQ1iFY/rkkdi/s8+qMXivYu0H8zRAkREIP0xANgfvUJITTSenKyNECR2dr C1YhUVU4otT8JltR7ss5eosCXjVtJkF5dZZQLYqqpNupIriRQ2c7sXXPq/x+o+S/Ql0Vn78zuqEr 3PB0GbTsI6TPltZyMqzuYApAFUIf6giAiRPE2HL8bAHQuzI9Lkwc/bn7m16rIuHj9R41fWuQ32/W IjYTDFEYN23jPBFPrZZbXceQHBYUKqqw6mgC+I5Wx3sPvGNnM9njWw/gvqHsPdR7xf/SsFvF4AdW Qjz5MvGIICGhv4nStQzIGgA7wLj0dwF5yXiobHmZ4x60YDC3K41omEuG4oezDXVK0NLBEQsLFf8A jeHSuoHSsng62REkJIUu9IqKnJWSS5BzG7pzJLEYI0Qd5AV1wtrYBSuidj41L7DAIJcc48AIkANi FwFRRb5LQZkAaSBPI5ytamkQWkz24ayaQ1jDB5mAL60rAZkIjdQxg1XmZdZtRz3ENRwtDmR1S0l8 0YgTKwmPAyElDJgKQ1Nk6AYyq0Ci5rGo1ZrCyS3T0kOhnNo98TpD6UhCS5n0x6zv3ypvzWOGaNYZ po1lqaNOXlqRwIiT8rdSEMq6MsV7j+jmNLNcL33LUKsYu1IxeG6rRzXOrm4PXdbsjZE46Yp20t1z zVto865GSL17FkiliGEtLzXoWadG72RlKyCsIq0XxYcYpGSi54Yui/IdWmkIlGulHBaHk2zo3E+s QUELNVVFeuLSLm7RwUCibksbOK54TUeTk1iQm45BDobkoRZmD0JESqKzSwLyX1EyyptMsXRZNeqi +MI1pCii13BjVxWTUmi+GApvfPPpibqI8og4M9oQtopuyXpaqLiblHIcWLiuZNWDVN0favTbNHRR +B8Yg2yvlmwly2vHK4iqqVh58RotrHZmpEmUQXvJd1d3OFDqlZHB6DgxVRhWzqzb32YxHkotI8eJ 0dIk3RHITc3kzXJOir7RNrDFaqMqznVKs1dEZXcYRaF9pTHKrBybasmNOUGVmzhXxbrGTk6r+jlF FtYswc1nPVbZG7gs5LmCQsmxVYpKqMnGJKPSIO8QeY0hc45Tb0nwabUvu35+yHFdmyMM8ZFIcYQy rGfsc17BTmxUdE/vPhEY5MmrLOrSSeUIs1YNGqzk0j5gSXiBdeJdLLO2klDAM1LKUUJoQiYsybBc 5KuCWDVOzOsqWSwiNoiLL17SEMV7s8ePkcGazJs1NGTziPEQTHZGeOrDRTtdpJ00mvXWQSEhe4+F JWmm6SbpViCtpq5IomyTujB1cndo8k6OTCN2rVcrFbMWya9Mk82eNEtZTjgKNcN10IhPJxTUwwks 84wZMIxcLntucebGqiedk1zOizJom1jvhRzfPZ0VTSXJt2ir5ojnEde/drvvwTnNPnOaiV06SXE4 QK86wDCtKwcwBX8fsR0jkNPIcTAO8wXsTFFVbie2NJmQTIPFKKRjZ1VO4iGCCCCkELC+m596nm5G U2tmNjDN62jydYDQI+obALg0CG2Iba8WlLLsQcwqV93P6ir/MF649T7CYmJGmnrL1yGB8ZRK4VH2 GA+JExkWiKD0WesMuspSlKUzqBXjSzvWBG0ot5MGQAaRRa9+q6jTY2jY/fw9D0JWAyIB95yPcdx6 nkBQtMx2/L2nqep9Cg2YJs2T6bnT6Fyb8+vRu/c5sWCjmvd0dgD+qOhPiUOgHIJW7V17gJ50WrED WLUtQtPzT+mXZqNRtKUkTJG8xlZnIJwazevwe863cbiC8/Qdo7zMZTGZfol6ONzqGF+AoflfnyZL naJ2XVv0e9k2XN1z3MXNt8NGT2xZizaKuDJvo7tWz+cZsVya9902avTs6VcXvjyHj5Hn3m9kXR++ h7Udnn1bOKbm2WKKtoRaIjB4a+dYxd2yEebVJa17u2Xuxu9k0oj/yOuvwRGDgmI3PNj15b8WQvHv 8EN+rX3r3IVCSeCOkqr/Sma50WfOJOy9Z7sI4XKXT7OTB9cPlNVXzKO/t5KGdeBsdiGYGY6AyQHi wE+ZCADEa9BkyUd318vDRyUapXsvc8RJ0RITRCNnccVINBjQkibht1ZH7wLgFHNwBt6hvQkK3WJH 4bo5xoiqI96abm9Hkkk9Hyr3wdlmSqp3XEmC5JJ3WUeGjgze0jmRiqKxB/WA7kO1DKNQ8ZgZT4/3 eLtXvh5yRJAYtMYtgDORZkti7pQBoygyIZAZAZ0sCzfofwfb9x+4I3XRH3fpaP4AQDwfAXee0aFE KAMH3gLKyAgY6ANHoO0DaBzdKrjfLkI+oGFQp7bfkMXPAR92AeQNyj+SzHq649oBbWOXq4smt2iv JHMK+9UpcXwf7hJkSI2Oi4Sz4IeC6GQbnlAexHrHKnHEAcEeDSF6DGrpWYKfAA9EPWBD4GA1l70D E0MPycB4uxvTZQDmXEtpogGh5PS1DWblPmBc71tuE2g2ngBFYrWDUzVJsSSWdtKx7LlCyETYAvqo TQ11dfyd4yM2nOsv22GbetK3CK/ybvlUjiccIPAEZLI64Q6EcOSiPooSE2ob3e71eU4YhjrCJQww w1g3AwXC1Z0ftY3DD/NQ80ekcxe8SIj5xoiCKjsAhnNE0s1e9sQsDuaCjqoi5sj5tEMrCE3EuEEf eBdgx0X3GqeaqYNRjsGUDCGPwsadHKJOAYY0DlMAO6BYBxA84rSSFasmwaKkjMs2RWgWW2jCONHt A73taxxgY7B9RCHzgWTQyuUXiGQQwOLAMx78mIHCAQXoYA9klthWbTJQaAjoTu1Mwunl86KGwyyQ w7BXWuBbfNHInaBxULOJ+L1gTQZGhuZBJgkya3GjhAzFmg+ZtTHmUoNT/8XckU4UJA7WtJGA ### cheers, -gerel
