- /**
- * @file hash.h
- * Hash table implementation that allows using memory pools for storage as well as using
- * shared memory for this purpose
- */
-
- #ifndef RSPAMD_HASH_H
- #define RSPAMD_HASH_H
-
- #include "config.h"
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- struct rspamd_lru_hash_s;
- typedef struct rspamd_lru_hash_s rspamd_lru_hash_t;
- struct rspamd_lru_element_s;
- typedef struct rspamd_lru_element_s rspamd_lru_element_t;
-
-
- /**
- * Create new lru hash
- * @param maxsize maximum elements in a hash
- * @param maxage maximum age of element
- * @param hash_func pointer to hash function
- * @param key_equal_func pointer to function for comparing keys
- * @return new rspamd_hash object
- */
- rspamd_lru_hash_t *rspamd_lru_hash_new(int maxsize,
- GDestroyNotify key_destroy,
- GDestroyNotify value_destroy);
-
-
- /**
- * Create new lru hash
- * @param maxsize maximum elements in a hash
- * @param maxage maximum age of element
- * @param hash_func pointer to hash function
- * @param key_equal_func pointer to function for comparing keys
- * @return new rspamd_hash object
- */
- rspamd_lru_hash_t *rspamd_lru_hash_new_full(int maxsize,
- GDestroyNotify key_destroy,
- GDestroyNotify value_destroy,
- GHashFunc hfunc,
- GEqualFunc eqfunc);
-
- /**
- * Lookup item from hash
- * @param hash hash object
- * @param key key to find
- * @return value of key or NULL if key is not found
- */
- gpointer rspamd_lru_hash_lookup(rspamd_lru_hash_t *hash,
- gconstpointer key,
- time_t now);
-
- /**
- * Removes key from LRU cache
- * @param hash
- * @param key
- * @return TRUE if key has been found and removed
- */
- gboolean rspamd_lru_hash_remove(rspamd_lru_hash_t *hash,
- gconstpointer key);
-
- /**
- * Insert item in hash
- * @param hash hash object
- * @param key key to insert
- * @param value value of key
- */
- void rspamd_lru_hash_insert(rspamd_lru_hash_t *hash,
- gpointer key,
- gpointer value,
- time_t now,
- unsigned int ttl);
-
- /**
- * Remove lru hash
- * @param hash hash object
- */
-
- void rspamd_lru_hash_destroy(rspamd_lru_hash_t *hash);
-
- /**
- * Iterate over lru hash. Iterations must start from it=0 and are done when it==-1
- * @param hash
- * @param it
- * @param k
- * @param v
- * @return new it or -1 if iteration has been reached over
- */
- int rspamd_lru_hash_foreach(rspamd_lru_hash_t *hash, int it, gpointer *k,
- gpointer *v);
-
- /**
- * Returns number of elements in a hash
- * @param hash hash object
- */
- unsigned int rspamd_lru_hash_size(rspamd_lru_hash_t *hash);
-
- /**
- * Returns hash capacity
- * @param hash hash object
- */
- unsigned int rspamd_lru_hash_capacity(rspamd_lru_hash_t *hash);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif
|