Index: hash.c =================================================================== RCS file: /cvs/gnome/gnome-xml/hash.c,v retrieving revision 1.14 diff -u -r1.14 hash.c --- hash.c 2001/07/18 19:30:26 1.14 +++ hash.c 2001/07/21 01:03:58 @@ -510,6 +510,19 @@ */ void xmlHashScan(xmlHashTablePtr table, xmlHashScanner f, void *data) { + xmlHashScanFull (table, (xmlHashScannerFull) f, data); +} + +/** + * xmlHashScanFull: + * @table: the hash table + * @f: the scanner function for items in the hash + * @data: extra data passed to f + * + * Scan the hash table and applied f to each value. + */ +void +xmlHashScanFull(xmlHashTablePtr table, xmlHashScannerFull f, void *data) { int i; xmlHashEntryPtr iter; xmlHashEntryPtr next; @@ -525,7 +538,8 @@ while (iter) { next = iter->next; if (f) - f(iter->payload, data, iter->name); + f(iter->payload, data, iter->name, + iter->name2, iter->name3); iter = next; } } @@ -549,6 +563,27 @@ xmlHashScan3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashScanner f, void *data) { + xmlHashScanFull3 (table, name, name2, name3, + (xmlHashScannerFull) f, data); +} + +/** + * xmlHashScanFull3: + * @table: the hash table + * @name: the name of the userdata or NULL + * @name2: a second name of the userdata or NULL + * @name3: a third name of the userdata or NULL + * @f: the scanner function for items in the hash + * @data: extra data passed to f + * + * Scan the hash table and applied f to each value matching + * (name, name2, name3) tuple. If one of the names is null, + * the comparison is considered to match. + */ +void +xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name, + const xmlChar *name2, const xmlChar *name3, + xmlHashScannerFull f, void *data) { int i; xmlHashEntryPtr iter; xmlHashEntryPtr next; @@ -566,7 +601,8 @@ if (((name == NULL) || (xmlStrEqual(name, iter->name))) && ((name2 == NULL) || (xmlStrEqual(name2, iter->name2))) && ((name3 == NULL) || (xmlStrEqual(name3, iter->name3)))) { - f(iter->payload, data, iter->name); + f(iter->payload, data, iter->name, + iter->name2, iter->name3); } iter = next; } Index: include/libxml/hash.h =================================================================== RCS file: /cvs/gnome/gnome-xml/include/libxml/hash.h,v retrieving revision 1.8 diff -u -r1.8 hash.h --- include/libxml/hash.h 2001/07/18 19:30:27 1.8 +++ include/libxml/hash.h 2001/07/21 01:03:58 @@ -36,6 +36,9 @@ typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name); typedef void *(*xmlHashCopier)(void *payload, xmlChar *name); typedef void *(*xmlHashScanner)(void *payload, void *data, xmlChar *name); +typedef void (*xmlHashScannerFull)(void *payload, void *data, + const xmlChar *name, const xmlChar *name2, + const xmlChar *name3); /* * Constructor and destructor @@ -113,6 +116,15 @@ const xmlChar *name2, const xmlChar *name3, xmlHashScanner f, + void *data); +void xmlHashScanFull (xmlHashTablePtr table, + xmlHashScannerFull f, + void *data); +void xmlHashScanFull3(xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *name2, + const xmlChar *name3, + xmlHashScannerFull f, void *data); #ifdef __cplusplus }