vfs: Remove the guts of the VFS
[akaros.git] / kern / include / hashtable.h
index 00c1d15..3e94257 100644 (file)
@@ -1,23 +1,15 @@
 /* Copyright (C) 2002, 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk>
- * 
+ *
  * Modified 2009 by Barret Rhoden <brho@cs.berkeley.edu>
  * Changes include:
  *   - No longer frees keys or values.  It's up to the client to do that.
  *   - 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. */
-
-#ifndef __ROS_KERN_HASHTABLE_H__
-#define __ROS_KERN_HASHTABLE_H__
-
-#ifdef __DEPUTY__
-#pragma nodeputy
-#endif
+ *   externing the hentry cache.
+ *   - hash for each */
 
-#ifdef __SHARC__
-#pragma nosharc
-#endif
+#pragma once
 
 #include <ros/common.h>
 
@@ -39,7 +31,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);
@@ -62,7 +53,7 @@ static inline size_t indexFor(unsigned int tablelength, unsigned int hashvalue)
  *      v = (struct some_value *)   kmalloc(sizeof(struct some_value));
  *
  *      (initialise k and v to suitable values)
- * 
+ *
  *      if (! hashtable_insert(h,k,v) )
  *      {     panic("Hashtable broken...\n");       }
  *
@@ -76,7 +67,7 @@ static inline size_t indexFor(unsigned int tablelength, unsigned int hashvalue)
 
 /* Macros may be used to define type-safe(r) hashtable access functions, with
  * methods specialized to take known key and value types as parameters.
- * 
+ *
  * Example:
  *
  * Insert this at the start of your file:
@@ -113,7 +104,7 @@ ssize_t __generic_eq(void *k1, void *k2);
 
 /*****************************************************************************
  * create_hashtable
-   
+
  * @name                    create_hashtable
  * @param   minsize         minimum initial size of hashtable
  * @param   hashfunction    function for hashing keys
@@ -128,7 +119,7 @@ create_hashtable(size_t minsize,
 
 /*****************************************************************************
  * hashtable_insert
-   
+
  * @name        hashtable_insert
  * @param   h   the hashtable to insert into
  * @param   k   the key
@@ -145,7 +136,7 @@ create_hashtable(size_t minsize,
  * If in doubt, remove before insert.
  */
 
-ssize_t 
+ssize_t
 hashtable_insert(hashtable_t *h, void *k, void *v);
 
 #define DEFINE_HASHTABLE_INSERT(fnname, keytype, valuetype) \
@@ -156,7 +147,7 @@ ssize_t fnname (hashtable_t *h, keytype *k, valuetype *v) \
 
 /*****************************************************************************
  * hashtable_search
-   
+
  * @name        hashtable_search
  * @param   h   the hashtable to search
  * @param   k   the key to search for
@@ -174,7 +165,7 @@ valuetype * fnname (hashtable_t *h, keytype *k) \
 
 /*****************************************************************************
  * hashtable_remove
-   
+
  * @name        hashtable_remove
  * @param   h   the hashtable to remove the item from
  * @param   k   the key to search for
@@ -195,7 +186,7 @@ valuetype * fnname (hashtable_t *h, keytype *k) \
 
 /*****************************************************************************
  * hashtable_count
-   
+
  * @name        hashtable_count
  * @param   h   the hashtable
  * @return      the number of items stored in the hashtable
@@ -207,7 +198,7 @@ hashtable_count(hashtable_t *h);
 
 /*****************************************************************************
  * hashtable_destroy
-   
+
  * @name        hashtable_destroy
  * @param   h   the hashtable
  *
@@ -234,7 +225,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,29 +285,33 @@ ssize_t fnname (hashtable_itr_t *i, hashtable_t *h, keytype *k) \
     return (hashtable_iterator_search(i,h,k)); \
 }
 
-
-#endif /* __ROS_KERN_HASHTABLE_H__ */
+/* Runs func on each member of the hash table */
+void hash_for_each(struct hashtable *hash, void func(void *, void *),
+                                  void *opaque);
+/* Same, but removes the item too */
+void hash_for_each_remove(struct hashtable *hash, void func(void *, void *),
+                                                 void *opaque);
 
 /*
  * Copyright (c) 2002, 2004, Christopher Clark
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
- * 
+ *
  * * Redistributions of source code must retain the above copyright
  * notice, this list of conditions and the following disclaimer.
- * 
+ *
  * * Redistributions in binary form must reproduce the above copyright
  * notice, this list of conditions and the following disclaimer in the
  * documentation and/or other materials provided with the distribution.
- * 
+ *
  * * Neither the name of the original author; nor the names of any contributors
  * may be used to endorse or promote products derived from this software
  * without specific prior written permission.
- * 
- * 
+ *
+ *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR