[libvirt] [PATCH V5 01/10] Add function to get hash tables key/value pairs
Eric Blake
eblake at redhat.com
Thu Nov 17 21:27:20 UTC 2011
On 11/17/2011 01:11 PM, Stefan Berger wrote:
> Add a function to the virHashTable for getting an array of the hash table's
> key-value pairs and have the keys (optionally) sorted.
>
> Signed-off-by: Stefan Berger <stefanb at linux.vnet.ibm.com>
>
> ---
>
> v5:
> - follwed Eric Blake's suggestions:
> - added better description to new function
> - return array of key-value pairs rather than only keys
Yep, looks like it will be more reusable now. And the more I think
about it, the more I've convinced myself this is a useful interface
(allows you to sort the hashtable in multiple ways, based on what
comparator you pass in; using a data structure to store sorted elements
with hashtable lookup speeds still only gives you a single sort order).
>
> ---
> src/libvirt_private.syms | 2 ++
> src/util/hash.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
> src/util/hash.h | 21 +++++++++++++++++++++
I'd still feel a bit better if we had coverage for the new function in
tests/hashtest.c, but I'll let that slide to another patch; this patch
already blocks enough other useful stuff that it will get some good
field testing from the tck runs you do, while we work on enhancing
hashtest.c.
> }
> +
> +struct getKeysIter
> +{
> + virHashKeyValuePair *sortArray;
> + unsigned arrayIdx;
> +};
Lots simpler, huh? :)
>
> +/*
> + * Get the hash table's key/value pairs and have them optionally sorted.
> + * The returned array contains virHashSize() elements. Aditionally,
s/Aditionally/Additionally/
> + * an empty element has been added to the end of the array whose key == NULL
> + * also indicates the end of the array.
We don't need both "Additionally" and "also" in the same sentence. How
about:
s/also indicates/to indicate/
> + * The key/value pairs are only valid as long as the underlying hash
> + * table is not modified, i.e., keys removed or the hash table deleted.
s/keys removed or the hash table deleted/no keys are removed or
inserted, and the hash table is not deleted/
> + * The caller must only free the returned array using VIR_FREE().
> + * The caller must make copies of all returned keys and values if they are
> + * to be used somewhere else.
> + */
> +typedef struct _virHashKeyValuePair virHashKeyValuePair;
> +typedef virHashKeyValuePair *virHashKeyValuePairPtr;
> +struct _virHashKeyValuePair {
> + const void *key;
> + const void *value;
> +};
> +typedef int (*virHashKeyComparator)(const virHashKeyValuePairPtr ,
> + const virHashKeyValuePairPtr );
The spacing looks awkward on these two lines;
s/ \([,)]\)/\1/
ACK. No need to see a v6 on this one, as the fixes are trivial.
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20111117/2463962c/attachment-0001.sig>
More information about the libvir-list
mailing list