X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fhtable%2Fhtable_type.h;h=0aacb7f334925ffe58d2c8cb489a9ae0efe36b66;hb=1d14555d3a4501adae909884bcb8f8a0b142c89c;hp=9dad4b3927186ab661f6099eeb7e801ed9204277;hpb=b98c68473e3317e09ebcc2d7d46e374fc08c531d;p=ccan diff --git a/ccan/htable/htable_type.h b/ccan/htable/htable_type.h index 9dad4b39..0aacb7f3 100644 --- a/ccan/htable/htable_type.h +++ b/ccan/htable/htable_type.h @@ -35,6 +35,9 @@ * bool _del(struct *ht, const *e); * bool _delkey(struct *ht, const *k); * + * Delete by iterator: + * bool _delval(struct *ht, struct _iter *i); + * * Find and return the (first) matching element, or NULL: * type *_get(const struct @name *ht, const *k); * @@ -48,7 +51,8 @@ * type *_first(const struct *ht, struct _iter *i); * type *_next(const struct *ht, struct _iter *i); * type *_prev(const struct *ht, struct _iter *i); - * + * type *_pick(const struct *ht, size_t seed, + * struct _iter *i); * It's currently safe to iterate over a changing hashtable, but you might * miss an element. Iteration isn't very efficient, either. * @@ -146,6 +150,17 @@ return name##_del(ht, elem); \ return false; \ } \ + static inline UNNEEDED void name##_delval(struct name *ht, \ + struct name##_iter *iter) \ + { \ + htable_delval(&ht->raw, &iter->i); \ + } \ + static inline UNNEEDED type *name##_pick(const struct name *ht, \ + size_t seed, \ + struct name##_iter *iter) \ + { \ + return htable_pick(&ht->raw, seed, iter ? &iter->i : NULL); \ + } \ static inline UNNEEDED type *name##_first(const struct name *ht, \ struct name##_iter *iter) \ { \