On Wed, Nov 15, 2006 at 04:50:55AM -0500, Daniel Veillard wrote:
On Wed, Nov 15, 2006 at 02:18:48AM +0000, Daniel P. Berrange wrote:
> The attached patch adds a couple of new APIs to the hash table object to
> allow various different ways of iterating over the contents of the hash
> table. The methods are:
>
> virHashForEach
> virHashRemoveSet
> virHashSearch
>
> Docs for these methods are all inline. Compared to previous patch a logic
> flaw in the virHashRemoveSet method was fixed prevently some severe memory
> corruption!
The APIs are okay, I'm just wondering if the iterator should not return
an int allowing to break the iteration, but admitedly that would make it
close to the search. So it's fine as-is.
Yes, that's a good idea - I'll make it return number of elements - I think
I could acutaly make use of that elsewhere already.
> + int virHashRemoveSet(virHashTablePtr table, virHashSearcher
iter, virHashDeallocator f, const void *data) {
> + int i;
> +
> + }
Iterating when removing entries which are first in the list is a bit tricky
but that's looks fine.
Yeah, that's why i wrote a dedicated method for iterating & removing in
one go - calling 'virHashRemove' from the normal iterator just caused
very bad things to happen :-)
> + void *virHashSearch(virHashTablePtr table, virHashSearcher
iter, const void *data) {
> + int i;
> +
> + if (table == NULL || iter == NULL)
> + return (NULL);
> +
> + for (i = 0 ; i < table->size ; i++) {
> + virHashEntryPtr entry = table->table + i;
> + while (entry) {
> + if (entry->valid) {
> + if (iter(entry->payload, entry->name, data))
> + return entry->payload;
> + }
> + entry = entry->next;
> + }
> + }
> + return (NULL);
> + }
Minor stylistic issue I tend to use return(value); and you use sometime
return (value); or return value; but it's really not a serious problem :-)
My own style is normally 'return value', but I try to match your style
when working on libvirt - sometimes i forget though, so I'll fix up the
bits where I forget the ().
Regards,
Dan.
--
|=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=|
|=- Perl modules:
http://search.cpan.org/~danberr/ -=|
|=- Projects:
http://freshmeat.net/~danielpb/ -=|
|=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|