Subversion Repositories HelenOS

Rev

Rev 2071 | Rev 2106 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2071 Rev 2089
Line 35... Line 35...
35
#ifndef KERN_HASH_TABLE_H_
35
#ifndef KERN_HASH_TABLE_H_
36
#define KERN_HASH_TABLE_H_
36
#define KERN_HASH_TABLE_H_
37
 
37
 
38
#include <adt/list.h>
38
#include <adt/list.h>
39
#include <arch/types.h>
39
#include <arch/types.h>
40
#include <typedefs.h>
-
 
41
 
-
 
42
/** Hash table structure. */
-
 
43
struct hash_table {
-
 
44
    link_t *entry;
-
 
45
    count_t entries;
-
 
46
    count_t max_keys;
-
 
47
    hash_table_operations_t *op;
-
 
48
};
-
 
49
 
40
 
50
/** Set of operations for hash table. */
41
/** Set of operations for hash table. */
51
struct hash_table_operations {
42
typedef struct {
52
    /** Hash function.
43
    /** Hash function.
53
     *
44
     *
54
     * @param key Array of keys needed to compute hash index. All keys must be passed.
45
     * @param key Array of keys needed to compute hash index. All keys must be passed.
55
     *
46
     *
56
     * @return Index into hash table.
47
     * @return Index into hash table.
Line 68... Line 59...
68
    /** Hash table item removal callback.
59
    /** Hash table item removal callback.
69
     *
60
     *
70
     * @param item Item that was removed from the hash table.
61
     * @param item Item that was removed from the hash table.
71
     */
62
     */
72
    void (*remove_callback)(link_t *item);
63
    void (*remove_callback)(link_t *item);
-
 
64
} hash_table_operations_t;
73
};
65
 
-
 
66
/** Hash table structure. */
-
 
67
typedef struct {
-
 
68
    link_t *entry;
-
 
69
    count_t entries;
-
 
70
    count_t max_keys;
-
 
71
    hash_table_operations_t *op;
-
 
72
} hash_table_t;
74
 
73
 
75
#define hash_table_get_instance(item, type, member) list_get_instance((item), type, member)
74
#define hash_table_get_instance(item, type, member) list_get_instance((item), type, member)
76
 
75
 
77
extern void hash_table_create(hash_table_t *h, count_t m, count_t max_keys, hash_table_operations_t *op);
76
extern void hash_table_create(hash_table_t *h, count_t m, count_t max_keys, hash_table_operations_t *op);
78
extern void hash_table_insert(hash_table_t *h, unative_t key[], link_t *item);
77
extern void hash_table_insert(hash_table_t *h, unative_t key[], link_t *item);