00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00039 #ifndef _M_HASH_H
00040 #define _M_HASH_H
00041
00042 #include "mtypes.h"
00043 #include "result.h"
00044
00045 #define HASH_FACTOR 4
00046
00047
00048 typedef struct m_chhash_s m_chhash_t;
00049
00050
00051 typedef struct m_chhash_iter_s m_chhash_iter_t;
00052
00053 typedef uintptr_t m_chhash_key_t;
00054 typedef void *m_chhash_value_t;
00055 typedef struct m_chhash_bucket_s m_chhash_bucket_t;
00056
00057 struct m_chhash_iter_s {
00058 m_chhash_t *chhash;
00059 unsigned int index;
00060 m_chhash_bucket_t *bucket;
00061 };
00062
00063
00064 m_result_t m_chhash_create(m_chhash_t**, unsigned int, bool);
00065 m_result_t m_chhash_destroy(m_chhash_t**);
00066 m_result_t m_chhash_add(m_chhash_t*, m_chhash_key_t, m_chhash_value_t);
00067 m_result_t m_chhash_lookup(m_chhash_t*, m_chhash_key_t, m_chhash_value_t *);
00068 m_result_t m_chhash_remove(m_chhash_t*, m_chhash_key_t, m_chhash_value_t *);
00069 void m_chhash_iter_init(m_chhash_t *chhash, m_chhash_iter_t *iter);
00070 m_result_t m_chhash_iter_next(m_chhash_iter_t *iter, m_chhash_key_t *key, m_chhash_value_t *value);
00071 void m_chhash_print(m_chhash_t *);
00072 #endif