On Wed, Nov 15, 2006 at 04:25:55PM +0000, Daniel P. Berrange wrote: > 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 :-) Compute next first, then process to test, usually that works :-) Daniel -- Red Hat Virtualization group http://redhat.com/virtualization/ Daniel Veillard | virtualization library http://libvirt.org/ veillard@xxxxxxxxxx | libxml GNOME XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/