BSD taskqueues via KMSGs
[akaros.git] / kern / include / hashtable.h
index 00c1d15..e913def 100644 (file)
@@ -6,7 +6,8 @@
  *   - Provides common hash and equality functions (meant for longs)
  *   - Uses the slab allocator for hash entry allocation.
  *   - Merges the iterator code with the main hash table code, mostly to avoid
- *   externing the hentry cache. */
+ *   externing the hentry cache.
+ *   - hash for each */
 
 #ifndef __ROS_KERN_HASHTABLE_H__
 #define __ROS_KERN_HASHTABLE_H__
@@ -39,7 +40,6 @@ typedef struct hashtable {
     ssize_t (*eqfn) (void *k1, void *k2);
 } hashtable_t;
 
-size_t hash(struct hashtable *h, void *k);
 static inline size_t indexFor(unsigned int tablelength, unsigned int hashvalue)
 {
        return (hashvalue % tablelength);
@@ -234,7 +234,7 @@ typedef struct hashtable_itr {
 } hashtable_itr_t;
 
 /*****************************************************************************/
-/* hashtable_iterator
+/* hashtable_iterator.  Be sure to kfree this when you are done.
  */
 
 hashtable_itr_t *
@@ -294,6 +294,10 @@ ssize_t fnname (hashtable_itr_t *i, hashtable_t *h, keytype *k) \
     return (hashtable_iterator_search(i,h,k)); \
 }
 
+/* Runs func on each member of the hash table */
+void hash_for_each(struct hashtable *hash, void func(void*));
+/* Same, but removes the item too */
+void hash_for_each_remove(struct hashtable *hash, void func(void*));
 
 #endif /* __ROS_KERN_HASHTABLE_H__ */